@@ -1378,7 +1378,6 @@ void ScriptedTradeEngineBuilder::buildGaussianCam(const std::string& id, const I
13781378 std::vector<QuantLib::ext::shared_ptr<FxBsData>> fxConfigs;
13791379 std::vector<QuantLib::ext::shared_ptr<EqBsData>> eqConfigs;
13801380 std::vector<QuantLib::ext::shared_ptr<CommoditySchwartzData>> comConfigs;
1381- // TODO: populate comConfigs
13821381
13831382 // calibration expiries and terms for IR, INF, FX, EQ parametrisations (this will only work for a fixed reference
13841383 // date, due to the way the cam builder and nested builders work, see ticket #940)
@@ -1597,8 +1596,27 @@ void ScriptedTradeEngineBuilder::buildGaussianCam(const std::string& id, const I
15971596 std::vector<QuantLib::ext::shared_ptr<CrLgmData>> crLgmConfigs;
15981597 std::vector<QuantLib::ext::shared_ptr<CrCirData>> crCirConfigs;
15991598
1600- // COMM configs, not supported at this point
1601- QL_REQUIRE (commIndices_.empty (), " GaussianCam model does not support commodity underlyings currently" );
1599+ // COMM configs
1600+ for (auto const & comm : commIndices_) {
1601+ auto config = QuantLib::ext::make_shared<CommoditySchwartzData>();
1602+ config->currency () = getCommCcy (comm);
1603+ config->name () = comm.commName ();
1604+ if (calibrationExpiries.empty () || zeroVolatility_) {
1605+ config->calibrationType () = CalibrationType::None;
1606+ config->calibrateSigma () = false ;
1607+ config->sigmaParamType () = ParamType::Constant;
1608+ config->sigmaValue () = 0.0 ;
1609+ } else {
1610+ config->calibrationType () = CalibrationType::BestFit;
1611+ config->calibrateSigma () = true ;
1612+ config->sigmaParamType () = ParamType::Constant;
1613+ config->sigmaValue () = 0.10 ; // start value for optimizer
1614+ config->optionExpiries () = calibrationExpiries;
1615+ config->optionStrikes () =
1616+ std::vector<std::string>(calibrationExpiries.size (), " ATMF" ); // hardcoded ATMF calibration strike
1617+ }
1618+ comConfigs.push_back (config);
1619+ }
16021620
16031621 std::string configurationInCcy = configuration (MarketContext::irCalibration);
16041622 std::string configurationXois = configuration (MarketContext::pricing);
0 commit comments