@@ -88,12 +88,14 @@ bool MarketRiskBacktest::runTradeDetail(const ext::shared_ptr<MarketRiskReport::
8888 return requireTradePnl_ || trdDetail;
8989}
9090
91- void MarketRiskBacktest::addPnlCalculators (const ext::shared_ptr<MarketRiskReport::Reports>& reports) {
91+ void MarketRiskBacktest::addPnlCalculators (const ext::shared_ptr<MarketRiskReport::Reports>& reports,
92+ const QuantLib::ext::shared_ptr<TodaysMarketParameters>& marketConfig) {
9293 pnlCalculators_.push_back (
9394 QuantLib::ext::make_shared<PNLCalculator>(btArgs_->benchmarkPeriod_ ));
9495 auto btRpts = ext::dynamic_pointer_cast<BacktestReports>(reports);
9596 pnlCalculators_.push_back (
9697 QuantLib::ext::make_shared<BacktestPNLCalculator>(btArgs_->backtestPeriod_ , writePnl_, this , btRpts));
98+ todaysmarket_ = marketConfig;
9799}
98100
99101
@@ -372,6 +374,7 @@ void MarketRiskBacktest::createReports(const ext::shared_ptr<MarketRiskReport::R
372374 if (pnl) {
373375 for (const auto & t : pnlColumns ())
374376 pnl->addColumn (std::get<0 >(t), std::get<1 >(t), std::get<2 >(t));
377+ pnl->addColumn (" DiscountSpec" , string ());
375378 }
376379 }
377380
@@ -381,6 +384,7 @@ void MarketRiskBacktest::createReports(const ext::shared_ptr<MarketRiskReport::R
381384 pnlTrade->addColumn (" TradeId" , string ());
382385 for (const auto & t : pnlColumns ())
383386 pnlTrade->addColumn (std::get<0 >(t), std::get<1 >(t), std::get<2 >(t));
387+ pnlTrade->addColumn (" DiscountSpec" , string ());
384388 }
385389 }
386390}
@@ -453,6 +457,20 @@ void MarketRiskBacktest::addPnlRow(const QuantLib::ext::shared_ptr<BacktestRepor
453457 .add (currency.empty () || currency == calculationCurrency_ ? deltaPnl : deltaPnl / fxSpot)
454458 .add (currency.empty () || currency == calculationCurrency_ ? gammaPnl : gammaPnl / fxSpot)
455459 .add (currency.empty () ? calculationCurrency_ : currency);
460+
461+ // Append DiscountSpec column (from TodaysMarketParameters) if available and applicable
462+ std::string discountSpecStr;
463+ if (todaysmarket_ && key_1.keytype == QuantExt::RiskFactorKey::KeyType::DiscountCurve) {
464+ const auto & discMap = todaysmarket_->mapping (ore::data::MarketObject::DiscountCurve, ore::data::Market::defaultConfiguration);
465+ auto it = discMap.find (key_1.name );
466+ if (it != discMap.end ()){
467+ discountSpecStr = it->second ;
468+ }
469+ }
470+ if (!discountSpecStr.empty ())
471+ report.add (discountSpecStr);
472+ else
473+ report.add (string ());
456474}
457475
458476void BacktestPNLCalculator::writePNL (Size scenarioIdx, bool isCall, const RiskFactorKey& key_1, Real shift_1,
0 commit comments