Skip to content

Commit 2ee47f1

Browse files
Eric Mandolesijenkins
authored andcommitted
QPR-11243: write out the commodity curve in both pricer_app and restore
1 parent af2b680 commit 2ee47f1

3 files changed

Lines changed: 29 additions & 5 deletions

File tree

OREAnalytics/orea/app/reportwriter.cpp

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1256,7 +1256,16 @@ void addCommodityCurveCalibrationInfo(ore::data::Report& report, const std::stri
12561256
boost::shared_ptr<CommodityCurveCalibrationInfo> const& info) {
12571257
if(info == nullptr)
12581258
return ;
1259-
addRowMktCalReport(report, "commodityCurve", id, "commodityDummyInfo", "", "", "", info->commDummyInfo);
1259+
addRowMktCalReport(report, "commodityCurve", id, "calendar", "", "", "", info->calendar);
1260+
addRowMktCalReport(report, "commodityCurve", id, "dayCounter", "", "", "", info->dayCounter);
1261+
addRowMktCalReport(report, "commodityCurve", id, "currenct", "", "", "", info->currency);
1262+
addRowMktCalReport(report, "commodityCurve", id, "interpolationMethod", "", "", "", info->interpolationMethod);
1263+
1264+
for (Size i = 0; i < info->pillarDates.size(); ++i){
1265+
auto date = to_string(info->pillarDates.at(i));
1266+
addRowMktCalReport(report, "commodityCurve", id, "time", date, "", "", info->times.at(i));
1267+
addRowMktCalReport(report, "commodityCurve", id, "price", date, "", "", info->futurePrices.at(i));
1268+
}
12601269
}
12611270

12621271
void addFxEqVolCalibrationInfo(ore::data::Report& report, const std::string& type, const std::string& id,

OREData/ored/marketdata/commoditycurve.cpp

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -169,10 +169,19 @@ CommodityCurve::CommodityCurve(const Date& asof, const CommodityCurveSpec& spec,
169169

170170
Handle<PriceTermStructure> pts(commodityPriceCurve_);
171171
commodityIndex_ = parseCommodityIndex(spec_.curveConfigID(), false, pts);
172+
commodityPriceCurve_->pillarDates();
172173

173-
if (buildCalibrationInfo) {
174+
if (buildCalibrationInfo) { // the curve is built, save info for later usage
174175
auto calInfo = boost::make_shared<CommodityCurveCalibrationInfo>();
175-
calInfo->commDummyInfo = -1.0;
176+
calInfo->dayCounter = dayCounter_.name();
177+
calInfo->interpolationMethod = interpolationMethod_;
178+
calInfo->calendar = commodityPriceCurve_->calendar().name();
179+
calInfo->currency = commodityPriceCurve_->currency().code();
180+
for (auto d : commodityPriceCurve_->pillarDates()){
181+
calInfo->times.emplace_back(commodityPriceCurve_->timeFromReference(d));
182+
calInfo->pillarDates.emplace_back(d);
183+
calInfo->futurePrices.emplace_back(commodityPriceCurve_->price(d, true));
184+
}
176185
calibrationInfo_ = calInfo;
177186
}
178187
} catch (std::exception& e) {

OREData/ored/marketdata/todaysmarketcalibrationinfo.hpp

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -94,8 +94,14 @@ struct YoYInflationCurveCalibrationInfo : public InflationCurveCalibrationInfo {
9494
// commodity curves
9595

9696
struct CommodityCurveCalibrationInfo {
97-
virtual ~CommodityCurveCalibrationInfo() {}
98-
double commDummyInfo{0.0};
97+
virtual ~CommodityCurveCalibrationInfo() = default;
98+
std::string dayCounter;
99+
std::string calendar;
100+
std::string currency;
101+
std::string interpolationMethod;
102+
std::vector<QuantLib::Date> pillarDates;
103+
std::vector<QuantLib::Real> futurePrices;
104+
std::vector<QuantLib::Real> times;
99105
};
100106

101107
// fx, eq vols

0 commit comments

Comments
 (0)