@@ -187,8 +187,6 @@ void TRS::fromXML(XMLNode* node) {
187187 boost::shared_ptr<Trade> u;
188188 try {
189189 u = TradeFactory::instance ().build (tradeType);
190- if (sensitivityTemplate ().empty ())
191- setSensitivityTemplate (u->sensitivityTemplate ());
192190 } catch (const std::exception& e) {
193191 QL_FAIL (" Failed for build TRS underlying trade # " << underlyingCounter + 1 << " : " << e.what ());
194192 }
@@ -204,8 +202,6 @@ void TRS::fromXML(XMLNode* node) {
204202 QL_REQUIRE (t != nullptr , " expected 'Trade' node under 'Derivative' node" );
205203 std::string tradeType = XMLUtils::getChildValue (t, " TradeType" , true );
206204 auto u = TradeFactory::instance ().build (tradeType);
207- if (sensitivityTemplate ().empty ())
208- setSensitivityTemplate (u->sensitivityTemplate ());
209205 QL_REQUIRE (u, " No trade builder found for TRS derivative trade type '"
210206 << tradeType << " ' when processing underlying trade #" << (underlyingCounter + 1 ));
211207 u->id () = this ->id () + " _underlying" +
@@ -337,6 +333,10 @@ void TRS::build(const boost::shared_ptr<EngineFactory>& engineFactory) {
337333 underlying_[i]->reset ();
338334 underlying_[i]->build (engineFactory);
339335 requiredFixings_.addData (underlying_[i]->requiredFixings ());
336+ // populate sensi template from first underlying, we have to make _some_ assumption here!
337+ if (sensitivityTemplate_.empty ()) {
338+ setSensitivityTemplate (underlying_[i]->sensitivityTemplate ());
339+ }
340340 }
341341
342342 // we use dirty prices, so we need accrued amounts in the past
0 commit comments