Skip to content

Commit 8cc0311

Browse files
pcaspersjenkins
authored andcommitted
Merge remote-tracking branch 'origin/master' into QPR-12487
1 parent 5574216 commit 8cc0311

17 files changed

Lines changed: 886 additions & 372 deletions
Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
<?xml version="1.0"?>
2+
<ORE>
3+
<Setup>
4+
<Parameter name="asofDate">2016-02-05</Parameter>
5+
<Parameter name="inputPath">Input</Parameter>
6+
<Parameter name="outputPath">Output</Parameter>
7+
<Parameter name="logFile">log.txt</Parameter>
8+
<Parameter name="logMask">255</Parameter>
9+
<Parameter name="marketDataFile">market.txt</Parameter>
10+
<Parameter name="fixingDataFile">../../Input/fixings_20160205.txt</Parameter>
11+
<Parameter name="implyTodaysFixings">N</Parameter>
12+
<Parameter name="curveConfigFile">../../Input/curveconfig.xml</Parameter>
13+
<Parameter name="conventionsFile">../../Input/conventions.xml</Parameter>
14+
<Parameter name="marketConfigFile">todaysmarket.xml</Parameter>
15+
<Parameter name="pricingEnginesFile">pricingengine.xml</Parameter>
16+
<Parameter name="portfolioFile">portfolio.xml</Parameter>
17+
<Parameter name="observationModel">None</Parameter>
18+
<Parameter name="scriptLibrary">scriptlibrary.xml</Parameter>
19+
<Parameter name="nThreads">1</Parameter>
20+
</Setup>
21+
<Markets>
22+
<Parameter name="lgmcalibration">collateral_inccy</Parameter>
23+
<Parameter name="fxcalibration">xois_eur</Parameter>
24+
<Parameter name="pricing">xois_eur</Parameter>
25+
<Parameter name="simulation">xois_eur</Parameter>
26+
<Parameter name="sensitivity">xois_eur</Parameter>
27+
</Markets>
28+
<Analytics>
29+
<Analytic type="npv">
30+
<Parameter name="active">Y</Parameter>
31+
<Parameter name="baseCurrency">EUR</Parameter>
32+
<Parameter name="outputFileName">npv.csv</Parameter>
33+
</Analytic>
34+
<Analytic type="cashflow">
35+
<Parameter name="active">Y</Parameter>
36+
<Parameter name="outputFileName">flows.csv</Parameter>
37+
</Analytic>
38+
<Analytic type="curves">
39+
<Parameter name="active">N</Parameter>
40+
<Parameter name="configuration">default</Parameter>
41+
<Parameter name="grid">240,1M</Parameter>
42+
<Parameter name="outputFileName">curves.csv</Parameter>
43+
</Analytic>
44+
<Analytic type="simulation">
45+
<Parameter name="active">Y</Parameter>
46+
<Parameter name="amc">Y</Parameter>
47+
<Parameter name="amcCg">Y</Parameter>
48+
<Parameter name="xvaCgBumpSensis">Y</Parameter>
49+
<Parameter name="xvaCgSensitivityConfigFile">xvasensiconfig.xml</Parameter>
50+
<Parameter name="xvaCgUseExternalComputeDevice">Y</Parameter>
51+
<Parameter name="xvaCgExternalDeviceCompatibilityMode">Y</Parameter>
52+
<Parameter name="xvaCgUseDoublePrecisionForExternalCalculation">N</Parameter>
53+
<Parameter name="xvaCgExternalComputeDevice">BasicCpu/Default/Default</Parameter>
54+
<!-- <Parameter name="xvaCgExternalComputeDevice">OpenCL/Apple/Apple M2 Max</Parameter> -->
55+
<Parameter name="amcTradeTypes">Swap</Parameter>
56+
<Parameter name="simulationConfigFile">simulation_gpu.xml</Parameter>
57+
<Parameter name="pricingEnginesFile">pricingengine.xml</Parameter>
58+
<Parameter name="amcPricingEnginesFile">pricingengine_amc.xml</Parameter>
59+
<Parameter name="baseCurrency">EUR</Parameter>
60+
<Parameter name="storeScenarios">N</Parameter>
61+
<Parameter name="cubeFile">cube.csv.gz</Parameter>
62+
<Parameter name="aggregationScenarioDataFileName">scenariodata.csv.gz</Parameter>
63+
<Parameter name="aggregationScenarioDataDump">scenariodata.csv</Parameter>
64+
</Analytic>
65+
</Analytics>
66+
</ORE>
Lines changed: 118 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,118 @@
1+
<?xml version="1.0"?>
2+
<Simulation>
3+
<Parameters>
4+
<Grid>528,2W</Grid>
5+
<Calendar>EUR,USD,GBP,CHF</Calendar>
6+
<Sequence>MersenneTwister</Sequence>
7+
<Scenario>Simple</Scenario>
8+
<Seed>42</Seed>
9+
<Samples>8192</Samples>
10+
<DayCounter>A365F</DayCounter>
11+
</Parameters>
12+
<CrossAssetModel>
13+
<Discretization>Euler</Discretization>
14+
<DomesticCcy>EUR</DomesticCcy>
15+
<Currencies>
16+
<Currency>EUR</Currency>
17+
</Currencies>
18+
<BootstrapTolerance>0.0001</BootstrapTolerance>
19+
<InterestRateModels>
20+
<LGM ccy="default">
21+
<CalibrationType>Bootstrap</CalibrationType>
22+
<Volatility>
23+
<Calibrate>Y</Calibrate>
24+
<VolatilityType>Hagan</VolatilityType>
25+
<ParamType>Piecewise</ParamType>
26+
<TimeGrid>1.0, 2.0, 3.0, 4.0, 5.0, 7.0, 10.0</TimeGrid>
27+
<InitialValue>0.01, 0.01, 0.01, 0.01, 0.01, 0.01, 0.01, 0.01</InitialValue>
28+
</Volatility>
29+
<Reversion>
30+
<Calibrate>N</Calibrate>
31+
<ReversionType>HullWhite</ReversionType>
32+
<ParamType>Constant</ParamType>
33+
<TimeGrid/>
34+
<InitialValue>0.0</InitialValue>
35+
</Reversion>
36+
<CalibrationSwaptions>
37+
<Expiries> 1Y, 2Y, 3Y, 4Y, 5Y, 6Y, 7Y, 8Y, 9Y, 10Y, 11Y, 12Y, 13Y, 14Y, 15Y, 16Y, 17Y, 18Y, 19Y</Expiries>
38+
<Terms> 19Y, 18Y, 17Y, 16Y, 15Y, 14Y, 13Y, 12Y, 11y, 10Y, 9Y, 8Y, 7Y, 6Y, 5Y, 4Y, 3Y, 2Y, 1Y</Terms>
39+
<Strikes/>
40+
</CalibrationSwaptions>
41+
<ParameterTransformation>
42+
<ShiftHorizon>20.0</ShiftHorizon>
43+
<Scaling>1.0</Scaling>
44+
</ParameterTransformation>
45+
</LGM>
46+
</InterestRateModels>
47+
<ForeignExchangeModels>
48+
<CrossCcyLGM foreignCcy="default">
49+
<DomesticCcy>EUR</DomesticCcy>
50+
<CalibrationType>Bootstrap</CalibrationType>
51+
<Sigma>
52+
<Calibrate>Y</Calibrate>
53+
<ParamType>Piecewise</ParamType>
54+
<TimeGrid>1.0, 2.0, 3.0, 4.0, 5.0, 7.0, 10.0</TimeGrid>
55+
<InitialValue>0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1</InitialValue>
56+
</Sigma>
57+
<CalibrationOptions>
58+
<Expiries>1Y, 2Y, 3Y, 4Y, 5Y, 10Y</Expiries>
59+
<Strikes/>
60+
</CalibrationOptions>
61+
</CrossCcyLGM>
62+
</ForeignExchangeModels>
63+
<InstantaneousCorrelations/>
64+
</CrossAssetModel>
65+
<Market>
66+
<BaseCurrency>EUR</BaseCurrency>
67+
<Currencies>
68+
<Currency>EUR</Currency>
69+
</Currencies>
70+
<YieldCurves>
71+
<Configuration>
72+
<Tenors>2W, 1M, 3M, 6M, 1Y, 2Y, 3Y, 5Y, 10Y, 15Y, 20Y, 30Y</Tenors>
73+
<Interpolation>LogLinear</Interpolation>
74+
<Extrapolation>Y</Extrapolation>
75+
</Configuration>
76+
</YieldCurves>
77+
<DefaultCurves>
78+
<Names>
79+
<Name>BANK</Name>
80+
</Names>
81+
<Tenors>2W, 1M, 3M, 6M, 1Y, 2Y, 3Y, 5Y, 10Y, 15Y, 20Y, 30Y</Tenors>
82+
<SimulateSurvivalProbabilities>true</SimulateSurvivalProbabilities>
83+
</DefaultCurves>
84+
<Indices>
85+
<Index>EUR-EURIBOR-6M</Index>
86+
<Index>EUR-EURIBOR-3M</Index>
87+
<Index>EUR-EONIA</Index>
88+
</Indices>
89+
<SwapIndices>
90+
<SwapIndex>
91+
<Name>EUR-CMS-1Y</Name>
92+
<DiscountingIndex>EUR-EONIA</DiscountingIndex>
93+
</SwapIndex>
94+
<SwapIndex>
95+
<Name>EUR-CMS-30Y</Name>
96+
<DiscountingIndex>EUR-EONIA</DiscountingIndex>
97+
</SwapIndex>
98+
</SwapIndices>
99+
<SwaptionVolatilities>
100+
<Simulate>true</Simulate>
101+
<ReactionToTimeDecay>ForwardVariance</ReactionToTimeDecay>
102+
<Currencies>
103+
<Currency>EUR</Currency>
104+
</Currencies>
105+
<Expiries>1Y, 2Y, 3Y, 4Y, 5Y, 7Y, 10Y, 12Y, 15Y, 20Y, 30Y</Expiries>
106+
<Terms>1Y, 2Y, 3Y, 4Y, 5Y, 7Y, 10Y, 12Y, 15Y, 20Y, 30Y</Terms>
107+
<SimulateATMOnly>true</SimulateATMOnly>
108+
<SmileDynamics key="">StickyStrike</SmileDynamics>
109+
</SwaptionVolatilities>
110+
<AggregationScenarioDataCurrencies>
111+
<Currency>EUR</Currency>
112+
</AggregationScenarioDataCurrencies>
113+
<AggregationScenarioDataIndices>
114+
<Index>EUR-EURIBOR-3M</Index>
115+
<Index>EUR-EONIA</Index>
116+
</AggregationScenarioDataIndices>
117+
</Market>
118+
</Simulation>

