Logo
Fully annotated reference manual - version 1.8.12
Loading...
Searching...
No Matches
marketcalibrationreport.cpp
Go to the documentation of this file.
1/*
2 Copyright (C) 2022 Quaternion Risk Management Ltd
3 All rights reserved.
4
5 This file is part of ORE, a free-software/open-source library
6 for transparent pricing and risk analysis - http://opensourcerisk.org
7
8 ORE is free software: you can redistribute it and/or modify it
9 under the terms of the Modified BSD License. You should have received a
10 copy of the license along with this program.
11 The license is also available online at <http://opensourcerisk.org>
12
13 This program is distributed on the basis that it will form a useful
14 contribution to risk analytics and model standardisation, but WITHOUT
15 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
16 FITNESS FOR A PARTICULAR PURPOSE. See the license for more details.
17*/
18
22
23using namespace ore::data;
24
25namespace {
26// Convert "Yield/EUR/EUR-EONIA" to "EUR-EONIA"
27std::string getCurveName(const std::string& spec) {
28 auto pos = spec.rfind("/");
29 if (pos != std::string::npos) {
30 return spec.substr(pos + 1);
31 } else {
32 return spec;
33 }
34}
35}
36
37namespace ore {
38namespace analytics {
39
40MarketCalibrationReportBase::MarketCalibrationReportBase(const std::string& calibrationFilter) {
41 calibrationFilters_ = CalibrationFilters(calibrationFilter);
42}
43
44void MarketCalibrationReportBase::populateReport(const QuantLib::ext::shared_ptr<ore::data::Market>& market,
45 const QuantLib::ext::shared_ptr<TodaysMarketParameters>& todaysMarketParams,
46 const std::string& label) {
47 initialise(label);
48 if (market == nullptr)
49 return;
50 auto t = QuantLib::ext::dynamic_pointer_cast<TodaysMarket>(market);
51 if (!t) {
52 DLOG("MarketCalibrationReportBase::populateReport() expected TodaysMarket");
53 return;
54 }
55
56 auto calibrationInfo = t->calibrationInfo();
58 // First cut at adding curves
59
60 // TODO simplify that and just loop over yield and dividend curve calibration info, the only change
61 // would be that we would not be able to set the discountCurve flag any more, not sure if that is very
62 // important? add to curves here Add discount curves first, so EUR-EONIA gets marked as a discount curve
63 // even if it is an IndexCurve too
64 if (todaysMarketParams->hasMarketObject(MarketObject::DiscountCurve)) {
65 for (auto it : todaysMarketParams->mapping(MarketObject::DiscountCurve, Market::defaultConfiguration)) {
66 auto yts = calibrationInfo->yieldCurveCalibrationInfo.find(it.second);
67 if (yts != calibrationInfo->yieldCurveCalibrationInfo.end())
68 addYieldCurve(calibrationInfo->asof, yts->second, getCurveName(it.second), true, label);
69 }
70 }
71 if (todaysMarketParams->hasMarketObject(MarketObject::YieldCurve)) {
72 for (auto it : todaysMarketParams->mapping(MarketObject::YieldCurve, Market::defaultConfiguration)) {
73 auto yts = calibrationInfo->yieldCurveCalibrationInfo.find(it.second);
74 if (yts != calibrationInfo->yieldCurveCalibrationInfo.end())
75 addYieldCurve(calibrationInfo->asof, yts->second, getCurveName(it.second), false, label);
76 }
77 }
78 if (todaysMarketParams->hasMarketObject(MarketObject::EquityCurve)) {
79 for (auto it : todaysMarketParams->mapping(MarketObject::EquityCurve, Market::defaultConfiguration)) {
80 auto yts = calibrationInfo->dividendCurveCalibrationInfo.find(it.second);
81 if (yts != calibrationInfo->dividendCurveCalibrationInfo.end())
82 addYieldCurve(calibrationInfo->asof, yts->second, getCurveName(it.second), false, label);
83 }
84 }
85 if (todaysMarketParams->hasMarketObject(MarketObject::IndexCurve)) {
86 for (auto it : todaysMarketParams->mapping(MarketObject::IndexCurve, Market::defaultConfiguration)) {
87 auto yts = calibrationInfo->yieldCurveCalibrationInfo.find(it.second);
88 if (yts != calibrationInfo->yieldCurveCalibrationInfo.end())
89 addYieldCurve(calibrationInfo->asof, yts->second, getCurveName(it.second), false, label);
90 }
91 }
92 }
93
95 // inflation curves
96 for (auto const& c : calibrationInfo->inflationCurveCalibrationInfo) {
97 addInflationCurve(calibrationInfo->asof, c.second, getCurveName(c.first), label);
98 }
99 }
100
102 // commodity curves
103 for (auto const& c : calibrationInfo->commodityCurveCalibrationInfo) {
104 addCommodityCurve(calibrationInfo->asof, c.second, getCurveName(c.first), label);
105 }
106 }
107
109 // fx vol surfaces
110 for (auto const& c : calibrationInfo->fxVolCalibrationInfo) {
111 addFxVol(calibrationInfo->asof, c.second, getCurveName(c.first), label);
112 }
113 }
114
116 // eq vol surfaces
117 for (auto const& c : calibrationInfo->eqVolCalibrationInfo) {
118 addEqVol(calibrationInfo->asof, c.second, getCurveName(c.first), label);
119 }
120 }
121
123 // commodity vols
124 for (auto const& c: calibrationInfo->commVolCalibrationInfo){
125 addCommVol(calibrationInfo->asof, c.second, getCurveName(c.first), label);
126 }
127 }
128
130 // ir vol surfaces
131 for (auto const& c : calibrationInfo->irVolCalibrationInfo) {
132 addIrVol(calibrationInfo->asof, c.second, c.first, label);
133 }
134 }
135}
136
137MarketCalibrationReport::MarketCalibrationReport(const std::string& calibrationFilter,
138 const QuantLib::ext::shared_ptr<ore::data::Report>& report)
139 : ore::analytics::MarketCalibrationReportBase(calibrationFilter), report_(report) {
140 report_->addColumn("MarketObjectType", string())
141 .addColumn("MarketObjectId", string())
142 .addColumn("ResultId", string())
143 .addColumn("ResultKey1", string())
144 .addColumn("ResultKey2", string())
145 .addColumn("ResultKey3", string())
146 .addColumn("ResultType", string())
147 .addColumn("ResultValue", string());
148}
149
150QuantLib::ext::shared_ptr<Report> MarketCalibrationReport::outputCalibrationReport() {
151 report_->end();
152 return report_;
153}
154
155void MarketCalibrationReport::addRowReport(const std::string& moType, const std::string& moId,
156 const std::string& resId, const std::string& key1, const std::string& key2,
157 const std::string& key3, const boost::any& value) {
158 auto p = parseBoostAny(value);
159 report_->next().add(moType).add(moId).add(resId).add(key1).add(key2).add(key3).add(p.first).add(p.second);
160}
161
162const bool MarketCalibrationReport::checkCalibrations(string label, string type, string id) const {
163 bool hasCalibration = false;
164 if (calibrations_.find(label) != calibrations_.end() && calibrations_.at(label).find(type) != calibrations_.at(label).end()) {
165 auto curves = calibrations_.at(label).at(type);
166 if (curves.find(id) != curves.end())
167 hasCalibration = true;
168 }
169 return hasCalibration;
170}
171
172void MarketCalibrationReport::addYieldCurve(const QuantLib::Date& refdate,
173 QuantLib::ext::shared_ptr<ore::data::YieldCurveCalibrationInfo> info,
174 const std::string& id, bool isDiscount, const std::string& label) {
175 if (info == nullptr)
176 return;
177
178 string yieldStr = "yieldCurve";
179
180 // check if we have already processed this curve
181 if (checkCalibrations(label, yieldStr, id)) {
182 DLOG("Skipping curve " << id << " for label " << label << " as it has already been added");
183 return;
184 }
185
186 // common results
187 addRowReport(yieldStr, id, "dayCounter", "", "", "", info->dayCounter);
188 addRowReport(yieldStr, id, "currency", "", "", "", info->currency);
189
190 for (Size i = 0; i < info->pillarDates.size(); ++i) {
191 std::string key1 = to_string(info->pillarDates[i]);
192 addRowReport(yieldStr, id, "time", key1, "", "", info->times.at(i));
193 addRowReport(yieldStr, id, "zeroRate", key1, "", "", info->zeroRates.at(i));
194 addRowReport(yieldStr, id, "discountFactor", key1, "", "", info->discountFactors.at(i));
195 }
196
197 // fitted bond curve results
198 auto y = QuantLib::ext::dynamic_pointer_cast<FittedBondCurveCalibrationInfo>(info);
199 if (y) {
200 addRowReport(yieldStr, id, "fittedBondCurve.fittingMethod", "", "", "", y->fittingMethod);
201 for (Size k = 0; k < y->solution.size(); ++k) {
202 addRowReport(yieldStr, id, "fittedBondCurve.solution", std::to_string(k), "", "",
203 y->solution[k]);
204 }
205 addRowReport(yieldStr, id, "fittedBondCurve.iterations", "", "", "", y->iterations);
206 addRowReport(yieldStr, id, "fittedBondCurve.costValue", "", "", "", y->costValue);
207 for (Size i = 0; i < y->securities.size(); ++i) {
208 addRowReport(yieldStr, id, "fittedBondCurve.bondMaturity", y->securities.at(i), "", "",
209 y->securityMaturityDates.at(i));
210 addRowReport(yieldStr, id, "fittedBondCurve.marketPrice", y->securities.at(i), "", "",
211 y->marketPrices.at(i));
212 addRowReport(yieldStr, id, "fittedBondCurve.modelPrice", y->securities.at(i), "", "",
213 y->modelPrices.at(i));
214 addRowReport(yieldStr, id, "fittedBondCurve.marketYield", y->securities.at(i), "", "",
215 y->marketYields.at(i));
216 addRowReport(yieldStr, id, "fittedBondCurve.modelYield", y->securities.at(i), "", "",
217 y->modelYields.at(i));
218 }
219 }
220 calibrations_[label][yieldStr].insert(id);
221}
222
223// Add inflation curve data to array
224void MarketCalibrationReport::addInflationCurve(const QuantLib::Date& refdate,
225 QuantLib::ext::shared_ptr<ore::data::InflationCurveCalibrationInfo> info,
226 const std::string& id, const std::string& label) {
227 if (info == nullptr)
228 return;
229
230 const string inflationStr = "inflationCuve";
231
232 // check if we have already processed this curve
233 if (checkCalibrations(label, inflationStr, id)) {
234 DLOG("Skipping curve " << id << " for label " << label << " as it has already been added");
235 return;
236 }
237
238 // common results
239 addRowReport(inflationStr, id, "dayCounter", "", "", "", info->dayCounter);
240 addRowReport(inflationStr, id, "calendar", "", "", "", info->calendar);
241 addRowReport(inflationStr, id, "baseDate", "", "", "", info->baseDate);
242
243 // zero inflation
244 auto z = QuantLib::ext::dynamic_pointer_cast<ZeroInflationCurveCalibrationInfo>(info);
245 if (z) {
246 addRowReport(inflationStr, id, "baseCpi", "", "", "", z->baseCpi);
247 for (Size i = 0; i < z->pillarDates.size(); ++i) {
248 std::string key1 = ore::data::to_string(z->pillarDates[i]);
249 addRowReport(inflationStr, id, "time", key1, "", "", z->times.at(i));
250 addRowReport(inflationStr, id, "zeroRate", key1, "", "", z->zeroRates.at(i));
251 addRowReport(inflationStr, id, "cpi", key1, "", "", z->forwardCpis.at(i));
252 }
253 }
254
255 // yoy inflation
256 auto y = QuantLib::ext::dynamic_pointer_cast<YoYInflationCurveCalibrationInfo>(info);
257 if (y) {
258 for (Size i = 0; i < y->pillarDates.size(); ++i) {
259 std::string key1 = ore::data::to_string(y->pillarDates[i]);
260 addRowReport(inflationStr, id, "time", key1, "", "", y->times.at(i));
261 addRowReport(inflationStr, id, "yoyRate", key1, "", "", y->yoyRates.at(i));
262 }
263 }
264 calibrations_[label][inflationStr].insert(id);
265}
266
267// Add commodity curve data to array
268void MarketCalibrationReport::addCommodityCurve(const QuantLib::Date& refdate,
269 QuantLib::ext::shared_ptr<ore::data::CommodityCurveCalibrationInfo> info,
270 const std::string& id, const std::string& label) {
271 if (info == nullptr)
272 return;
273
274 const string commodityStr = "commodityCuve";
275
276 // check if we have already processed this curve
277 if (checkCalibrations(label, commodityStr, id)) {
278 DLOG("Skipping curve " << id << " for label " << label << " as it has already been added");
279 return;
280 }
281
282 addRowReport(commodityStr, id, "calendar", "", "", "", info->calendar);
283 addRowReport(commodityStr, id, "currenct", "", "", "", info->currency);
284 addRowReport(commodityStr, id, "interpolationMethod", "", "", "", info->interpolationMethod);
285
286 for (Size i = 0; i < info->pillarDates.size(); ++i) {
287 auto date = to_string(info->pillarDates.at(i));
288 addRowReport(commodityStr, id, "time", date, "", "", info->times.at(i));
289 addRowReport(commodityStr, id, "price", date, "", "", info->futurePrices.at(i));
290 }
291 calibrations_[label][commodityStr].insert(id);
292}
293
295 QuantLib::ext::shared_ptr<ore::data::FxEqCommVolCalibrationInfo> info,
296 const string& id, const string& label) {
297 if (info == nullptr)
298 return;
299
300 // check if we have already processed this curve
301 if (checkCalibrations(label, type, id)) {
302 DLOG("Skipping curve " << id << " for label " << label << " as it has already been added");
303 return;
304 }
305
306 addRowReport(type, id, "dayCounter", "", "", "", info->dayCounter);
307 addRowReport(type, id, "calendar", "", "", "", info->calendar);
308 addRowReport(type, id, "atmType", "", "", "", info->atmType);
309 addRowReport(type, id, "deltaType", "", "", "", info->deltaType);
310 addRowReport(type, id, "longTermAtmType", "", "", "", info->longTermAtmType);
311 addRowReport(type, id, "longTermDeltaType", "", "", "", info->longTermDeltaType);
312 addRowReport(type, id, "switchTenor", "", "", "", info->switchTenor);
313 addRowReport(type, id, "riskReversalInFavorOf", "", "", "", info->riskReversalInFavorOf);
314 addRowReport(type, id, "butterflyStyle", "", "", "", info->butterflyStyle);
315 addRowReport(type, id, "isArbitrageFree", "", "", "", info->isArbitrageFree);
316 for (Size i = 0; i < info->messages.size(); ++i)
317 addRowReport(type, id, "message_" + std::to_string(i), "", "", "", info->messages[i]);
318
319 for (Size i = 0; i < info->times.size(); ++i) {
320 std::string tStr = std::to_string(info->times.at(i));
321 addRowReport(type, id, "expiry", tStr, "", "", info->expiryDates.at(i));
322 }
323
324 for (Size i = 0; i < info->times.size(); ++i) {
325 std::string tStr = std::to_string(info->times.at(i));
326 for (Size j = 0; j < info->deltas.size(); ++j) {
327 std::string dStr = info->deltas.at(j);
328 addRowReport(type, id, "forward", tStr, dStr, "", info->forwards.at(i));
329 addRowReport(type, id, "strike", tStr, dStr, "", info->deltaGridStrikes.at(i).at(j));
330 addRowReport(type, id, "vol", tStr, dStr, "", info->deltaGridImpliedVolatility.at(i).at(j));
331 addRowReport(type, id, "prob", tStr, dStr, "", info->deltaGridProb.at(i).at(j));
332 addRowReport(type, id, "call_premium", tStr, dStr, "", info->deltaCallPrices.at(i).at(j));
333 addRowReport(type, id, "put_premium", tStr, dStr, "", info->deltaPutPrices.at(i).at(j));
334 addRowReport(type, id, "callSpreadArb", tStr, dStr, "",
335 static_cast<bool>(info->deltaGridCallSpreadArbitrage.at(i).at(j)));
336 addRowReport(type, id, "butterflyArb", tStr, dStr, "",
337 static_cast<bool>(info->deltaGridButterflyArbitrage.at(i).at(j)));
338 }
339 }
340
341 for (Size i = 0; i < info->times.size(); ++i) {
342 std::string tStr = std::to_string(info->times.at(i));
343 for (Size j = 0; j < info->moneyness.size(); ++j) {
344 std::string mStr = std::to_string(info->moneyness.at(j));
345 addRowReport(type, id, "forward", tStr, mStr, "", info->forwards.at(i));
346 addRowReport(type, id, "strike", tStr, mStr, "", info->moneynessGridStrikes.at(i).at(j));
347 addRowReport(type, id, "vol", tStr, mStr, "",
348 info->moneynessGridImpliedVolatility.at(i).at(j));
349 addRowReport(type, id, "call_premium", tStr, mStr, "", info->moneynessCallPrices.at(i).at(j));
350 addRowReport( type, id, "put_premium", tStr, mStr, "", info->moneynessPutPrices.at(i).at(j));
351 addRowReport(type, id, "prob", tStr, mStr, "", info->moneynessGridProb.at(i).at(j));
352 addRowReport(type, id, "callSpreadArb", tStr, mStr, "",
353 static_cast<bool>(info->moneynessGridCallSpreadArbitrage.at(i).at(j)));
354 addRowReport(type, id, "butterflyArb", tStr, mStr, "",
355 static_cast<bool>(info->moneynessGridButterflyArbitrage.at(i).at(j)));
356 addRowReport(type, id, "calendarArb", tStr, mStr, "",
357 static_cast<bool>(info->moneynessGridCalendarArbitrage.at(i).at(j)));
358 }
359 }
360}
361
362// Add fx/eq/comm vol curve data to array
363void MarketCalibrationReport::addFxVol(const QuantLib::Date& refdate,
364 QuantLib::ext::shared_ptr<ore::data::FxEqCommVolCalibrationInfo> info,
365 const std::string& id, const std::string& label) {
366 addEqFxVol("fxVol", info, id, label);
367 calibrations_[label]["fxVol"].insert(id);
368}
369
370void MarketCalibrationReport::addEqVol(const QuantLib::Date& refdate,
371 QuantLib::ext::shared_ptr<ore::data::FxEqCommVolCalibrationInfo> info,
372 const std::string& id, const std::string& label) {
373 addEqFxVol("eqVol", info, id, label);
374 calibrations_[label]["eqVol"].insert(id);
375}
376
377void MarketCalibrationReport::addCommVol(const QuantLib::Date& refdate,
378 QuantLib::ext::shared_ptr<ore::data::FxEqCommVolCalibrationInfo> info,
379 const std::string& id, const std::string& label) {
380 addEqFxVol("commVol", info, id, label);
381 calibrations_[label]["commVol"].insert(id);
382}
383
384// Add ir vol curve data to array
385void MarketCalibrationReport::addIrVol(const QuantLib::Date& refdate,
386 QuantLib::ext::shared_ptr<ore::data::IrVolCalibrationInfo> info,
387 const std::string& id, const std::string& label) {
388 if (info == nullptr)
389 return;
390
391 string type = "irVol";
392
393 // check if we have already processed this curve
394 if (checkCalibrations(label, type, id)) {
395 DLOG("Skipping curve " << id << " for label " << label << " as it has already been added");
396 return;
397 }
398
399 addRowReport(type, id, "dayCounter", "", "", "", info->dayCounter);
400 addRowReport(type, id, "calendar", "", "", "", info->calendar);
401 addRowReport(type, id, "isArbitrageFree", "", "", "", info->isArbitrageFree);
402 addRowReport(type, id, "volatilityType", "", "", "", info->volatilityType);
403 for (Size i = 0; i < info->messages.size(); ++i)
404 addRowReport(type, id, "message_" + std::to_string(i), "", "", "", info->messages[i]);
405
406 for (Size i = 0; i < info->times.size(); ++i) {
407 std::string tStr = std::to_string(info->times.at(i));
408 addRowReport(type, id, "expiry", tStr, "", "", info->expiryDates.at(i));
409 }
410
411 for (Size i = 0; i < info->underlyingTenors.size(); ++i) {
412 addRowReport(type, id, "tenor", std::to_string(i), "", "",
413 ore::data::to_string(info->underlyingTenors.at(i)));
414 }
415
416 for (Size i = 0; i < info->times.size(); ++i) {
417 std::string tStr = std::to_string(info->times.at(i));
418 for (Size u = 0; u < info->underlyingTenors.size(); ++u) {
419 std::string uStr = ore::data::to_string(info->underlyingTenors[u]);
420 for (Size j = 0; j < info->strikes.size(); ++j) {
421 std::string kStr = std::to_string(info->strikes.at(j));
422 addRowReport(type, id, "forward", tStr, kStr, uStr, info->forwards.at(i).at(u));
423 addRowReport(type, id, "strike", tStr, kStr, uStr,
424 info->strikeGridStrikes.at(i).at(u).at(j));
425 addRowReport(type, id, "vol", tStr, kStr, uStr,
426 info->strikeGridImpliedVolatility.at(i).at(u).at(j));
427 addRowReport(type, id, "prob", tStr, kStr, uStr, info->strikeGridProb.at(i).at(u).at(j));
428 addRowReport(type, id, "callSpreadArb", tStr, kStr, uStr,
429 static_cast<bool>(info->strikeGridCallSpreadArbitrage.at(i).at(u).at(j)));
430 addRowReport(type, id, "butterflyArb", tStr, kStr, uStr,
431 static_cast<bool>(info->strikeGridButterflyArbitrage.at(i).at(u).at(j)));
432 }
433 }
434 }
435
436 for (Size i = 0; i < info->times.size(); ++i) {
437 std::string tStr = std::to_string(info->times.at(i));
438 for (Size u = 0; u < info->underlyingTenors.size(); ++u) {
439 std::string uStr = ore::data::to_string(info->underlyingTenors[u]);
440 for (Size j = 0; j < info->strikeSpreads.size(); ++j) {
441 std::string kStr = std::to_string(info->strikeSpreads.at(j));
442 addRowReport(type, id, "forward", tStr, kStr, uStr, info->forwards.at(i).at(u));
443 addRowReport(type, id, "strike", tStr, kStr, uStr,
444 info->strikeSpreadGridStrikes.at(i).at(u).at(j));
445 addRowReport(type, id, "vol", tStr, kStr, uStr,
446 info->strikeSpreadGridImpliedVolatility.at(i).at(u).at(j));
447 addRowReport(type, id, "prob", tStr, kStr, uStr,
448 info->strikeSpreadGridProb.at(i).at(u).at(j));
449 addRowReport(type, id, "callSpreadArb", tStr, kStr, uStr,
450 static_cast<bool>(info->strikeSpreadGridCallSpreadArbitrage.at(i).at(u).at(j)));
451 addRowReport(type, id, "butterflyArb", tStr, kStr, uStr,
452 static_cast<bool>(info->strikeSpreadGridButterflyArbitrage.at(i).at(u).at(j)));
453 }
454 }
455 }
456
457 calibrations_[label][type].insert(id);
458}
459} // namespace analytics
460} // namespace ore
virtual void addInflationCurve(const QuantLib::Date &refdate, QuantLib::ext::shared_ptr< ore::data::InflationCurveCalibrationInfo > yts, const std::string &name, const std::string &label)=0
virtual void addFxVol(const QuantLib::Date &refdate, QuantLib::ext::shared_ptr< ore::data::FxEqCommVolCalibrationInfo > vol, const std::string &name, const std::string &label)=0
virtual void populateReport(const QuantLib::ext::shared_ptr< ore::data::Market > &market, const QuantLib::ext::shared_ptr< ore::data::TodaysMarketParameters > &todaysMarketParams, const std::string &label=std::string())
virtual void addCommVol(const QuantLib::Date &refdate, QuantLib::ext::shared_ptr< ore::data::FxEqCommVolCalibrationInfo > vol, const std::string &name, const std::string &label)=0
virtual void addCommodityCurve(const QuantLib::Date &refdate, QuantLib::ext::shared_ptr< ore::data::CommodityCurveCalibrationInfo > yts, std::string const &name, std::string const &label)=0
virtual void addYieldCurve(const QuantLib::Date &refdate, QuantLib::ext::shared_ptr< ore::data::YieldCurveCalibrationInfo > yts, const std::string &name, bool isDiscount, const std::string &label)=0
virtual void addIrVol(const QuantLib::Date &refdate, QuantLib::ext::shared_ptr< ore::data::IrVolCalibrationInfo > vol, const std::string &name, const std::string &label)=0
MarketCalibrationReportBase(const std::string &calibrationFilter)
virtual void addEqVol(const QuantLib::Date &refdate, QuantLib::ext::shared_ptr< ore::data::FxEqCommVolCalibrationInfo > vol, const std::string &name, const std::string &label)=0
virtual void initialise(const std::string &label)
void addYieldCurve(const QuantLib::Date &refdate, QuantLib::ext::shared_ptr< ore::data::YieldCurveCalibrationInfo > yts, const std::string &name, bool isDiscount, const std::string &label) override
void addEqFxVol(const std::string &type, QuantLib::ext::shared_ptr< ore::data::FxEqCommVolCalibrationInfo > vol, const std::string &id, const std::string &label)
void addCommVol(const QuantLib::Date &refdate, QuantLib::ext::shared_ptr< ore::data::FxEqCommVolCalibrationInfo > vol, const std::string &name, const std::string &label) override
MarketCalibrationReport(const std::string &calibrationFilter, const QuantLib::ext::shared_ptr< ore::data::Report > &report)
void addCommodityCurve(const QuantLib::Date &refdate, QuantLib::ext::shared_ptr< ore::data::CommodityCurveCalibrationInfo > yts, const std::string &name, const std::string &label) override
const bool checkCalibrations(std::string label, std::string type, std::string id) const
std::map< std::string, std::map< std::string, std::set< std::string > > > calibrations_
QuantLib::ext::shared_ptr< ore::data::Report > outputCalibrationReport() override
void addInflationCurve(const QuantLib::Date &refdate, QuantLib::ext::shared_ptr< ore::data::InflationCurveCalibrationInfo > yts, const std::string &name, const std::string &label) override
void addEqVol(const QuantLib::Date &refdate, QuantLib::ext::shared_ptr< ore::data::FxEqCommVolCalibrationInfo > vol, const std::string &name, const std::string &label) override
void addIrVol(const QuantLib::Date &refdate, QuantLib::ext::shared_ptr< ore::data::IrVolCalibrationInfo > vol, const std::string &name, const std::string &label) override
void addFxVol(const QuantLib::Date &refdate, QuantLib::ext::shared_ptr< ore::data::FxEqCommVolCalibrationInfo > vol, const std::string &name, const std::string &label) override
QuantLib::ext::shared_ptr< ore::data::Report > report_
void addRowReport(const std::string &moType, const std::string &moId, const std::string &resId, const std::string &key1, const std::string &key2, const std::string &key3, const boost::any &value)
static const string defaultConfiguration
SafeStack< ValueType > value
pair< string, string > parseBoostAny(const boost::any &anyType, Size precision)
#define DLOG(text)
ORE Analytics Manager.
std::string to_string(const LocationInfo &l)