Skip to content

Commit aae10b9

Browse files
Eric Mandolesijenkins
authored andcommitted
QPR-11243: add commoditycalibrationinfo infrastructure
1 parent 620091f commit aae10b9

5 files changed

Lines changed: 35 additions & 4 deletions

File tree

OREAnalytics/orea/app/reportwriter.cpp

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1252,6 +1252,13 @@ void addInflationCurveCalibrationInfo(ore::data::Report& report, const std::stri
12521252
}
12531253
}
12541254

1255+
void addCommodityCurveCalibrationInfo(ore::data::Report& report, const std::string& id,
1256+
boost::shared_ptr<CommodityCurveCalibrationInfo> const& info) {
1257+
if(info == nullptr)
1258+
return ;
1259+
addRowMktCalReport(report, "commodityCurve", id, "commodityDummyInfo", "", "", "", info->commDummyInfo);
1260+
}
1261+
12551262
void addFxEqVolCalibrationInfo(ore::data::Report& report, const std::string& type, const std::string& id,
12561263
boost::shared_ptr<FxEqVolCalibrationInfo> info) {
12571264
if (info == nullptr)
@@ -1404,6 +1411,12 @@ void ReportWriter::writeTodaysMarketCalibrationReport(
14041411
addInflationCurveCalibrationInfo(report, r.first, r.second);
14051412
}
14061413

1414+
// commodity curve results
1415+
1416+
for (auto const& r :calibrationInfo->commodityCurveCalibrationInfo) {
1417+
addCommodityCurveCalibrationInfo(report, r.first, r.second);
1418+
}
1419+
14071420
// fx vol results
14081421
for (auto const& r : calibrationInfo->fxVolCalibrationInfo) {
14091422
addFxEqVolCalibrationInfo(report, "fxVol", r.first, r.second);

OREData/ored/marketdata/commoditycurve.cpp

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,8 @@ CommodityCurve::CommodityCurve(const Date& asof, const CommodityCurveSpec& spec,
112112
const CurveConfigurations& curveConfigs,
113113
const FXTriangulation& fxSpots,
114114
const map<string, boost::shared_ptr<YieldCurve>>& yieldCurves,
115-
const map<string, boost::shared_ptr<CommodityCurve>>& commodityCurves)
115+
const map<string, boost::shared_ptr<CommodityCurve>>& commodityCurves,
116+
bool const buildCalibrationInfo)
116117
: spec_(spec), commoditySpot_(Null<Real>()), onValue_(Null<Real>()), tnValue_(Null<Real>()), regexQuotes_(false) {
117118

118119
try {
@@ -169,6 +170,10 @@ CommodityCurve::CommodityCurve(const Date& asof, const CommodityCurveSpec& spec,
169170
Handle<PriceTermStructure> pts(commodityPriceCurve_);
170171
commodityIndex_ = parseCommodityIndex(spec_.curveConfigID(), false, pts);
171172

173+
if(buildCalibrationInfo){
174+
calibrationInfo_->commDummyInfo = -1.0;
175+
}
176+
172177
} catch (std::exception& e) {
173178
QL_FAIL("commodity curve building failed: " << e.what());
174179
} catch (...) {

OREData/ored/marketdata/commoditycurve.hpp

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030
#include <ored/marketdata/fxtriangulation.hpp>
3131
#include <ored/marketdata/loader.hpp>
3232
#include <ored/marketdata/yieldcurve.hpp>
33+
#include <ored/marketdata/todaysmarketcalibrationinfo.hpp>
3334
#include <ql/math/interpolations/backwardflatinterpolation.hpp>
3435
#include <ql/math/interpolations/linearinterpolation.hpp>
3536
#include <ql/math/interpolations/loginterpolation.hpp>
@@ -51,20 +52,23 @@ class CommodityCurve {
5152
const CurveConfigurations& curveConfigs,
5253
const FXTriangulation& fxSpots = FXTriangulation(),
5354
const std::map<std::string, boost::shared_ptr<YieldCurve>>& yieldCurves = {},
54-
const std::map<std::string, boost::shared_ptr<CommodityCurve>>& commodityCurves = {});
55+
const std::map<std::string, boost::shared_ptr<CommodityCurve>>& commodityCurves = {},
56+
bool const buildCalibrationInfo = false);
5557
//@}
5658

5759
//! \name Inspectors
5860
//@{
5961
const CommodityCurveSpec& spec() const { return spec_; }
6062
boost::shared_ptr<QuantExt::PriceTermStructure> commodityPriceCurve() const { return commodityPriceCurve_; }
6163
boost::shared_ptr<QuantExt::CommodityIndex> commodityIndex() const { return commodityIndex_; }
64+
boost::shared_ptr<CommodityCurveCalibrationInfo> calibrationInfo() const { return calibrationInfo_; }
6265
//@}
6366

6467
private:
6568
CommodityCurveSpec spec_;
6669
boost::shared_ptr<QuantExt::PriceTermStructure> commodityPriceCurve_;
6770
boost::shared_ptr<QuantExt::CommodityIndex> commodityIndex_;
71+
boost::shared_ptr<CommodityCurveCalibrationInfo> calibrationInfo_;
6872

6973
//! Store the commodity spot value with \c Null<Real>() indicating that none has been provided.
7074
QuantLib::Real commoditySpot_;

OREData/ored/marketdata/todaysmarket.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -716,10 +716,10 @@ void TodaysMarket::buildNode(const std::string& configuration, Node& node) const
716716
QL_REQUIRE(commodityCurveSpec, "Failed to convert spec, " << *spec << ", to CommodityCurveSpec");
717717
auto itr = requiredCommodityCurves_.find(commodityCurveSpec->name());
718718
if (itr == requiredCommodityCurves_.end()) {
719-
DLOG("Building CommodityCurve for asof " << asof_);
719+
DLOG("Building CommodityCurve " << commodityCurveSpec->name() << " for asof " << asof_);
720720
boost::shared_ptr<CommodityCurve> commodityCurve =
721721
boost::make_shared<CommodityCurve>(asof_, *commodityCurveSpec, *loader_, *curveConfigs_, *fx_,
722-
requiredYieldCurves_, requiredCommodityCurves_);
722+
requiredYieldCurves_, requiredCommodityCurves_, buildCalibrationInfo_);
723723
itr = requiredCommodityCurves_.insert(make_pair(commodityCurveSpec->name(), commodityCurve)).first;
724724
}
725725

OREData/ored/marketdata/todaysmarketcalibrationinfo.hpp

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,13 @@ struct YoYInflationCurveCalibrationInfo : public InflationCurveCalibrationInfo {
9191
std::vector<double> yoyRates;
9292
};
9393

94+
// commodity curves
95+
96+
struct CommodityCurveCalibrationInfo {
97+
virtual ~CommodityCurveCalibrationInfo() {}
98+
double commDummyInfo{0.0};
99+
};
100+
94101
// fx, eq vols
95102

96103
struct FxEqVolCalibrationInfo {
@@ -161,6 +168,8 @@ struct TodaysMarketCalibrationInfo {
161168
std::map<std::string, boost::shared_ptr<YieldCurveCalibrationInfo>> dividendCurveCalibrationInfo;
162169
// inflation curves
163170
std::map<std::string, boost::shared_ptr<InflationCurveCalibrationInfo>> inflationCurveCalibrationInfo;
171+
// commodity curves
172+
std::map<std::string, boost::shared_ptr<CommodityCurveCalibrationInfo>> commodityCurveCalibrationInfo;
164173
// fx vols
165174
std::map<std::string, boost::shared_ptr<FxEqVolCalibrationInfo>> fxVolCalibrationInfo;
166175
// eq vols

0 commit comments

Comments
 (0)