OREAnalytics/orea/app/analytics/xvaanalytic.cpp

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -655,16 +655,19 @@ void XvaAnalyticImpl::runAnalytic(const QuantLib::ext::shared_ptr<ore::data::InM
655655
if(inputs_->amcCg()) {
656656
LOG("XVA analytic is running with amc cg engine (experimental).");
657657
// note: market configs both set to simulation, see note in xvaenginecg, we'd need inccy config in sim market there...
658-
XvaEngineCG engine(inputs_->nThreads(), inputs_->asof(), loader, inputs_->curveConfigs().get(),
659-
analytic()->configurations().todaysMarketParams,
660-
analytic()->configurations().simMarketParams, inputs_->amcPricingEngine(),
661-
inputs_->crossAssetModelData(), inputs_->scenarioGeneratorData(), inputs_->portfolio(),
662-
inputs_->marketConfig("simulation"), inputs_->marketConfig("simulation"),
663-
inputs_->xvaCgSensiScenarioData(), inputs_->refDataManager(), *inputs_->iborFallbackConfig(),
664-
inputs_->xvaCgBumpSensis());
658+
XvaEngineCG engine(
659+
inputs_->nThreads(), inputs_->asof(), loader, inputs_->curveConfigs().get(),
660+
analytic()->configurations().todaysMarketParams, analytic()->configurations().simMarketParams,
661+
inputs_->amcPricingEngine(), inputs_->crossAssetModelData(), inputs_->scenarioGeneratorData(),
662+
inputs_->portfolio(), inputs_->marketConfig("simulation"), inputs_->marketConfig("simulation"),
663+
inputs_->xvaCgSensiScenarioData(), inputs_->refDataManager(), *inputs_->iborFallbackConfig(),
664+
inputs_->xvaCgBumpSensis(), inputs_->xvaCgUseExternalComputeDevice(),
665+
inputs_->xvaCgExternalDeviceCompatibilityMode(), inputs_->xvaCgUseDoublePrecisionForExternalCalculation(),
666+
inputs_->xvaCgExternalComputeDevice(), true, true);
665667

666668
analytic()->reports()["XVA"]["xvacg-exposure"] = engine.exposureReport();
667-
analytic()->reports()["XVA"]["xvacg-cva-sensi-scenario"] = engine.sensiReport();
669+
if(inputs_->xvaCgSensiScenarioData())
670+
analytic()->reports()["XVA"]["xvacg-cva-sensi-scenario"] = engine.sensiReport();
668671
return;
669672
}
670673

OREAnalytics/orea/app/inputparameters.hpp

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -193,6 +193,10 @@ class InputParameters {
193193
void setAmc(bool b) { amc_ = b; }
194194
void setAmcCg(bool b) { amcCg_ = b; }
195195
void setXvaCgBumpSensis(bool b) { xvaCgBumpSensis_ = b; }
196+
void setXvaCgUseExternalComputeDevice(bool b) { xvaCgUseExternalComputeDevice_ = b; }
197+
void setXvaCgExternalDeviceCompatibilityMode(bool b) { xvaCgExternalDeviceCompatibilityMode_ = b; }
198+
void setXvaCgUseDoublePrecisionForExternalCalculation(bool b) { xvaCgUseDoublePrecisionForExternalCalculation_ = b; }
199+
void setXvaCgExternalComputeDevice(string s) { xvaCgExternalComputeDevice_ = std::move(s); }
196200
void setXvaCgSensiScenarioData(const std::string& xml);
197201
void setXvaCgSensiScenarioDataFromFile(const std::string& fileName);
198202
void setAmcTradeTypes(const std::string& s); // parse to set<string>
@@ -561,6 +565,12 @@ class InputParameters {
561565
bool amc() const { return amc_; }
562566
bool amcCg() const { return amcCg_; }
563567
bool xvaCgBumpSensis() const { return xvaCgBumpSensis_; }
568+
bool xvaCgUseExternalComputeDevice() const { return xvaCgUseExternalComputeDevice_; }
569+
bool xvaCgExternalDeviceCompatibilityMode() const { return xvaCgExternalDeviceCompatibilityMode_; }
570+
bool xvaCgUseDoublePrecisionForExternalCalculation() const {
571+
return xvaCgUseDoublePrecisionForExternalCalculation_;
572+
}
573+
const std::string& xvaCgExternalComputeDevice() const { return xvaCgExternalComputeDevice_; }
564574
const QuantLib::ext::shared_ptr<ore::analytics::SensitivityScenarioData>& xvaCgSensiScenarioData() const { return xvaCgSensiScenarioData_; }
565575
const std::set<std::string>& amcTradeTypes() const { return amcTradeTypes_; }
566576
const std::string& exposureBaseCurrency() const { return exposureBaseCurrency_; }
@@ -900,6 +910,10 @@ class InputParameters {
900910
bool amc_ = false;
901911
bool amcCg_ = false;
902912
bool xvaCgBumpSensis_ = false;
913+
bool xvaCgUseExternalComputeDevice_ = false;
914+
bool xvaCgExternalDeviceCompatibilityMode_ = false;
915+
bool xvaCgUseDoublePrecisionForExternalCalculation_ = false;
916+
string xvaCgExternalComputeDevice_;
903917
QuantLib::ext::shared_ptr<ore::analytics::SensitivityScenarioData> xvaCgSensiScenarioData_;
904918
std::set<std::string> amcTradeTypes_;
905919
std::string exposureBaseCurrency_ = "";

OREAnalytics/orea/app/oreapp.cpp

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1527,7 +1527,25 @@ void OREAppInputParameters::loadParameters() {
15271527
setWriteScenarios(true);
15281528

15291529
tmp = params_->get("simulation", "xvaCgBumpSensis", false);
1530-
if (tmp != "")
1530+
if (!tmp.empty())
1531+
setXvaCgBumpSensis(parseBool(tmp));
1532+
1533+
tmp = params_->get("simulation", "xvaCgUseExternalComputeDevice", false);
1534+
if (!tmp.empty())
1535+
setXvaCgUseExternalComputeDevice(parseBool(tmp));
1536+
1537+
tmp = params_->get("simulation", "xvaCgExternalDeviceCompatibilityMode", false);
1538+
if (!tmp.empty())
1539+
setXvaCgExternalDeviceCompatibilityMode(parseBool(tmp));
1540+
1541+
tmp = params_->get("simulation", "xvaCgUseDoublePrecisionForExternalCalculation", false);
1542+
if (!tmp.empty())
1543+
setXvaCgUseDoublePrecisionForExternalCalculation(parseBool(tmp));
1544+
1545+
setXvaCgExternalComputeDevice(params_->get("simulation", "xvaCgExternalComputeDevice", false));
1546+
1547+
tmp = params_->get("simulation", "xvaCgBumpSensis", false);
1548+
if (!tmp.empty())
15311549
setXvaCgBumpSensis(parseBool(tmp));
15321550

15331551
}

0 commit comments

Comments
 (0)