@@ -324,12 +324,6 @@ void GenericBarrierOption::build(const boost::shared_ptr<EngineFactory>& factory
324324 << transatlanticBarrierType.size ());
325325 if (transatlanticBarrierType.size () == 1 && underlyings_.size () > 1 ) {
326326 transatlanticBarrierType.assign (underlyings_.size (), transatlanticBarrierType[0 ]);
327- for (Size i = 0 ; i < transatlanticBarrierType.size (); i++) {
328- std::cout << i << " : " << transatlanticBarrierType[i] << std::endl;
329- }
330- }
331- for (Size i = 0 ; i < transatlanticBarrierType.size (); i++) {
332- std::cout << i << " : " << transatlanticBarrierType[i] << std::endl;
333327 }
334328 transatlanticBarrierLevel.clear ();
335329 if (transatlanticBarrier_.size () == 1 ) {
@@ -350,7 +344,12 @@ void GenericBarrierOption::build(const boost::shared_ptr<EngineFactory>& factory
350344 }
351345 }
352346 if (transatlanticBarrier_.size () > 1 ) {
353- std::cout << " transatlanticBarrier_[1].rebate() = " << transatlanticBarrier_[1 ].rebate () << std::endl;
347+ for (Size i = 1 ; i < transatlanticBarrier_.size (); i++) {
348+ QL_REQUIRE (transatlanticBarrier_[i].rebateCurrency ().empty () ||
349+ transatlanticBarrier_[i].rebateCurrency () == transatlanticBarrier_[0 ].rebateCurrency (),
350+ " Rebate currency for transatlantic barriers must be identical or only given in the first "
351+ " transatlantic barrier." );
352+ }
354353 }
355354 transatlanticBarrierRebate = boost::lexical_cast<std::string>(transatlanticBarrier_[0 ].rebate ());
356355 if (!transatlanticBarrier_[0 ].rebateCurrency ().empty ())
@@ -364,7 +363,14 @@ void GenericBarrierOption::build(const boost::shared_ptr<EngineFactory>& factory
364363 auto positionType = parsePositionType (optionData_.longShort ());
365364 numbers_.emplace_back (" Number" , " LongShort" , positionType == Position::Long ? " 1" : " -1" );
366365
367- numbers_.emplace_back (" Number" , " PutCall" , parseOptionType (optionData_.callPut ()) == Option::Call ? " 1.0" : " -1.0" );
366+ if (optionData_.callPut ().empty ()) {
367+ QL_REQUIRE (optionData_.payoffType () == " CashOrNothing" || optionData_.payoffType () == " AssetOrNothing" ,
368+ " Payoff type must be vanilla if option type is not givien." );
369+ numbers_.emplace_back (" Number" , " PutCall" , " 1.0" );
370+ } else {
371+ numbers_.emplace_back (" Number" , " PutCall" ,
372+ parseOptionType (optionData_.callPut ()) == Option::Call ? " 1.0" : " -1.0" );
373+ }
368374 numbers_.emplace_back (" Number" , " Quantity" , quantity_.empty () ? " 0.0" : quantity_);
369375 if (!strike_.empty ())
370376 numbers_.emplace_back (" Number" , " Strike" , strike_);
0 commit comments