Logo
Fully annotated reference manual - version 1.8.12
Loading...
Searching...
No Matches
xvarunner.cpp
Go to the documentation of this file.
1/*
2 Copyright (C) 2020 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
25
26#include <algorithm>
27
28using namespace std;
29using namespace ore::data;
30
31namespace ore {
32namespace analytics {
33
34XvaRunner::XvaRunner(const QuantLib::ext::shared_ptr<InputParameters>& inputs,
35 Date asof, const string& baseCurrency, const QuantLib::ext::shared_ptr<Portfolio>& portfolio,
36 const QuantLib::ext::shared_ptr<NettingSetManager>& netting,
37 const QuantLib::ext::shared_ptr<CollateralBalances>& collateralBalances,
38 const QuantLib::ext::shared_ptr<EngineData>& engineData,
39 const QuantLib::ext::shared_ptr<CurveConfigurations>& curveConfigs,
40 const QuantLib::ext::shared_ptr<TodaysMarketParameters>& todaysMarketParams,
41 const QuantLib::ext::shared_ptr<ScenarioSimMarketParameters>& simMarketData,
42 const QuantLib::ext::shared_ptr<ScenarioGeneratorData>& scenarioGeneratorData,
43 const QuantLib::ext::shared_ptr<CrossAssetModelData>& crossAssetModelData,
44 const QuantLib::ext::shared_ptr<ReferenceDataManager>& referenceData,
45 const IborFallbackConfig& iborFallbackConfig, Real dimQuantile, Size dimHorizonCalendarDays,
46 map<string, bool> analytics, string calculationType, string dvaName, string fvaBorrowingCurve,
47 string fvaLendingCurve, bool fullInitialCollateralisation, bool storeFlows)
48 : inputs_(inputs), asof_(asof), baseCurrency_(baseCurrency), portfolio_(portfolio), netting_(netting),
49 collateralBalances_(collateralBalances), engineData_(engineData),
50 curveConfigs_(curveConfigs), todaysMarketParams_(todaysMarketParams), simMarketData_(simMarketData),
51 scenarioGeneratorData_(scenarioGeneratorData), crossAssetModelData_(crossAssetModelData),
52 referenceData_(referenceData), iborFallbackConfig_(iborFallbackConfig), dimQuantile_(dimQuantile),
53 dimHorizonCalendarDays_(dimHorizonCalendarDays), analytics_(analytics), inputCalculationType_(calculationType),
54 dvaName_(dvaName), fvaBorrowingCurve_(fvaBorrowingCurve), fvaLendingCurve_(fvaLendingCurve),
55 fullInitialCollateralisation_(fullInitialCollateralisation), storeFlows_(storeFlows) {
56
57 if (analytics_.size() == 0) {
58 WLOG("post processor analytics not set, using defaults");
59 analytics_["dim"] = true;
60 analytics_["mva"] = true;
61 analytics_["kva"] = false;
62 analytics_["cvaSensi"] = true;
63 }
64}
65
66QuantLib::ext::shared_ptr<ScenarioSimMarketParameters>
67XvaRunner::projectSsmData(const std::set<std::string>& currencyFilter) const {
68 QL_FAIL("XvaRunner::projectSsmData() is only available in ORE+");
69}
70
71QuantLib::ext::shared_ptr<ore::analytics::ScenarioGenerator>
72XvaRunner::getProjectedScenarioGenerator(const boost::optional<std::set<std::string>>& currencyFilter,
73 const QuantLib::ext::shared_ptr<Market>& market,
74 const QuantLib::ext::shared_ptr<ScenarioSimMarketParameters>& projectedSsmData,
75 const QuantLib::ext::shared_ptr<ScenarioFactory>& sf, const bool continueOnErr) const {
76 QL_REQUIRE(!currencyFilter,
77 "XvaRunner::getProjectedScenarioGenerator() with currency filter is only available in ORE+");
79 return sgb.build(model_, sf, projectedSsmData, asof_, market, Market::defaultConfiguration);
80}
81
82void XvaRunner::buildCamModel(const QuantLib::ext::shared_ptr<ore::data::Market>& market, bool continueOnErr) {
83
84 LOG("XvaRunner::buildCamModel() called");
85
86 Settings::instance().evaluationDate() = asof_;
87 CrossAssetModelBuilder modelBuilder(
90 Market::defaultConfiguration, false, continueOnErr, "", SalvagingAlgorithm::None, "xva cam building");
91 model_ = *modelBuilder.model();
92}
93
95
96 LOG("XvaRunner::bufferSimulationPaths() called");
97
98 auto stateProcess = model_->stateProcess();
99 if (auto tmp = QuantLib::ext::dynamic_pointer_cast<CrossAssetStateProcess>(stateProcess)) {
100 tmp->resetCache(scenarioGeneratorData_->getGrid()->timeGrid().size() - 1);
101 }
102 auto pathGen = MultiPathGeneratorFactory().build(scenarioGeneratorData_->sequenceType(), stateProcess,
103 scenarioGeneratorData_->getGrid()->timeGrid(),
105 scenarioGeneratorData_->directionIntegers());
106
107 if (!bufferedPaths_) {
108 bufferedPaths_ = QuantLib::ext::make_shared<std::vector<std::vector<Path>>>(
109 scenarioGeneratorData_->samples(), std::vector<Path>(stateProcess->size(), TimeGrid()));
110 }
111
112 for (Size p = 0; p < scenarioGeneratorData_->samples(); ++p) {
113 const MultiPath& path = pathGen->next().value;
114 for (Size d = 0; d < stateProcess->size(); ++d) {
115 (*bufferedPaths_)[p][d] = path[d];
116 }
117 }
118
119 LOG("XvaRunner::bufferSimulationPaths() finished");
120}
121
122void XvaRunner::buildSimMarket(const QuantLib::ext::shared_ptr<ore::data::Market>& market,
123 const boost::optional<std::set<std::string>>& currencyFilter, const bool continueOnErr) {
124 LOG("XvaRunner::buildSimMarket() called");
125
126 Settings::instance().evaluationDate() = asof_;
127
128 QuantLib::ext::shared_ptr<ScenarioSimMarketParameters> projectedSsmData;
129 if (currencyFilter) {
130 projectedSsmData = projectSsmData(*currencyFilter);
131 }
132 else {
133 projectedSsmData = simMarketData_;
134 }
135
136 QuantLib::ext::shared_ptr<ScenarioFactory> sf = QuantLib::ext::make_shared<SimpleScenarioFactory>(true);
137 QuantLib::ext::shared_ptr<ScenarioGenerator> sg =
138 getProjectedScenarioGenerator(currencyFilter, market, projectedSsmData, sf, continueOnErr);
139 simMarket_ = QuantLib::ext::make_shared<ScenarioSimMarket>(market, projectedSsmData, Market::defaultConfiguration,
140 *curveConfigs_, *todaysMarketParams_, true, false, true, false,
141 iborFallbackConfig_, false);
142 simMarket_->scenarioGenerator() = sg;
143
144 DLOG("build scenario data");
145
146 scenarioData_.linkTo(QuantLib::ext::make_shared<InMemoryAggregationScenarioData>(
147 scenarioGeneratorData_->getGrid()->valuationDates().size(), scenarioGeneratorData_->samples()));
148 simMarket_->aggregationScenarioData() = *scenarioData_;
149
150 auto ed = QuantLib::ext::make_shared<EngineData>(*engineData_);
151 ed->globalParameters()["RunType"] = "Exposure";
152 simFactory_ = QuantLib::ext::make_shared<EngineFactory>(ed, simMarket_, map<MarketContext, string>(), referenceData_,
154}
155
156void XvaRunner::buildCube(const boost::optional<std::set<std::string>>& tradeIds, const bool continueOnErr) {
157
158 LOG("XvaRunner::buildCube called");
159
160 Settings::instance().evaluationDate() = asof_;
161
162 QuantLib::ext::shared_ptr<Portfolio> portfolio = QuantLib::ext::make_shared<Portfolio>();
163 if (tradeIds) {
164 for (auto const& t : *tradeIds) {
165 QL_REQUIRE(portfolio_->has(t), "XvaRunner::buildCube(): portfolio does not contain trade with id '"
166 << t << "' specified in the filter");
167 portfolio->add(portfolio_->get(t));
168 }
169 } else {
170 portfolio = portfolio_;
171 }
172
173 DLOG("build portfolio");
174
175 // FIXME why do we need this? portfolio_->reset() is not sufficient to ensure XVA simulation run fast (and this is
176 // called before)
177 for (auto const& [tid, t] : portfolio_->trades()) {
178 try {
179 t->build(simFactory_);
180 } catch (...) {
181 // we don't care, this is just to reset the portfolio, the real build is below
182 }
183 }
184
185 portfolio->build(simFactory_);
186
187 DLOG("build calculators");
188
189 std::vector<QuantLib::ext::shared_ptr<ValuationCalculator>> calculators;
190 QuantLib::ext::shared_ptr<NPVCalculator> npvCalculator = QuantLib::ext::make_shared<NPVCalculator>(baseCurrency_);
191 cubeInterpreter_ = QuantLib::ext::make_shared<CubeInterpretation>(storeFlows_, scenarioGeneratorData_->withCloseOutLag(),
193 if (scenarioGeneratorData_->withCloseOutLag()) {
194 // depth 2: NPV and close-out NPV
195 cube_ = getNpvCube(asof_, portfolio->ids(), scenarioGeneratorData_->getGrid()->valuationDates(),
196 scenarioGeneratorData_->samples(), 2);
197 calculators.push_back(QuantLib::ext::make_shared<MPORCalculator>(npvCalculator, cubeInterpreter_->defaultDateNpvIndex(),
198 cubeInterpreter_->closeOutDateNpvIndex()));
199 calculationType_ = "NoLag";
201 ALOG("Forcing calculation type " << calculationType_ << " for simulations with close-out grid");
202 }
203 } else {
204 if (storeFlows_) {
205 // regular, depth 2: NPV and cash flow
206 cube_ = getNpvCube(asof_, portfolio->ids(), scenarioGeneratorData_->getGrid()->dates(),
207 scenarioGeneratorData_->samples(), 2);
208 calculators.push_back(QuantLib::ext::make_shared<CashflowCalculator>(
209 baseCurrency_, asof_, scenarioGeneratorData_->getGrid(), cubeInterpreter_->mporFlowsIndex()));
210 } else
211 // regular, depth 1
212 cube_ = getNpvCube(asof_, portfolio->ids(), scenarioGeneratorData_->getGrid()->dates(),
213 scenarioGeneratorData_->samples(), 1);
214 calculators.push_back(npvCalculator);
216 }
217
218 DLOG("get netting cube");
219
220 nettingCube_ = getNettingSetCube(calculators, portfolio);
221
222 DLOG("run valuation engine");
223
225 engine.buildCube(portfolio, cube_, calculators, scenarioGeneratorData_->withMporStickyDate(), nettingCube_);
226}
227
228void XvaRunner::generatePostProcessor(const QuantLib::ext::shared_ptr<Market>& market,
229 const QuantLib::ext::shared_ptr<NPVCube>& npvCube,
230 const QuantLib::ext::shared_ptr<NPVCube>& nettingCube,
231 const QuantLib::ext::shared_ptr<AggregationScenarioData>& scenarioData,
232 const bool continueOnErr,
233 const std::map<std::string, QuantLib::Real>& currentIM) {
234
235 LOG("XvaRunner::generatePostProcessor called");
236
237 QL_REQUIRE(analytics_.size() > 0, "analytics map not set");
238
239 QuantLib::ext::shared_ptr<DynamicInitialMarginCalculator> dimCalculator =
241
242 postProcess_ = QuantLib::ext::make_shared<PostProcess>(portfolio_, netting_, collateralBalances_,
243 market, "", npvCube, scenarioData, analytics_,
244 baseCurrency_, "None", 1.0, 0.95, calculationType_, dvaName_,
245 fvaBorrowingCurve_, fvaLendingCurve_, dimCalculator,
247}
248
249void XvaRunner::runXva(const QuantLib::ext::shared_ptr<Market>& market, bool continueOnErr,
250 const std::map<std::string, QuantLib::Real>& currentIM) {
251
252 LOG("XvaRunner::runXva called");
253
254 buildCamModel(market);
255 buildSimMarket(market, boost::none, true);
256 buildCube(boost::none, continueOnErr);
257 generatePostProcessor(market, npvCube(), nettingCube(), *aggregationScenarioData(), continueOnErr, currentIM);
258}
259
260QuantLib::ext::shared_ptr<DynamicInitialMarginCalculator> XvaRunner::getDimCalculator(
261 const QuantLib::ext::shared_ptr<NPVCube>& cube, const QuantLib::ext::shared_ptr<CubeInterpretation>& cubeInterpreter,
262 const QuantLib::ext::shared_ptr<AggregationScenarioData>& scenarioData,
263 const QuantLib::ext::shared_ptr<QuantExt::CrossAssetModel>& model, const QuantLib::ext::shared_ptr<NPVCube>& nettingCube,
264 const std::map<std::string, QuantLib::Real>& currentIM) {
265
266 QuantLib::ext::shared_ptr<DynamicInitialMarginCalculator> dimCalculator;
267 Size dimRegressionOrder = 0;
268 vector<string> dimRegressors; // FIXME: empty vector means regression vs netting set NPV
269 Size dimLocalRegressionEvaluations = 0; // skip local regression
270 Real dimLocalRegressionBandwidth = 0.25;
271
272 dimCalculator = QuantLib::ext::make_shared<RegressionDynamicInitialMarginCalculator>(
273 inputs_, portfolio_, cube, cubeInterpreter, scenarioData, dimQuantile_, dimHorizonCalendarDays_, dimRegressionOrder,
274 dimRegressors, dimLocalRegressionEvaluations, dimLocalRegressionBandwidth, currentIM);
275
276 return dimCalculator;
277}
278
279std::set<std::string> XvaRunner::getNettingSetIds(const QuantLib::ext::shared_ptr<Portfolio>& portfolio) const {
280 // collect netting set ids from portfolio
281 std::set<std::string> nettingSetIds;
282 for (auto const& [tradeId,trade] : portfolio == nullptr ? portfolio_->trades() : portfolio->trades())
283 nettingSetIds.insert(trade->envelope().nettingSetId());
284 return nettingSetIds;
285}
286
287QuantLib::ext::shared_ptr<NPVCube> XvaRunner::getNpvCube(const Date& asof, const std::set<std::string>& ids,
288 const std::vector<Date>& dates, const Size samples,
289 const Size depth) const {
290 if (depth == 1) {
291 return QuantLib::ext::make_shared<SinglePrecisionInMemoryCube>(asof, ids, dates, samples, 0.0f);
292 } else {
293 return QuantLib::ext::make_shared<SinglePrecisionInMemoryCubeN>(asof, ids, dates, samples, depth, 0.0f);
294 }
295}
296
297} // namespace analytics
298} // namespace ore
boost::shared_ptr< MultiPathGeneratorBase > build(const SequenceType s, const boost::shared_ptr< StochasticProcess > &process, const TimeGrid &timeGrid, const BigNatural seed, const SobolBrownianGenerator::Ordering ordering, const SobolRsg::DirectionIntegers directionIntegers) override
QuantLib::ext::shared_ptr< ScenarioGenerator > build(QuantLib::ext::shared_ptr< QuantExt::CrossAssetModel > model, QuantLib::ext::shared_ptr< ScenarioFactory > sf, QuantLib::ext::shared_ptr< ScenarioSimMarketParameters > marketConfig, Date asof, QuantLib::ext::shared_ptr< ore::data::Market > initMarket, const std::string &configuration=ore::data::Market::defaultConfiguration, const QuantLib::ext::shared_ptr< PathGeneratorFactory > &pf=QuantLib::ext::make_shared< MultiPathGeneratorFactory >())
Build function.
void buildCube(const QuantLib::ext::shared_ptr< data::Portfolio > &portfolio, QuantLib::ext::shared_ptr< analytics::NPVCube > outputCube, std::vector< QuantLib::ext::shared_ptr< ValuationCalculator > > calculators, bool mporStickyDate=true, QuantLib::ext::shared_ptr< analytics::NPVCube > outputCubeNettingSet=nullptr, QuantLib::ext::shared_ptr< analytics::NPVCube > outputCptyCube=nullptr, std::vector< QuantLib::ext::shared_ptr< CounterpartyCalculator > > cptyCalculators={}, bool dryRun=false)
Build NPV cube.
QuantLib::ext::shared_ptr< ore::data::CurveConfigurations > curveConfigs_
Definition: xvarunner.hpp:136
QuantLib::ext::shared_ptr< QuantExt::CrossAssetModel > model_
Definition: xvarunner.hpp:154
QuantLib::ext::shared_ptr< ore::data::TodaysMarketParameters > todaysMarketParams_
Definition: xvarunner.hpp:137
QuantLib::Size dimHorizonCalendarDays_
Definition: xvarunner.hpp:144
std::string calculationType_
Definition: xvarunner.hpp:160
QuantLib::ext::shared_ptr< CubeInterpretation > cubeInterpreter_
Definition: xvarunner.hpp:159
QuantLib::ext::shared_ptr< ScenarioSimMarket > simMarket_
Definition: xvarunner.hpp:155
XvaRunner(const QuantLib::ext::shared_ptr< InputParameters > &inputs, QuantLib::Date asof, const std::string &baseCurrency, const QuantLib::ext::shared_ptr< ore::data::Portfolio > &portfolio, const QuantLib::ext::shared_ptr< ore::data::NettingSetManager > &netting, const QuantLib::ext::shared_ptr< ore::data::CollateralBalances > &collateralBalances, const QuantLib::ext::shared_ptr< ore::data::EngineData > &engineData, const QuantLib::ext::shared_ptr< ore::data::CurveConfigurations > &curveConfigs, const QuantLib::ext::shared_ptr< ore::data::TodaysMarketParameters > &todaysMarketParams, const QuantLib::ext::shared_ptr< ScenarioSimMarketParameters > &simMarketData, const QuantLib::ext::shared_ptr< ScenarioGeneratorData > &scenarioGeneratorData, const QuantLib::ext::shared_ptr< ore::data::CrossAssetModelData > &crossAssetModelData, const QuantLib::ext::shared_ptr< ReferenceDataManager > &referenceData=nullptr, const IborFallbackConfig &iborFallbackConfig=IborFallbackConfig::defaultConfig(), QuantLib::Real dimQuantile=0.99, QuantLib::Size dimHorizonCalendarDays=14, map< string, bool > analytics={}, string calculationType="Symmetric", string dvaName="", string fvaBorrowingCurve="", string fvaLendingCurve="", bool fullInitialCollateralisation=true, bool storeFlows=false)
Definition: xvarunner.cpp:34
QuantLib::ext::shared_ptr< std::vector< std::vector< QuantLib::Path > > > bufferedPaths_
Definition: xvarunner.hpp:163
QuantLib::RelinkableHandle< AggregationScenarioData > scenarioData_
Definition: xvarunner.hpp:157
void runXva(const QuantLib::ext::shared_ptr< ore::data::Market > &market, bool continueOnErr=true, const std::map< std::string, QuantLib::Real > &currentIM=std::map< std::string, QuantLib::Real >())
Definition: xvarunner.cpp:249
virtual QuantLib::ext::shared_ptr< NPVCube > getNpvCube(const Date &asof, const std::set< std::string > &ids, const std::vector< Date > &dates, const Size samples, const Size depth) const
Definition: xvarunner.cpp:287
void buildCamModel(const QuantLib::ext::shared_ptr< ore::data::Market > &market, bool continueOnErr=true)
Definition: xvarunner.cpp:82
QuantLib::ext::shared_ptr< NPVCube > npvCube() const
Definition: xvarunner.hpp:83
map< string, bool > analytics_
Definition: xvarunner.hpp:145
QuantLib::ext::shared_ptr< ore::data::Portfolio > portfolio_
Definition: xvarunner.hpp:132
QuantLib::ext::shared_ptr< ScenarioGeneratorData > scenarioGeneratorData_
Definition: xvarunner.hpp:139
std::set< std::string > getNettingSetIds(const QuantLib::ext::shared_ptr< Portfolio > &portfolio=nullptr) const
Definition: xvarunner.cpp:279
void generatePostProcessor(const QuantLib::ext::shared_ptr< Market > &market, const QuantLib::ext::shared_ptr< NPVCube > &npvCube, const QuantLib::ext::shared_ptr< NPVCube > &nettingCube, const QuantLib::ext::shared_ptr< AggregationScenarioData > &scenarioData, const bool continueOnErr=true, const std::map< std::string, QuantLib::Real > &currentIM=std::map< std::string, QuantLib::Real >())
Definition: xvarunner.cpp:228
void buildCube(const boost::optional< std::set< std::string > > &tradeIds, bool continueOnErr=true)
Definition: xvarunner.cpp:156
QuantLib::Real dimQuantile_
Definition: xvarunner.hpp:143
QuantLib::Handle< AggregationScenarioData > aggregationScenarioData()
Definition: xvarunner.hpp:89
QuantLib::ext::shared_ptr< EngineFactory > simFactory_
Definition: xvarunner.hpp:156
virtual QuantLib::ext::shared_ptr< NPVCube > getNettingSetCube(std::vector< QuantLib::ext::shared_ptr< ValuationCalculator > > &calculators, const QuantLib::ext::shared_ptr< Portfolio > &portfolio)
Definition: xvarunner.hpp:104
virtual void buildSimMarket(const QuantLib::ext::shared_ptr< ore::data::Market > &market, const boost::optional< std::set< std::string > > &currencyFilter=boost::none, const bool continueOnErr=true)
Definition: xvarunner.cpp:122
QuantLib::ext::shared_ptr< ore::data::CrossAssetModelData > crossAssetModelData_
Definition: xvarunner.hpp:140
QuantLib::ext::shared_ptr< ScenarioSimMarketParameters > simMarketData_
Definition: xvarunner.hpp:138
IborFallbackConfig iborFallbackConfig_
Definition: xvarunner.hpp:142
QuantLib::ext::shared_ptr< ReferenceDataManager > referenceData_
Definition: xvarunner.hpp:141
QuantLib::ext::shared_ptr< NPVCube > nettingCube() const
Definition: xvarunner.hpp:86
virtual QuantLib::ext::shared_ptr< ore::analytics::ScenarioSimMarketParameters > projectSsmData(const std::set< std::string > &currencyFilter) const
Definition: xvarunner.cpp:67
QuantLib::ext::shared_ptr< PostProcess > postProcess_
Definition: xvarunner.hpp:161
virtual QuantLib::ext::shared_ptr< ore::analytics::ScenarioGenerator > getProjectedScenarioGenerator(const boost::optional< std::set< std::string > > &currencyFilter, const QuantLib::ext::shared_ptr< Market > &market, const QuantLib::ext::shared_ptr< ScenarioSimMarketParameters > &projectedSsmData, const QuantLib::ext::shared_ptr< ScenarioFactory > &scenarioFactory, const bool continueOnErr) const
Definition: xvarunner.cpp:72
QuantLib::ext::shared_ptr< InputParameters > inputs_
Definition: xvarunner.hpp:129
QuantLib::ext::shared_ptr< ore::data::NettingSetManager > netting_
Definition: xvarunner.hpp:133
QuantLib::ext::shared_ptr< ore::data::CollateralBalances > collateralBalances_
Definition: xvarunner.hpp:134
QuantLib::ext::shared_ptr< NPVCube > cube_
Definition: xvarunner.hpp:158
virtual QuantLib::ext::shared_ptr< DynamicInitialMarginCalculator > getDimCalculator(const QuantLib::ext::shared_ptr< NPVCube > &cube, const QuantLib::ext::shared_ptr< CubeInterpretation > &cubeInterpreter, const QuantLib::ext::shared_ptr< AggregationScenarioData > &scenarioData, const QuantLib::ext::shared_ptr< QuantExt::CrossAssetModel > &model=nullptr, const QuantLib::ext::shared_ptr< NPVCube > &nettingCube=nullptr, const std::map< std::string, QuantLib::Real > &currentIM=std::map< std::string, QuantLib::Real >())
Definition: xvarunner.cpp:260
QuantLib::ext::shared_ptr< NPVCube > nettingCube_
Definition: xvarunner.hpp:158
QuantLib::ext::shared_ptr< ore::data::EngineData > engineData_
Definition: xvarunner.hpp:135
Handle< QuantExt::CrossAssetModel > model() const
static const string defaultConfiguration
Dynamic Initial Margin calculator by regression.
#define LOG(text)
#define DLOG(text)
#define ALOG(text)
#define WLOG(text)
The cube valuation calculator interface.
Build a scenariogenerator.
factory classes for simple scenarios
vector< string > curveConfigs
Date asof(14, Jun, 2018)
A class to run the xva analysis.