@@ -100,8 +100,8 @@ boost::shared_ptr<EngineFactory> Analytic::engineFactory() {
100100 configurations[MarketContext::pricing] = inputs_->marketConfig (" pricing" );
101101 LOG (" MarketContext::pricing = " << inputs_->marketConfig (" pricing" ));
102102 // configurations[MarketContext::simulation] = inputs_->marketConfig("simulation");
103- return boost::make_shared<EngineFactory>(edCopy, market_, configurations, extraEngineBuilders, extraLegBuilders ,
104- inputs_-> refDataManager (), *inputs_->iborFallbackConfig ());
103+ return boost::make_shared<EngineFactory>(edCopy, market_, configurations, inputs_-> refDataManager () ,
104+ *inputs_->iborFallbackConfig ());
105105}
106106
107107boost::shared_ptr<ore::data::EngineFactory> PricingAnalytic::engineFactory () {
@@ -117,8 +117,8 @@ boost::shared_ptr<ore::data::EngineFactory> PricingAnalytic::engineFactory() {
117117 // configurations[MarketContext::simulation] = inputs_->marketConfig("simulation");
118118 std::vector<boost::shared_ptr<ore::data::EngineBuilder>> extraBuilders;
119119 std::vector<boost::shared_ptr<ore::data::LegBuilder>> extraLegBuilders;
120- return boost::make_shared<EngineFactory>(edCopy, market_, configurations, extraBuilders, extraLegBuilders ,
121- inputs_-> refDataManager (), *inputs_->iborFallbackConfig ());
120+ return boost::make_shared<EngineFactory>(edCopy, market_, configurations, inputs_-> refDataManager () ,
121+ *inputs_->iborFallbackConfig ());
122122}
123123
124124void Analytic::buildMarket (const boost::shared_ptr<ore::data::InMemoryLoader>& loader,
@@ -299,11 +299,10 @@ void PricingAnalytic::runAnalytic(const boost::shared_ptr<ore::data::InMemoryLoa
299299 std::string marketConfig = inputs_->marketConfig (" pricing" );
300300 std::vector<boost::shared_ptr<ore::data::EngineBuilder>> extraEngineBuilders;
301301 std::vector<boost::shared_ptr<ore::data::LegBuilder>> extraLegBuilders;
302- boost::shared_ptr<StressTest> stressTest = boost::make_shared<StressTest>(
303- portfolio_, market_, marketConfig, inputs_->pricingEngine (), inputs_->stressSimMarketParams (),
304- inputs_->stressScenarioData (), *inputs_->curveConfigs ().at (0 ),
305- *configurations_.todaysMarketParams , nullptr , extraEngineBuilders, extraLegBuilders,
306- inputs_->refDataManager (), *inputs_->iborFallbackConfig (), inputs_->continueOnError ());
302+ boost::shared_ptr<StressTest> stressTest = boost::make_shared<StressTest>(
303+ portfolio_, market_, marketConfig, inputs_->pricingEngine (), inputs_->stressSimMarketParams (),
304+ inputs_->stressScenarioData (), *inputs_->curveConfigs ().at (0 ), *configurations_.todaysMarketParams ,
305+ nullptr , inputs_->refDataManager (), *inputs_->iborFallbackConfig (), inputs_->continueOnError ());
307306 stressTest->writeReport (report, inputs_->stressThreshold ());
308307 reports_[analytic][" stress" ] = report;
309308 CONSOLE (" OK" );
@@ -320,11 +319,10 @@ void PricingAnalytic::runAnalytic(const boost::shared_ptr<ore::data::InMemoryLoa
320319 std::vector<boost::shared_ptr<ore::data::EngineBuilder>> extraEngineBuilders;
321320 std::vector<boost::shared_ptr<ore::data::LegBuilder>> extraLegBuilders;
322321 sensiAnalysis = boost::make_shared<SensitivityAnalysisPlus>(
323- portfolio_, market_, configuration, inputs_->pricingEngine (),
324- configurations_.simMarketParams , configurations_.sensiScenarioData , recalibrateModels,
325- inputs_->curveConfigs ().at (0 ), configurations_.todaysMarketParams , ccyConv, extraEngineBuilders,
326- extraLegBuilders, inputs_->refDataManager (), *inputs_->iborFallbackConfig (), true , false ,
327- inputs_->dryRun ());
322+ portfolio_, market_, configuration, inputs_->pricingEngine (), configurations_.simMarketParams ,
323+ configurations_.sensiScenarioData , recalibrateModels, inputs_->curveConfigs ().at (0 ),
324+ configurations_.todaysMarketParams , ccyConv, inputs_->refDataManager (),
325+ *inputs_->iborFallbackConfig (), true , false , inputs_->dryRun ());
328326 LOG (" Single-threaded sensi analysis created" );
329327 }
330328 else {
@@ -338,8 +336,7 @@ void PricingAnalytic::runAnalytic(const boost::shared_ptr<ore::data::InMemoryLoa
338336 inputs_->nThreads (), inputs_->asof (), loader, portfolio_, Market::defaultConfiguration,
339337 inputs_->pricingEngine (), configurations_.simMarketParams , configurations_.sensiScenarioData ,
340338 recalibrateModels, inputs_->curveConfigs ().at (0 ), configurations_.todaysMarketParams , ccyConv,
341- extraTradeBuilders, extraEngineBuilders, extraLegBuilders, inputs_->refDataManager (),
342- *inputs_->iborFallbackConfig (), true , false , inputs_->dryRun ());
339+ inputs_->refDataManager (), *inputs_->iborFallbackConfig (), true , false , inputs_->dryRun ());
343340 LOG (" Multi-threaded sensi analysis created" );
344341 }
345342 // FIXME: Why are these disabled?
@@ -512,13 +509,11 @@ boost::shared_ptr<EngineFactory> XvaAnalytic::engineFactory() {
512509 // link to the sim market here
513510 QL_REQUIRE (simMarket_, " Simulaton market not set" );
514511 engineFactory_ = boost::make_shared<EngineFactory>(edCopy, simMarket_, configurations,
515- extraEngineBuilders, extraLegBuilders, inputs_->refDataManager (),
516- *inputs_->iborFallbackConfig ());
512+ inputs_->refDataManager (), *inputs_->iborFallbackConfig ());
517513 } else {
518514 // we just link to today's market if simulation is not required
519- engineFactory_ = boost::make_shared<EngineFactory>(edCopy, market_, configurations,
520- extraEngineBuilders, extraLegBuilders, inputs_->refDataManager (),
521- *inputs_->iborFallbackConfig ());
515+ engineFactory_ = boost::make_shared<EngineFactory>(edCopy, market_, configurations, inputs_->refDataManager (),
516+ *inputs_->iborFallbackConfig ());
522517 }
523518 return engineFactory_;
524519}
@@ -779,7 +774,7 @@ void XvaAnalytic::buildClassicCube(const boost::shared_ptr<Portfolio>& portfolio
779774 inputs_->nThreads (), inputs_->asof (), grid_, samples_, loader_, scenarioGenerator_,
780775 inputs_->simulationPricingEngine (), inputs_->curveConfigs ()[0 ], configurations_.todaysMarketParams ,
781776 inputs_->marketConfig (" simulation" ), configurations_.simMarketParams , false , false ,
782- boost::make_shared<ore::analytics::ScenarioFilter>(), {}, {}, {}, inputs_->refDataManager (),
777+ boost::make_shared<ore::analytics::ScenarioFilter>(), inputs_->refDataManager (),
783778 *inputs_->iborFallbackConfig (), true , false , cubeFactory, {}, cptyCubeFactory, " xva-simulation" );
784779
785780 if (ConsoleLog::instance ().enabled ())
@@ -804,22 +799,8 @@ void XvaAnalytic::buildClassicCube(const boost::shared_ptr<Portfolio>& portfolio
804799 Settings::instance ().evaluationDate () = inputs_->asof ();
805800}
806801
807-
808- std::vector<boost::shared_ptr<EngineBuilder>>
809- getAmcEngineBuilders (const boost::shared_ptr<QuantExt::CrossAssetModel>& cam, const std::vector<Date>& grid) {
810- std::vector<boost::shared_ptr<EngineBuilder>> eb;
811- eb.push_back (boost::make_shared<data::CamAmcCurrencySwapEngineBuilder>(cam, grid));
812- eb.push_back (boost::make_shared<data::CamAmcFxOptionEngineBuilder>(cam, grid));
813- eb.push_back (boost::make_shared<data::CamAmcMultiLegOptionEngineBuilder>(cam, grid));
814- eb.push_back (boost::make_shared<data::CamAmcSwapEngineBuilder>(cam, grid));
815- eb.push_back (boost::make_shared<data::LgmAmcBermudanSwaptionEngineBuilder>(cam, grid));
816- // FIXME: Uncomment for release 10
817- // eb.push_back(boost::make_shared<data::ScriptedTradeEngineBuilder>(ScriptLibraryStorage::scriptLibrary, cam, grid));
818- return eb;
819- }
820-
821-
822- boost::shared_ptr<EngineFactory> XvaAnalytic::amcEngineFactory () {
802+ boost::shared_ptr<EngineFactory> XvaAnalytic::amcEngineFactory (const boost::shared_ptr<QuantExt::CrossAssetModel>& cam,
803+ const std::vector<Date>& grid) {
823804 LOG (" XvaAnalytic::engineFactory() called" );
824805 boost::shared_ptr<EngineData> edCopy = boost::make_shared<EngineData>(*inputs_->amcPricingEngine ());
825806 edCopy->globalParameters ()[" GenerateAdditionalResults" ] = inputs_->outputAdditionalResults () ? " true" : " false" ;
@@ -830,14 +811,12 @@ boost::shared_ptr<EngineFactory> XvaAnalytic::amcEngineFactory() {
830811 configurations[MarketContext::pricing] = inputs_->marketConfig (" pricing" );
831812 std::vector<boost::shared_ptr<EngineBuilder>> extraEngineBuilders;
832813 std::vector<boost::shared_ptr<LegBuilder>> extraLegBuilders;
833- auto factory = boost::make_shared<EngineFactory>(edCopy, market_, configurations,
834- extraEngineBuilders, extraLegBuilders,
835- inputs_->refDataManager (),
836- *inputs_->iborFallbackConfig ());
814+ auto factory = boost::make_shared<EngineFactory>(
815+ edCopy, market_, configurations, inputs_->refDataManager (), *inputs_->iborFallbackConfig (),
816+ EngineBuilderFactory::instance ().generateAmcEngineBuilders (cam, grid), true );
837817 return factory;
838818}
839819
840-
841820void XvaAnalytic::buildAmcPortfolio () {
842821 LOG (" XVA: buildAmcPortfolio" );
843822 CONSOLEW (" XVA: Build AMC portfolio" );
@@ -846,14 +825,9 @@ void XvaAnalytic::buildAmcPortfolio() {
846825 std::vector<Date> simDates =
847826 configurations_.scenarioGeneratorData ->withCloseOutLag () && !configurations_.scenarioGeneratorData ->withMporStickyDate () ?
848827 configurations_.scenarioGeneratorData ->getGrid ()->dates () : configurations_.scenarioGeneratorData ->getGrid ()->valuationDates ();
849-
850- LOG (" buildAmcPortfolio: Get engine builders" );
851- auto eb = getAmcEngineBuilders (model_, simDates);
852828
853829 LOG (" buildAmcPortfolio: Register additional engine builders" );
854- auto factory = amcEngineFactory ();
855- for (auto const & b : eb)
856- factory->registerBuilder (b);
830+ auto factory = amcEngineFactory (model_, simDates);
857831
858832 LOG (" buildAmcPortfolio: Load Portfolio" );
859833 boost::shared_ptr<Portfolio> portfolio = inputs_->portfolio ();
@@ -928,8 +902,8 @@ void XvaAnalytic::amcRun(bool doClassicRun) {
928902 inputs_->amcPricingEngine (), inputs_->curveConfigs ()[0 ], configurations_.todaysMarketParams ,
929903 inputs_->marketConfig (" lgmcalibration" ), inputs_->marketConfig (" fxcalibration" ),
930904 inputs_->marketConfig (" eqcalibration" ), inputs_->marketConfig (" infcalibration" ),
931- inputs_->marketConfig (" crcalibration" ), inputs_->marketConfig (" simulation" ), getAmcEngineBuilders, {}, {} ,
932- inputs_-> refDataManager (), *inputs_->iborFallbackConfig (), true , cubeFactory);
905+ inputs_->marketConfig (" crcalibration" ), inputs_->marketConfig (" simulation" ), inputs_-> refDataManager () ,
906+ *inputs_->iborFallbackConfig (), true , cubeFactory);
933907 if (ConsoleLog::instance ().enabled ())
934908 amcEngine.registerProgressIndicator (progressBar);
935909 amcEngine.registerProgressIndicator (progressLog);
0 commit comments