Skip to content

Commit 9a11a41

Browse files
committed
QPR-11988 register builder and use delegate builder when used
1 parent fd8b957 commit 9a11a41

3 files changed

Lines changed: 13 additions & 5 deletions

File tree

OREData/ored/portfolio/fxeuropeanbarrieroption.cpp

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -62,17 +62,22 @@ void FxEuropeanBarrierOption::build(const QuantLib::ext::shared_ptr<EngineFactor
6262
Real level = barrier_.levels()[0].value();
6363
Real rebate = barrier_.rebate();
6464
QL_REQUIRE(rebate >= 0, "Rebate must be non-negative");
65-
66-
auto fxEuropeanBarrierOptionBuilder =
67-
QuantLib::ext::dynamic_pointer_cast<FxEuropeanBarrierOptionEngineBuilder>(engineFactory->builder(tradeType_));
65+
QuantLib::ext::shared_ptr<FxEuropeanBarrierOptionScriptedEngineBuilder> fxEuropeanBarrierOptionBuilder;
66+
try {
67+
fxEuropeanBarrierOptionBuilder = QuantLib::ext::dynamic_pointer_cast<FxEuropeanBarrierOptionScriptedEngineBuilder>(
68+
engineFactory->builder(tradeType_));
69+
DLOG("FxEuropeanBarrierOptionScriptedEngineBuilder found for trade " << tradeType_);
70+
} catch (...) {
71+
// no delegating builder found
72+
}
6873
if (fxEuropeanBarrierOptionBuilder) {
6974
// We have a delegating builder for this trade
7075
auto delegatingBuilderTrade_ = fxEuropeanBarrierOptionBuilder->build(this, engineFactory);
7176
instrument_ = delegatingBuilderTrade_->instrument();
7277
maturity_ = delegatingBuilderTrade_->maturity();
7378
npvCurrency_ = delegatingBuilderTrade_->npvCurrency();
7479
additionalData_ = delegatingBuilderTrade_->additionalData();
75-
requiredFixings_ = delegatingBuilderTrade_->requiredFixings();
80+
requiredFixings_ = delegatingBuilderTrade_->requiredFixings();
7681
setSensitivityTemplate(delegatingBuilderTrade_->sensitivityTemplate());
7782
addProductModelEngine(delegatingBuilderTrade_->productModelEngine());
7883

OREData/ored/portfolio/genericbarrieroption.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -498,7 +498,7 @@ void GenericBarrierOption::build(const QuantLib::ext::shared_ptr<EngineFactory>&
498498
"Only CashOrNothing payoff allowed for mulitple underlyings");
499499

500500
std::string payoffType;
501-
if (optionData_.payoffType() == "Vanilla" || optionData_.payoffType() == "AssetOrNothing")
501+
if (optionData_.payoffType().empty() || optionData_.payoffType() == "Vanilla" || optionData_.payoffType() == "AssetOrNothing")
502502
payoffType = "0";
503503
else if (optionData_.payoffType() == "CashOrNothing")
504504
payoffType = "1";

OREData/ored/utilities/databuilders.cpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,7 @@
9393
#include <ored/portfolio/builders/fxdigitaloption.hpp>
9494
#include <ored/portfolio/builders/fxdoublebarrieroption.hpp>
9595
#include <ored/portfolio/builders/fxdoubletouchoption.hpp>
96+
#include <ored/portfolio/builders/fxeuropeanbarrieroption.hpp>
9697
#include <ored/portfolio/builders/fxforward.hpp>
9798
#include <ored/portfolio/builders/fxoption.hpp>
9899
#include <ored/portfolio/builders/fxtouchoption.hpp>
@@ -548,6 +549,8 @@ void dataBuilders() {
548549

549550
ORE_REGISTER_ENGINE_BUILDER(ScriptedTradeEngineBuilder, false)
550551
ORE_REGISTER_ENGINE_BUILDER(AsianOptionScriptedEngineBuilder, false)
552+
ORE_REGISTER_ENGINE_BUILDER(FxEuropeanBarrierOptionScriptedEngineBuilder, false)
553+
ORE_REGISTER_ENGINE_BUILDER(FxBarrierOptionScriptedEngineBuilder, false)
551554
ORE_REGISTER_ENGINE_BUILDER(RiskParticipationAgreementBlackEngineBuilder, false)
552555
ORE_REGISTER_ENGINE_BUILDER(RiskParticipationAgreementXCcyBlackEngineBuilder, false)
553556
ORE_REGISTER_ENGINE_BUILDER(RiskParticipationAgreementSwapLGMGridEngineBuilder, false)

0 commit comments

Comments
 (0)