@@ -37,21 +37,23 @@ using namespace std;
3737using namespace ore ::data;
3838
3939namespace {
40- boost::shared_ptr<PricingEngine> buildMcEngine (const std::function<string(string)>& engineParameters,
41- const boost::shared_ptr<LGM>& lgm,
42- const Handle<YieldTermStructure>& discountCurve,
43- const std::vector<Date>& simulationDates,
44- const std::vector<Size>& externalModelIndices) {
40+ boost::shared_ptr<PricingEngine> buildMcEngine (
41+ const std::function<string(string, const std::vector<std::string>&, const bool , const string&)>& engineParameter,
42+ const boost::shared_ptr<LGM>& lgm, const Handle<YieldTermStructure>& discountCurve,
43+ const std::vector<Date>& simulationDates, const std::vector<Size>& externalModelIndices) {
4544
4645 return boost::make_shared<QuantExt::McMultiLegOptionEngine>(
47- lgm, parseSequenceType (engineParameters (" Training.Sequence" )),
48- parseSequenceType (engineParameters (" Pricing.Sequence" )), parseInteger (engineParameters (" Training.Samples" )),
49- parseInteger (engineParameters (" Pricing.Samples" )), parseInteger (engineParameters (" Training.Seed" )),
50- parseInteger (engineParameters (" Pricing.Seed" )), parseInteger (engineParameters (" Training.BasisFunctionOrder" )),
51- parsePolynomType (engineParameters (" Training.BasisFunction" )),
52- parseSobolBrownianGeneratorOrdering (engineParameters (" BrownianBridgeOrdering" )),
53- parseSobolRsgDirectionIntegers (engineParameters (" SobolDirectionIntegers" )), discountCurve, simulationDates,
54- externalModelIndices, parseBool (engineParameters (" MinObsDate" )),
46+ lgm, parseSequenceType (engineParameter (" Training.Sequence" , {}, false , " SobolBrownianBridge" )),
47+ parseSequenceType (engineParameter (" Pricing.Sequence" , {}, false , " SobolBrownianBridge" )),
48+ parseInteger (engineParameter (" Training.Samples" , {}, true , std::string ())),
49+ parseInteger (engineParameter (" Pricing.Samples" , {}, false , " 0" )),
50+ parseInteger (engineParameter (" Training.Seed" , {}, true , std::string ())),
51+ parseInteger (engineParameter (" Pricing.Seed" , {}, false , " 42" )),
52+ parseInteger (engineParameter (" Training.BasisFunctionOrder" , {}, true , std::string ())),
53+ parsePolynomType (engineParameter (" Training.BasisFunction" , {}, true , std::string ())),
54+ parseSobolBrownianGeneratorOrdering (engineParameter (" BrownianBridgeOrdering" , {}, false , " Steps" )),
55+ parseSobolRsgDirectionIntegers (engineParameter (" SobolDirectionIntegers" , {}, false , " JoeKuoD7" )), discountCurve,
56+ simulationDates, externalModelIndices, parseBool (engineParameter (" MinObsDate" , {}, false , " true" )),
5557 parseRegressorModel (engineParameter (" RegressorModel" , {}, false , " Simple" )));
5658}
5759} // namespace
@@ -292,8 +294,9 @@ LgmMcBermudanAmericanSwaptionEngineBuilder::engineImpl(const string& id, const s
292294 boost::shared_ptr<IborIndex> index;
293295 std::string ccy = tryParseIborIndex (key, index) ? index->currency ().code () : key;
294296 auto discountCurve = market_->discountCurve (ccy, configuration (MarketContext::pricing));
295- return buildMcEngine ([this ](const std::string& p) { return this ->engineParameter (p); }, lgm, discountCurve,
296- std::vector<Date>(), std::vector<Size>());
297+ return buildMcEngine ([this ](const std::string& p, const std::vector<std::string>& q, const bool m,
298+ const std::string& d) { return this ->engineParameter (p, q, m, d); },
299+ lgm, discountCurve, std::vector<Date>(), std::vector<Size>());
297300} // LgmMc engineImpl()
298301
299302boost::shared_ptr<PricingEngine>
@@ -315,8 +318,9 @@ LgmAmcBermudanAmericanSwaptionEngineBuilder::engineImpl(const string& id, const
315318 DLOG (" Build engine (configuration " << configuration (MarketContext::pricing) << " )" );
316319 // we assume that the given cam has pricing discount curves attached already
317320 Handle<YieldTermStructure> discountCurve;
318- return buildMcEngine ([this ](const std::string& p) { return this ->engineParameter (p); }, lgm, discountCurve,
319- simulationDates_, modelIndex);
321+ return buildMcEngine ([this ](const std::string& p, const std::vector<std::string>& q, const bool m,
322+ const std::string& d) { return this ->engineParameter (p, q, m, d); },
323+ lgm, discountCurve, simulationDates_, modelIndex);
320324} // LgmCam engineImpl
321325
322326} // namespace data
0 commit comments