Logo
Fully annotated reference manual - version 1.8.12
Loading...
Searching...
No Matches
sensitivityanalysisanalytic.cpp
Go to the documentation of this file.
1/*
2 Copyright (C) 2016 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
19#include "testmarket.hpp"
20#include "testportfolio.hpp"
21
22#include <boost/test/unit_test.hpp>
24#include <orea/cube/npvcube.hpp>
43#include <oret/toplevelfixture.hpp>
45
58
59#include <ql/math/randomnumbers/mt19937uniformrng.hpp>
60#include <ql/time/calendars/target.hpp>
61#include <ql/time/date.hpp>
62#include <ql/time/daycounters/actualactual.hpp>
63
64using namespace std;
65using namespace QuantLib;
66using namespace QuantExt;
67using namespace boost::unit_test_framework;
68using namespace ore;
69using namespace ore::data;
70using namespace ore::analytics;
71
76
77namespace {
78QuantLib::ext::shared_ptr<data::Conventions> conv() {
79 QuantLib::ext::shared_ptr<data::Conventions> conventions(new data::Conventions());
80
81 QuantLib::ext::shared_ptr<data::Convention> swapIndexConv(
82 new data::SwapIndexConvention("EUR-CMS-2Y", "EUR-6M-SWAP-CONVENTIONS"));
83 conventions->add(swapIndexConv);
84
85 // QuantLib::ext::shared_ptr<data::Convention> swapConv(
86 // new data::IRSwapConvention("EUR-6M-SWAP-CONVENTIONS", "TARGET", "Annual", "MF", "30/360", "EUR-EURIBOR-6M"));
87 conventions->add(QuantLib::ext::make_shared<data::IRSwapConvention>("EUR-6M-SWAP-CONVENTIONS", "TARGET", "A", "MF",
88 "30/360", "EUR-EURIBOR-6M"));
89 conventions->add(QuantLib::ext::make_shared<data::IRSwapConvention>("USD-3M-SWAP-CONVENTIONS", "TARGET", "Q", "MF",
90 "30/360", "USD-LIBOR-3M"));
91 conventions->add(QuantLib::ext::make_shared<data::IRSwapConvention>("USD-6M-SWAP-CONVENTIONS", "TARGET", "Q", "MF",
92 "30/360", "USD-LIBOR-6M"));
93 conventions->add(QuantLib::ext::make_shared<data::IRSwapConvention>("GBP-6M-SWAP-CONVENTIONS", "TARGET", "A", "MF",
94 "30/360", "GBP-LIBOR-6M"));
95 conventions->add(QuantLib::ext::make_shared<data::IRSwapConvention>("JPY-6M-SWAP-CONVENTIONS", "TARGET", "A", "MF",
96 "30/360", "JPY-LIBOR-6M"));
97 conventions->add(QuantLib::ext::make_shared<data::IRSwapConvention>("CHF-6M-SWAP-CONVENTIONS", "TARGET", "A", "MF",
98 "30/360", "CHF-LIBOR-6M"));
99
100 conventions->add(QuantLib::ext::make_shared<data::DepositConvention>("EUR-DEP-CONVENTIONS", "EUR-EURIBOR"));
101 conventions->add(QuantLib::ext::make_shared<data::DepositConvention>("USD-DEP-CONVENTIONS", "USD-LIBOR"));
102 conventions->add(QuantLib::ext::make_shared<data::DepositConvention>("GBP-DEP-CONVENTIONS", "GBP-LIBOR"));
103 conventions->add(QuantLib::ext::make_shared<data::DepositConvention>("JPY-DEP-CONVENTIONS", "JPY-LIBOR"));
104 conventions->add(QuantLib::ext::make_shared<data::DepositConvention>("CHF-DEP-CONVENTIONS", "CHF-LIBOR"));
105
106 conventions->add(QuantLib::ext::make_shared<FXConvention>("EUR-USD-FX", "0", "EUR", "USD", "10000", "EUR,USD"));
107 conventions->add(QuantLib::ext::make_shared<FXConvention>("EUR-GBP-FX", "0", "EUR", "GBP", "10000", "EUR,GBP"));
108 conventions->add(QuantLib::ext::make_shared<FXConvention>("EUR-CHF-FX", "0", "EUR", "CHF", "10000", "EUR,CHF"));
109 conventions->add(QuantLib::ext::make_shared<FXConvention>("EUR-JPY-FX", "0", "EUR", "JPY", "10000", "EUR,JPY"));
110
111 InstrumentConventions::instance().setConventions(conventions);
112
113 return conventions;
114}
115
116QuantLib::ext::shared_ptr<analytics::ScenarioSimMarketParameters> setupSimMarketData5() {
117 QuantLib::ext::shared_ptr<analytics::ScenarioSimMarketParameters> simMarketData(
119
120 simMarketData->baseCcy() = "EUR";
121 simMarketData->setDiscountCurveNames({"EUR", "GBP", "USD", "CHF", "JPY"});
122 simMarketData->setYieldCurveTenors("", {1 * Months, 6 * Months, 1 * Years, 2 * Years, 3 * Years, 4 * Years,
123 5 * Years, 7 * Years, 10 * Years, 15 * Years, 20 * Years, 30 * Years});
124 simMarketData->setIndices(
125 {"EUR-EURIBOR-6M", "USD-LIBOR-3M", "USD-LIBOR-6M", "GBP-LIBOR-6M", "CHF-LIBOR-6M", "JPY-LIBOR-6M"});
126 simMarketData->interpolation() = "LogLinear";
127
128 simMarketData->setSwapVolTerms("", {1 * Years, 2 * Years, 3 * Years, 5 * Years, 7 * Years, 10 * Years, 20 * Years});
129 simMarketData->setSwapVolExpiries(
130 "", {6 * Months, 1 * Years, 2 * Years, 3 * Years, 5 * Years, 7 * Years, 10 * Years, 20 * Years});
131 simMarketData->setSwapVolKeys({"EUR", "GBP", "USD", "CHF", "JPY"});
132 simMarketData->swapVolDecayMode() = "ForwardVariance";
133 simMarketData->setSimulateSwapVols(true); // false;
134 simMarketData->setFxVolExpiries("",
135 vector<Period>{6 * Months, 1 * Years, 2 * Years, 3 * Years, 5 * Years, 7 * Years, 10 * Years, 20 * Years});
136 simMarketData->setFxVolDecayMode(string("ConstantVariance"));
137 simMarketData->setSimulateFXVols(true); // false;
138 simMarketData->setFxVolCcyPairs({"EURUSD", "EURGBP", "EURCHF", "EURJPY", "GBPCHF"});
139 simMarketData->setFxVolIsSurface(false);
140 simMarketData->setFxVolMoneyness(vector<Real>{0});
141
142 simMarketData->setFxCcyPairs({"EURUSD", "EURGBP", "EURCHF", "EURJPY"});
143
144 simMarketData->setSimulateCapFloorVols(true);
145 simMarketData->capFloorVolDecayMode() = "ForwardVariance";
146 simMarketData->setCapFloorVolKeys({"EUR", "USD"});
147 simMarketData->setCapFloorVolExpiries(
148 "", {6 * Months, 1 * Years, 2 * Years, 3 * Years, 5 * Years, 7 * Years, 10 * Years, 15 * Years, 20 * Years});
149 simMarketData->setCapFloorVolStrikes("", {0.00, 0.01, 0.02, 0.03, 0.04, 0.05, 0.06});
150
151 return simMarketData;
152}
153
154QuantLib::ext::shared_ptr<SensitivityScenarioData> setupSensitivityScenarioData5() {
155 QuantLib::ext::shared_ptr<SensitivityScenarioData> sensiData = QuantLib::ext::make_shared<SensitivityScenarioData>();
156
158
159 // identical to sim market tenor structure, we can only check this case, because the analytic engine
160 // assumes either linear in zero or linear in log discount interpolation, while the sensitivity analysis
161 // assumes a linear in zero interpolation for rebucketing, but uses the linear in log discount interpolation
162 // of the sim market yield curves for the scenario calculation
163 cvsData.shiftTenors = {1 * Months, 6 * Months, 1 * Years, 2 * Years, 3 * Years, 4 * Years,
164 5 * Years, 7 * Years, 10 * Years, 15 * Years, 20 * Years, 30 * Years};
165 cvsData.shiftType = ShiftType::Absolute;
166 cvsData.shiftSize = 1E-5;
167
169 fxsData.shiftType = ShiftType::Absolute;
170 fxsData.shiftSize = 1E-5;
171
173 fxvsData.shiftType = ShiftType::Absolute;
174 fxvsData.shiftSize = 1E-5;
175 fxvsData.shiftExpiries = {5 * Years};
176
178 cfvsData.shiftType = ShiftType::Absolute;
179 cfvsData.shiftSize = 1E-5;
180 cfvsData.shiftExpiries = {1 * Years, 2 * Years, 3 * Years, 5 * Years, 10 * Years};
181 cfvsData.shiftStrikes = {0.01, 0.02, 0.03, 0.04, 0.05};
182
184 swvsData.shiftType = ShiftType::Absolute;
185 swvsData.shiftSize = 1E-5;
186 swvsData.shiftExpiries = {6 * Months, 1 * Years, 2 * Years, 3 * Years,
187 5 * Years, 7 * Years, 10 * Years, 20 * Years};
188 swvsData.shiftTerms = {1 * Years, 2 * Years, 3 * Years, 5 * Years, 7 * Years, 10 * Years, 20 * Years};
189
190 sensiData->discountCurveShiftData()["EUR"] = QuantLib::ext::make_shared<SensitivityScenarioData::CurveShiftData>(cvsData);
191 sensiData->discountCurveShiftData()["USD"] = QuantLib::ext::make_shared<SensitivityScenarioData::CurveShiftData>(cvsData);
192 sensiData->discountCurveShiftData()["GBP"] = QuantLib::ext::make_shared<SensitivityScenarioData::CurveShiftData>(cvsData);
193 sensiData->discountCurveShiftData()["JPY"] = QuantLib::ext::make_shared<SensitivityScenarioData::CurveShiftData>(cvsData);
194 sensiData->discountCurveShiftData()["CHF"] = QuantLib::ext::make_shared<SensitivityScenarioData::CurveShiftData>(cvsData);
195
196 sensiData->indexCurveShiftData()["EUR-EURIBOR-6M"] =
197 QuantLib::ext::make_shared<SensitivityScenarioData::CurveShiftData>(cvsData);
198 sensiData->indexCurveShiftData()["USD-LIBOR-3M"] =
199 QuantLib::ext::make_shared<SensitivityScenarioData::CurveShiftData>(cvsData);
200 sensiData->indexCurveShiftData()["GBP-LIBOR-6M"] =
201 QuantLib::ext::make_shared<SensitivityScenarioData::CurveShiftData>(cvsData);
202 sensiData->indexCurveShiftData()["JPY-LIBOR-6M"] =
203 QuantLib::ext::make_shared<SensitivityScenarioData::CurveShiftData>(cvsData);
204 sensiData->indexCurveShiftData()["CHF-LIBOR-6M"] =
205 QuantLib::ext::make_shared<SensitivityScenarioData::CurveShiftData>(cvsData);
206
207 sensiData->fxShiftData()["EURUSD"] = fxsData;
208 sensiData->fxShiftData()["EURGBP"] = fxsData;
209 sensiData->fxShiftData()["EURJPY"] = fxsData;
210 sensiData->fxShiftData()["EURCHF"] = fxsData;
211
212 sensiData->fxVolShiftData()["EURUSD"] = fxvsData;
213 sensiData->fxVolShiftData()["EURGBP"] = fxvsData;
214 sensiData->fxVolShiftData()["EURJPY"] = fxvsData;
215 sensiData->fxVolShiftData()["EURCHF"] = fxvsData;
216 sensiData->fxVolShiftData()["GBPCHF"] = fxvsData;
217
218 sensiData->swaptionVolShiftData()["EUR"] = swvsData;
219 sensiData->swaptionVolShiftData()["GBP"] = swvsData;
220 sensiData->swaptionVolShiftData()["USD"] = swvsData;
221 sensiData->swaptionVolShiftData()["JPY"] = swvsData;
222 sensiData->swaptionVolShiftData()["CHF"] = swvsData;
223
224 sensiData->capFloorVolShiftData()["EUR"] =
225 QuantLib::ext::make_shared<ore::analytics::SensitivityScenarioData::CapFloorVolShiftData>(cfvsData);
226 sensiData->capFloorVolShiftData()["EUR"]->indexName = "EUR-EURIBOR-6M";
227 sensiData->capFloorVolShiftData()["USD"] =
228 QuantLib::ext::make_shared<ore::analytics::SensitivityScenarioData::CapFloorVolShiftData>(cfvsData);
229 sensiData->capFloorVolShiftData()["USD"]->indexName = "USD-LIBOR-3M";
230
231 sensiData->crossGammaFilter() = {{"DiscountCurve/EUR", "DiscountCurve/EUR"},
232 {"DiscountCurve/USD", "DiscountCurve/USD"},
233 {"DiscountCurve/EUR", "IndexCurve/EUR"},
234 {"IndexCurve/EUR", "IndexCurve/EUR"},
235 {"DiscountCurve/EUR", "DiscountCurve/USD"}};
236
237 return sensiData;
238}
239
240bool check(const Real reference, const Real value) {
241 if (std::fabs(reference) >= 1E-2) {
242 return std::fabs((reference - value) / reference) < 5E-3;
243 } else {
244 return std::fabs(reference - value) < 1E-3;
245 }
246}
247
248} // anonymous namespace
249
250BOOST_FIXTURE_TEST_SUITE(OREAnalyticsTestSuite, ore::test::OreaTopLevelFixture)
251
252BOOST_AUTO_TEST_SUITE(SensitivityAnalysisAnalyticTest)
253
254BOOST_AUTO_TEST_CASE(testSensitivities) {
255
256 BOOST_TEST_MESSAGE("Checking sensitivity analysis results vs analytic sensi engine results...");
257
258 SavedSettings backup;
259
260 ObservationMode::Mode backupMode = ObservationMode::instance().mode();
261 ObservationMode::instance().setMode(ObservationMode::Mode::None);
262
263 Date today = Date(14, April, 2016); // Settings::instance().evaluationDate();
264 Settings::instance().evaluationDate() = today;
265
266 BOOST_TEST_MESSAGE("Today is " << today);
267
268 // Init market
269 QuantLib::ext::shared_ptr<Market> initMarket = QuantLib::ext::make_shared<TestMarket>(today);
270
271 // build scenario sim market parameters
272 QuantLib::ext::shared_ptr<analytics::ScenarioSimMarketParameters> simMarketData = setupSimMarketData5();
273
274 // sensitivity config
275 QuantLib::ext::shared_ptr<SensitivityScenarioData> sensiData = setupSensitivityScenarioData5();
276
277 // build scenario sim market
278 conv();
279
280 // build portfolio
281 QuantLib::ext::shared_ptr<EngineData> data = QuantLib::ext::make_shared<EngineData>();
282 data->model("Swap") = "DiscountedCashflows";
283 data->engine("Swap") = "DiscountingSwapEngine";
284 data->model("CrossCurrencySwap") = "DiscountedCashflows";
285 data->engine("CrossCurrencySwap") = "DiscountingCrossCurrencySwapEngine";
286 data->model("FxOption") = "GarmanKohlhagen";
287 data->engine("FxOption") = "AnalyticEuropeanEngine";
288
289 // QuantLib::ext::shared_ptr<Portfolio> portfolio = buildSwapPortfolio(portfolioSize, factory);
290 QuantLib::ext::shared_ptr<Portfolio> portfolio(new Portfolio());
291 portfolio->add(
292 buildSwap("1_Swap_EUR", "EUR", true, 10.0, 0, 10, 0.03, 0.00, "1Y", "30/360", "6M", "A360", "EUR-EURIBOR-6M"));
293 portfolio->add(buildFxOption("7_FxOption_EUR_USD", "Long", "Call", 3, "EUR", 10.0, "USD", 11.0));
294
295 // analytic results
296 map<string, Real> analyticalResultsDelta = {{"1_Swap_EUR DiscountCurve/EUR/0/1M", 0},
297 {"1_Swap_EUR DiscountCurve/EUR/1/6M", -0.0251638},
298 {"1_Swap_EUR DiscountCurve/EUR/10/20Y", 0},
299 {"1_Swap_EUR DiscountCurve/EUR/11/30Y", 0},
300 {"1_Swap_EUR DiscountCurve/EUR/2/1Y", 0.146855},
301 {"1_Swap_EUR DiscountCurve/EUR/3/2Y", 0.190109},
302 {"1_Swap_EUR DiscountCurve/EUR/4/3Y", 0.279228},
303 {"1_Swap_EUR DiscountCurve/EUR/5/4Y", 0.364784},
304 {"1_Swap_EUR DiscountCurve/EUR/6/5Y", 0.66847},
305 {"1_Swap_EUR DiscountCurve/EUR/7/7Y", 1.49473},
306 {"1_Swap_EUR DiscountCurve/EUR/8/10Y", 2.05151},
307 {"1_Swap_EUR DiscountCurve/EUR/9/15Y", 0},
308 {"1_Swap_EUR IndexCurve/EUR-EURIBOR-6M/0/1M", 0},
309 {"1_Swap_EUR IndexCurve/EUR-EURIBOR-6M/1/6M", -4.95025},
310 {"1_Swap_EUR IndexCurve/EUR-EURIBOR-6M/10/20Y", 0},
311 {"1_Swap_EUR IndexCurve/EUR-EURIBOR-6M/11/30Y", 0},
312 {"1_Swap_EUR IndexCurve/EUR-EURIBOR-6M/2/1Y", 0.146584},
313 {"1_Swap_EUR IndexCurve/EUR-EURIBOR-6M/3/2Y", 0.385931},
314 {"1_Swap_EUR IndexCurve/EUR-EURIBOR-6M/4/3Y", 0.567839},
315 {"1_Swap_EUR IndexCurve/EUR-EURIBOR-6M/5/4Y", 0.74296},
316 {"1_Swap_EUR IndexCurve/EUR-EURIBOR-6M/6/5Y", 1.35326},
317 {"1_Swap_EUR IndexCurve/EUR-EURIBOR-6M/7/7Y", 3.03756},
318 {"1_Swap_EUR IndexCurve/EUR-EURIBOR-6M/8/10Y", 84.7885},
319 {"1_Swap_EUR IndexCurve/EUR-EURIBOR-6M/9/15Y", 0},
320 {"7_FxOption_EUR_USD DiscountCurve/EUR/0/1M", 0},
321 {"7_FxOption_EUR_USD DiscountCurve/EUR/1/6M", 0},
322 {"7_FxOption_EUR_USD DiscountCurve/EUR/10/20Y", 0},
323 {"7_FxOption_EUR_USD DiscountCurve/EUR/11/30Y", 0},
324 {"7_FxOption_EUR_USD DiscountCurve/EUR/2/1Y", 0},
325 {"7_FxOption_EUR_USD DiscountCurve/EUR/3/2Y", 0},
326 {"7_FxOption_EUR_USD DiscountCurve/EUR/4/3Y", -21.0493},
327 {"7_FxOption_EUR_USD DiscountCurve/EUR/5/4Y", -0.0770026},
328 {"7_FxOption_EUR_USD DiscountCurve/EUR/6/5Y", 0},
329 {"7_FxOption_EUR_USD DiscountCurve/EUR/7/7Y", 0},
330 {"7_FxOption_EUR_USD DiscountCurve/EUR/8/10Y", 0},
331 {"7_FxOption_EUR_USD DiscountCurve/EUR/9/15Y", 0},
332 {"7_FxOption_EUR_USD DiscountCurve/USD/0/1M", 0},
333 {"7_FxOption_EUR_USD DiscountCurve/USD/1/6M", 0},
334 {"7_FxOption_EUR_USD DiscountCurve/USD/10/20Y", 0},
335 {"7_FxOption_EUR_USD DiscountCurve/USD/11/30Y", 0},
336 {"7_FxOption_EUR_USD DiscountCurve/USD/2/1Y", 0},
337 {"7_FxOption_EUR_USD DiscountCurve/USD/3/2Y", 0},
338 {"7_FxOption_EUR_USD DiscountCurve/USD/4/3Y", 16.9542},
339 {"7_FxOption_EUR_USD DiscountCurve/USD/5/4Y", 0.0620218},
340 {"7_FxOption_EUR_USD DiscountCurve/USD/6/5Y", 0},
341 {"7_FxOption_EUR_USD DiscountCurve/USD/7/7Y", 0},
342 {"7_FxOption_EUR_USD DiscountCurve/USD/8/10Y", 0},
343 {"7_FxOption_EUR_USD DiscountCurve/USD/9/15Y", 0},
344 {"7_FxOption_EUR_USD FXSpot/EURUSD/0/spot", 4.72549},
345 {"7_FxOption_EUR_USD FXVolatility/EURUSD/0/5Y/ATM", 5.21067}};
346
347 map<string, Real> analyticalResultsGamma = {{"1_Swap_EUR DiscountCurve/EUR/0/1M", 0},
348 {"1_Swap_EUR DiscountCurve/EUR/1/6M", 0.0125819},
349 {"1_Swap_EUR DiscountCurve/EUR/10/20Y", 0},
350 {"1_Swap_EUR DiscountCurve/EUR/11/30Y", 0},
351 {"1_Swap_EUR DiscountCurve/EUR/2/1Y", -0.16852},
352 {"1_Swap_EUR DiscountCurve/EUR/3/2Y", -0.558829},
353 {"1_Swap_EUR DiscountCurve/EUR/4/3Y", -1.24741},
354 {"1_Swap_EUR DiscountCurve/EUR/5/4Y", -2.19217},
355 {"1_Swap_EUR DiscountCurve/EUR/6/5Y", -3.64545},
356 {"1_Swap_EUR DiscountCurve/EUR/7/7Y", -8.45766},
357 {"1_Swap_EUR DiscountCurve/EUR/8/10Y", -17.5009},
358 {"1_Swap_EUR DiscountCurve/EUR/9/15Y", 0},
359 {"1_Swap_EUR IndexCurve/EUR-EURIBOR-6M/0/1M", 0},
360 {"1_Swap_EUR IndexCurve/EUR-EURIBOR-6M/1/6M", 2.47512},
361 {"1_Swap_EUR IndexCurve/EUR-EURIBOR-6M/10/20Y", 0},
362 {"1_Swap_EUR IndexCurve/EUR-EURIBOR-6M/11/30Y", 0},
363 {"1_Swap_EUR IndexCurve/EUR-EURIBOR-6M/2/1Y", 14.3979},
364 {"1_Swap_EUR IndexCurve/EUR-EURIBOR-6M/3/2Y", 37.7122},
365 {"1_Swap_EUR IndexCurve/EUR-EURIBOR-6M/4/3Y", 84.1478},
366 {"1_Swap_EUR IndexCurve/EUR-EURIBOR-6M/5/4Y", 148.04},
367 {"1_Swap_EUR IndexCurve/EUR-EURIBOR-6M/6/5Y", 170.402},
368 {"1_Swap_EUR IndexCurve/EUR-EURIBOR-6M/7/7Y", 178.37},
369 {"1_Swap_EUR IndexCurve/EUR-EURIBOR-6M/8/10Y", 141.3},
370 {"1_Swap_EUR IndexCurve/EUR-EURIBOR-6M/9/15Y", 0},
371 {"7_FxOption_EUR_USD DiscountCurve/EUR/0/1M", 0},
372 {"7_FxOption_EUR_USD DiscountCurve/EUR/1/6M", 0},
373 {"7_FxOption_EUR_USD DiscountCurve/EUR/10/20Y", 0},
374 {"7_FxOption_EUR_USD DiscountCurve/EUR/11/30Y", 0},
375 {"7_FxOption_EUR_USD DiscountCurve/EUR/2/1Y", 0},
376 {"7_FxOption_EUR_USD DiscountCurve/EUR/3/2Y", 0},
377 {"7_FxOption_EUR_USD DiscountCurve/EUR/4/3Y", 192.286},
378 {"7_FxOption_EUR_USD DiscountCurve/EUR/5/4Y", 0.00257327},
379 {"7_FxOption_EUR_USD DiscountCurve/EUR/6/5Y", 0},
380 {"7_FxOption_EUR_USD DiscountCurve/EUR/7/7Y", 0},
381 {"7_FxOption_EUR_USD DiscountCurve/EUR/8/10Y", 0},
382 {"7_FxOption_EUR_USD DiscountCurve/EUR/9/15Y", 0},
383 {"7_FxOption_EUR_USD DiscountCurve/USD/0/1M", 0},
384 {"7_FxOption_EUR_USD DiscountCurve/USD/1/6M", 0},
385 {"7_FxOption_EUR_USD DiscountCurve/USD/10/20Y", 0},
386 {"7_FxOption_EUR_USD DiscountCurve/USD/11/30Y", 0},
387 {"7_FxOption_EUR_USD DiscountCurve/USD/2/1Y", 0},
388 {"7_FxOption_EUR_USD DiscountCurve/USD/3/2Y", 0},
389 {"7_FxOption_EUR_USD DiscountCurve/USD/4/3Y", 78.6621},
390 {"7_FxOption_EUR_USD DiscountCurve/USD/5/4Y", 0.00105269},
391 {"7_FxOption_EUR_USD DiscountCurve/USD/6/5Y", 0},
392 {"7_FxOption_EUR_USD DiscountCurve/USD/7/7Y", 0},
393 {"7_FxOption_EUR_USD DiscountCurve/USD/8/10Y", 0},
394 {"7_FxOption_EUR_USD DiscountCurve/USD/9/15Y", 0},
395 {"7_FxOption_EUR_USD FXSpot/EURUSD/0/spot", 2.17301}};
396
397 map<string, Real> analyticalResultsCrossGamma = {
398 {"1_Swap_EUR DiscountCurve/EUR/0/1M DiscountCurve/EUR/1/6M", 0},
399 {"1_Swap_EUR DiscountCurve/EUR/0/1M DiscountCurve/EUR/10/20Y", 0},
400 {"1_Swap_EUR DiscountCurve/EUR/0/1M DiscountCurve/EUR/11/30Y", 0},
401 {"1_Swap_EUR DiscountCurve/EUR/0/1M DiscountCurve/EUR/2/1Y", 0},
402 {"1_Swap_EUR DiscountCurve/EUR/0/1M DiscountCurve/EUR/3/2Y", 0},
403 {"1_Swap_EUR DiscountCurve/EUR/0/1M DiscountCurve/EUR/4/3Y", 0},
404 {"1_Swap_EUR DiscountCurve/EUR/0/1M DiscountCurve/EUR/5/4Y", 0},
405 {"1_Swap_EUR DiscountCurve/EUR/0/1M DiscountCurve/EUR/6/5Y", 0},
406 {"1_Swap_EUR DiscountCurve/EUR/0/1M DiscountCurve/EUR/7/7Y", 0},
407 {"1_Swap_EUR DiscountCurve/EUR/0/1M DiscountCurve/EUR/8/10Y", 0},
408 {"1_Swap_EUR DiscountCurve/EUR/0/1M DiscountCurve/EUR/9/15Y", 0},
409 {"1_Swap_EUR DiscountCurve/EUR/0/1M IndexCurve/EUR-EURIBOR-6M/0/1M", 0},
410 {"1_Swap_EUR DiscountCurve/EUR/0/1M IndexCurve/EUR-EURIBOR-6M/1/6M", 0},
411 {"1_Swap_EUR DiscountCurve/EUR/0/1M IndexCurve/EUR-EURIBOR-6M/10/20Y", 0},
412 {"1_Swap_EUR DiscountCurve/EUR/0/1M IndexCurve/EUR-EURIBOR-6M/11/30Y", 0},
413 {"1_Swap_EUR DiscountCurve/EUR/0/1M IndexCurve/EUR-EURIBOR-6M/2/1Y", 0},
414 {"1_Swap_EUR DiscountCurve/EUR/0/1M IndexCurve/EUR-EURIBOR-6M/3/2Y", 0},
415 {"1_Swap_EUR DiscountCurve/EUR/0/1M IndexCurve/EUR-EURIBOR-6M/4/3Y", 0},
416 {"1_Swap_EUR DiscountCurve/EUR/0/1M IndexCurve/EUR-EURIBOR-6M/5/4Y", 0},
417 {"1_Swap_EUR DiscountCurve/EUR/0/1M IndexCurve/EUR-EURIBOR-6M/6/5Y", 0},
418 {"1_Swap_EUR DiscountCurve/EUR/0/1M IndexCurve/EUR-EURIBOR-6M/7/7Y", 0},
419 {"1_Swap_EUR DiscountCurve/EUR/0/1M IndexCurve/EUR-EURIBOR-6M/8/10Y", 0},
420 {"1_Swap_EUR DiscountCurve/EUR/0/1M IndexCurve/EUR-EURIBOR-6M/9/15Y", 0},
421 {"1_Swap_EUR DiscountCurve/EUR/1/6M DiscountCurve/EUR/10/20Y", 0},
422 {"1_Swap_EUR DiscountCurve/EUR/1/6M DiscountCurve/EUR/11/30Y", 0},
423 {"1_Swap_EUR DiscountCurve/EUR/1/6M DiscountCurve/EUR/2/1Y", 0},
424 {"1_Swap_EUR DiscountCurve/EUR/1/6M DiscountCurve/EUR/3/2Y", 0},
425 {"1_Swap_EUR DiscountCurve/EUR/1/6M DiscountCurve/EUR/4/3Y", 0},
426 {"1_Swap_EUR DiscountCurve/EUR/1/6M DiscountCurve/EUR/5/4Y", 0},
427 {"1_Swap_EUR DiscountCurve/EUR/1/6M DiscountCurve/EUR/6/5Y", 0},
428 {"1_Swap_EUR DiscountCurve/EUR/1/6M DiscountCurve/EUR/7/7Y", 0},
429 {"1_Swap_EUR DiscountCurve/EUR/1/6M DiscountCurve/EUR/8/10Y", 0},
430 {"1_Swap_EUR DiscountCurve/EUR/1/6M DiscountCurve/EUR/9/15Y", 0},
431 {"1_Swap_EUR DiscountCurve/EUR/1/6M IndexCurve/EUR-EURIBOR-6M/0/1M", 0},
432 {"1_Swap_EUR DiscountCurve/EUR/1/6M IndexCurve/EUR-EURIBOR-6M/1/6M", 0},
433 {"1_Swap_EUR DiscountCurve/EUR/1/6M IndexCurve/EUR-EURIBOR-6M/10/20Y", 0},
434 {"1_Swap_EUR DiscountCurve/EUR/1/6M IndexCurve/EUR-EURIBOR-6M/11/30Y", 0},
435 {"1_Swap_EUR DiscountCurve/EUR/1/6M IndexCurve/EUR-EURIBOR-6M/2/1Y", 0},
436 {"1_Swap_EUR DiscountCurve/EUR/1/6M IndexCurve/EUR-EURIBOR-6M/3/2Y", 0},
437 {"1_Swap_EUR DiscountCurve/EUR/1/6M IndexCurve/EUR-EURIBOR-6M/4/3Y", 0},
438 {"1_Swap_EUR DiscountCurve/EUR/1/6M IndexCurve/EUR-EURIBOR-6M/5/4Y", 0},
439 {"1_Swap_EUR DiscountCurve/EUR/1/6M IndexCurve/EUR-EURIBOR-6M/6/5Y", 0},
440 {"1_Swap_EUR DiscountCurve/EUR/1/6M IndexCurve/EUR-EURIBOR-6M/7/7Y", 0},
441 {"1_Swap_EUR DiscountCurve/EUR/1/6M IndexCurve/EUR-EURIBOR-6M/8/10Y", 0},
442 {"1_Swap_EUR DiscountCurve/EUR/1/6M IndexCurve/EUR-EURIBOR-6M/9/15Y", 0},
443 {"1_Swap_EUR DiscountCurve/EUR/10/20Y DiscountCurve/EUR/11/30Y", 0},
444 {"1_Swap_EUR DiscountCurve/EUR/10/20Y IndexCurve/EUR-EURIBOR-6M/0/1M", 0},
445 {"1_Swap_EUR DiscountCurve/EUR/10/20Y IndexCurve/EUR-EURIBOR-6M/1/6M", 0},
446 {"1_Swap_EUR DiscountCurve/EUR/10/20Y IndexCurve/EUR-EURIBOR-6M/10/20Y", 0},
447 {"1_Swap_EUR DiscountCurve/EUR/10/20Y IndexCurve/EUR-EURIBOR-6M/11/30Y", 0},
448 {"1_Swap_EUR DiscountCurve/EUR/10/20Y IndexCurve/EUR-EURIBOR-6M/2/1Y", 0},
449 {"1_Swap_EUR DiscountCurve/EUR/10/20Y IndexCurve/EUR-EURIBOR-6M/3/2Y", 0},
450 {"1_Swap_EUR DiscountCurve/EUR/10/20Y IndexCurve/EUR-EURIBOR-6M/4/3Y", 0},
451 {"1_Swap_EUR DiscountCurve/EUR/10/20Y IndexCurve/EUR-EURIBOR-6M/5/4Y", 0},
452 {"1_Swap_EUR DiscountCurve/EUR/10/20Y IndexCurve/EUR-EURIBOR-6M/6/5Y", 0},
453 {"1_Swap_EUR DiscountCurve/EUR/10/20Y IndexCurve/EUR-EURIBOR-6M/7/7Y", 0},
454 {"1_Swap_EUR DiscountCurve/EUR/10/20Y IndexCurve/EUR-EURIBOR-6M/8/10Y", 0},
455 {"1_Swap_EUR DiscountCurve/EUR/10/20Y IndexCurve/EUR-EURIBOR-6M/9/15Y", 0},
456 {"1_Swap_EUR DiscountCurve/EUR/11/30Y IndexCurve/EUR-EURIBOR-6M/0/1M", 0},
457 {"1_Swap_EUR DiscountCurve/EUR/11/30Y IndexCurve/EUR-EURIBOR-6M/1/6M", 0},
458 {"1_Swap_EUR DiscountCurve/EUR/11/30Y IndexCurve/EUR-EURIBOR-6M/10/20Y", 0},
459 {"1_Swap_EUR DiscountCurve/EUR/11/30Y IndexCurve/EUR-EURIBOR-6M/11/30Y", 0},
460 {"1_Swap_EUR DiscountCurve/EUR/11/30Y IndexCurve/EUR-EURIBOR-6M/2/1Y", 0},
461 {"1_Swap_EUR DiscountCurve/EUR/11/30Y IndexCurve/EUR-EURIBOR-6M/3/2Y", 0},
462 {"1_Swap_EUR DiscountCurve/EUR/11/30Y IndexCurve/EUR-EURIBOR-6M/4/3Y", 0},
463 {"1_Swap_EUR DiscountCurve/EUR/11/30Y IndexCurve/EUR-EURIBOR-6M/5/4Y", 0},
464 {"1_Swap_EUR DiscountCurve/EUR/11/30Y IndexCurve/EUR-EURIBOR-6M/6/5Y", 0},
465 {"1_Swap_EUR DiscountCurve/EUR/11/30Y IndexCurve/EUR-EURIBOR-6M/7/7Y", 0},
466 {"1_Swap_EUR DiscountCurve/EUR/11/30Y IndexCurve/EUR-EURIBOR-6M/8/10Y", 0},
467 {"1_Swap_EUR DiscountCurve/EUR/11/30Y IndexCurve/EUR-EURIBOR-6M/9/15Y", 0},
468 {"1_Swap_EUR DiscountCurve/EUR/2/1Y DiscountCurve/EUR/10/20Y", 0},
469 {"1_Swap_EUR DiscountCurve/EUR/2/1Y DiscountCurve/EUR/11/30Y", 0},
470 {"1_Swap_EUR DiscountCurve/EUR/2/1Y DiscountCurve/EUR/3/2Y", 0.0439491},
471 {"1_Swap_EUR DiscountCurve/EUR/2/1Y DiscountCurve/EUR/4/3Y", 0},
472 {"1_Swap_EUR DiscountCurve/EUR/2/1Y DiscountCurve/EUR/5/4Y", 0},
473 {"1_Swap_EUR DiscountCurve/EUR/2/1Y DiscountCurve/EUR/6/5Y", 0},
474 {"1_Swap_EUR DiscountCurve/EUR/2/1Y DiscountCurve/EUR/7/7Y", 0},
475 {"1_Swap_EUR DiscountCurve/EUR/2/1Y DiscountCurve/EUR/8/10Y", 0},
476 {"1_Swap_EUR DiscountCurve/EUR/2/1Y DiscountCurve/EUR/9/15Y", 0},
477 {"1_Swap_EUR DiscountCurve/EUR/2/1Y IndexCurve/EUR-EURIBOR-6M/0/1M", 0},
478 {"1_Swap_EUR DiscountCurve/EUR/2/1Y IndexCurve/EUR-EURIBOR-6M/1/6M", 4.8864},
479 {"1_Swap_EUR DiscountCurve/EUR/2/1Y IndexCurve/EUR-EURIBOR-6M/10/20Y", 0},
480 {"1_Swap_EUR DiscountCurve/EUR/2/1Y IndexCurve/EUR-EURIBOR-6M/11/30Y", 0},
481 {"1_Swap_EUR DiscountCurve/EUR/2/1Y IndexCurve/EUR-EURIBOR-6M/2/1Y", -7.2595},
482 {"1_Swap_EUR DiscountCurve/EUR/2/1Y IndexCurve/EUR-EURIBOR-6M/3/2Y", -4.99316},
483 {"1_Swap_EUR DiscountCurve/EUR/2/1Y IndexCurve/EUR-EURIBOR-6M/4/3Y", 0},
484 {"1_Swap_EUR DiscountCurve/EUR/2/1Y IndexCurve/EUR-EURIBOR-6M/5/4Y", 0},
485 {"1_Swap_EUR DiscountCurve/EUR/2/1Y IndexCurve/EUR-EURIBOR-6M/6/5Y", 0},
486 {"1_Swap_EUR DiscountCurve/EUR/2/1Y IndexCurve/EUR-EURIBOR-6M/7/7Y", 0},
487 {"1_Swap_EUR DiscountCurve/EUR/2/1Y IndexCurve/EUR-EURIBOR-6M/8/10Y", 0},
488 {"1_Swap_EUR DiscountCurve/EUR/2/1Y IndexCurve/EUR-EURIBOR-6M/9/15Y", 0},
489 {"1_Swap_EUR DiscountCurve/EUR/3/2Y DiscountCurve/EUR/10/20Y", 0},
490 {"1_Swap_EUR DiscountCurve/EUR/3/2Y DiscountCurve/EUR/11/30Y", 0},
491 {"1_Swap_EUR DiscountCurve/EUR/3/2Y DiscountCurve/EUR/4/3Y", 0.136543},
492 {"1_Swap_EUR DiscountCurve/EUR/3/2Y DiscountCurve/EUR/5/4Y", 0},
493 {"1_Swap_EUR DiscountCurve/EUR/3/2Y DiscountCurve/EUR/6/5Y", 0},
494 {"1_Swap_EUR DiscountCurve/EUR/3/2Y DiscountCurve/EUR/7/7Y", 0},
495 {"1_Swap_EUR DiscountCurve/EUR/3/2Y DiscountCurve/EUR/8/10Y", 0},
496 {"1_Swap_EUR DiscountCurve/EUR/3/2Y DiscountCurve/EUR/9/15Y", 0},
497 {"1_Swap_EUR DiscountCurve/EUR/3/2Y IndexCurve/EUR-EURIBOR-6M/0/1M", 0},
498 {"1_Swap_EUR DiscountCurve/EUR/3/2Y IndexCurve/EUR-EURIBOR-6M/1/6M", 0.108392},
499 {"1_Swap_EUR DiscountCurve/EUR/3/2Y IndexCurve/EUR-EURIBOR-6M/10/20Y", 0},
500 {"1_Swap_EUR DiscountCurve/EUR/3/2Y IndexCurve/EUR-EURIBOR-6M/11/30Y", 0},
501 {"1_Swap_EUR DiscountCurve/EUR/3/2Y IndexCurve/EUR-EURIBOR-6M/2/1Y", 14.1881},
502 {"1_Swap_EUR DiscountCurve/EUR/3/2Y IndexCurve/EUR-EURIBOR-6M/3/2Y", -19.1426},
503 {"1_Swap_EUR DiscountCurve/EUR/3/2Y IndexCurve/EUR-EURIBOR-6M/4/3Y", -14.5467},
504 {"1_Swap_EUR DiscountCurve/EUR/3/2Y IndexCurve/EUR-EURIBOR-6M/5/4Y", 0},
505 {"1_Swap_EUR DiscountCurve/EUR/3/2Y IndexCurve/EUR-EURIBOR-6M/6/5Y", 0},
506 {"1_Swap_EUR DiscountCurve/EUR/3/2Y IndexCurve/EUR-EURIBOR-6M/7/7Y", 0},
507 {"1_Swap_EUR DiscountCurve/EUR/3/2Y IndexCurve/EUR-EURIBOR-6M/8/10Y", 0},
508 {"1_Swap_EUR DiscountCurve/EUR/3/2Y IndexCurve/EUR-EURIBOR-6M/9/15Y", 0},
509 {"1_Swap_EUR DiscountCurve/EUR/4/3Y DiscountCurve/EUR/10/20Y", 0},
510 {"1_Swap_EUR DiscountCurve/EUR/4/3Y DiscountCurve/EUR/11/30Y", 0},
511 {"1_Swap_EUR DiscountCurve/EUR/4/3Y DiscountCurve/EUR/5/4Y", 0.274041},
512 {"1_Swap_EUR DiscountCurve/EUR/4/3Y DiscountCurve/EUR/6/5Y", 0},
513 {"1_Swap_EUR DiscountCurve/EUR/4/3Y DiscountCurve/EUR/7/7Y", 0},
514 {"1_Swap_EUR DiscountCurve/EUR/4/3Y DiscountCurve/EUR/8/10Y", 0},
515 {"1_Swap_EUR DiscountCurve/EUR/4/3Y DiscountCurve/EUR/9/15Y", 0},
516 {"1_Swap_EUR DiscountCurve/EUR/4/3Y IndexCurve/EUR-EURIBOR-6M/0/1M", 0},
517 {"1_Swap_EUR DiscountCurve/EUR/4/3Y IndexCurve/EUR-EURIBOR-6M/1/6M", 0},
518 {"1_Swap_EUR DiscountCurve/EUR/4/3Y IndexCurve/EUR-EURIBOR-6M/10/20Y", 0},
519 {"1_Swap_EUR DiscountCurve/EUR/4/3Y IndexCurve/EUR-EURIBOR-6M/11/30Y", 0},
520 {"1_Swap_EUR DiscountCurve/EUR/4/3Y IndexCurve/EUR-EURIBOR-6M/2/1Y", 0.0784567},
521 {"1_Swap_EUR DiscountCurve/EUR/4/3Y IndexCurve/EUR-EURIBOR-6M/3/2Y", 42.4881},
522 {"1_Swap_EUR DiscountCurve/EUR/4/3Y IndexCurve/EUR-EURIBOR-6M/4/3Y", -42.7095},
523 {"1_Swap_EUR DiscountCurve/EUR/4/3Y IndexCurve/EUR-EURIBOR-6M/5/4Y", -28.3908},
524 {"1_Swap_EUR DiscountCurve/EUR/4/3Y IndexCurve/EUR-EURIBOR-6M/6/5Y", 0},
525 {"1_Swap_EUR DiscountCurve/EUR/4/3Y IndexCurve/EUR-EURIBOR-6M/7/7Y", 0},
526 {"1_Swap_EUR DiscountCurve/EUR/4/3Y IndexCurve/EUR-EURIBOR-6M/8/10Y", 0},
527 {"1_Swap_EUR DiscountCurve/EUR/4/3Y IndexCurve/EUR-EURIBOR-6M/9/15Y", 0},
528 {"1_Swap_EUR DiscountCurve/EUR/5/4Y DiscountCurve/EUR/10/20Y", 0},
529 {"1_Swap_EUR DiscountCurve/EUR/5/4Y DiscountCurve/EUR/11/30Y", 0},
530 {"1_Swap_EUR DiscountCurve/EUR/5/4Y DiscountCurve/EUR/6/5Y", 0.459076},
531 {"1_Swap_EUR DiscountCurve/EUR/5/4Y DiscountCurve/EUR/7/7Y", 0},
532 {"1_Swap_EUR DiscountCurve/EUR/5/4Y DiscountCurve/EUR/8/10Y", 0},
533 {"1_Swap_EUR DiscountCurve/EUR/5/4Y DiscountCurve/EUR/9/15Y", 0},
534 {"1_Swap_EUR DiscountCurve/EUR/5/4Y IndexCurve/EUR-EURIBOR-6M/0/1M", 0},
535 {"1_Swap_EUR DiscountCurve/EUR/5/4Y IndexCurve/EUR-EURIBOR-6M/1/6M", 0},
536 {"1_Swap_EUR DiscountCurve/EUR/5/4Y IndexCurve/EUR-EURIBOR-6M/10/20Y", 0},
537 {"1_Swap_EUR DiscountCurve/EUR/5/4Y IndexCurve/EUR-EURIBOR-6M/11/30Y", 0},
538 {"1_Swap_EUR DiscountCurve/EUR/5/4Y IndexCurve/EUR-EURIBOR-6M/2/1Y", 0},
539 {"1_Swap_EUR DiscountCurve/EUR/5/4Y IndexCurve/EUR-EURIBOR-6M/3/2Y", 0.10308},
540 {"1_Swap_EUR DiscountCurve/EUR/5/4Y IndexCurve/EUR-EURIBOR-6M/4/3Y", 83.8339},
541 {"1_Swap_EUR DiscountCurve/EUR/5/4Y IndexCurve/EUR-EURIBOR-6M/5/4Y", -75.1334},
542 {"1_Swap_EUR DiscountCurve/EUR/5/4Y IndexCurve/EUR-EURIBOR-6M/6/5Y", -46.1375},
543 {"1_Swap_EUR DiscountCurve/EUR/5/4Y IndexCurve/EUR-EURIBOR-6M/7/7Y", 0},
544 {"1_Swap_EUR DiscountCurve/EUR/5/4Y IndexCurve/EUR-EURIBOR-6M/8/10Y", 0},
545 {"1_Swap_EUR DiscountCurve/EUR/5/4Y IndexCurve/EUR-EURIBOR-6M/9/15Y", 0},
546 {"1_Swap_EUR DiscountCurve/EUR/6/5Y DiscountCurve/EUR/10/20Y", 0},
547 {"1_Swap_EUR DiscountCurve/EUR/6/5Y DiscountCurve/EUR/11/30Y", 0},
548 {"1_Swap_EUR DiscountCurve/EUR/6/5Y DiscountCurve/EUR/7/7Y", -0.376937},
549 {"1_Swap_EUR DiscountCurve/EUR/6/5Y DiscountCurve/EUR/8/10Y", 0},
550 {"1_Swap_EUR DiscountCurve/EUR/6/5Y DiscountCurve/EUR/9/15Y", 0},
551 {"1_Swap_EUR DiscountCurve/EUR/6/5Y IndexCurve/EUR-EURIBOR-6M/0/1M", 0},
552 {"1_Swap_EUR DiscountCurve/EUR/6/5Y IndexCurve/EUR-EURIBOR-6M/1/6M", 0},
553 {"1_Swap_EUR DiscountCurve/EUR/6/5Y IndexCurve/EUR-EURIBOR-6M/10/20Y", 0},
554 {"1_Swap_EUR DiscountCurve/EUR/6/5Y IndexCurve/EUR-EURIBOR-6M/11/30Y", 0},
555 {"1_Swap_EUR DiscountCurve/EUR/6/5Y IndexCurve/EUR-EURIBOR-6M/2/1Y", 0},
556 {"1_Swap_EUR DiscountCurve/EUR/6/5Y IndexCurve/EUR-EURIBOR-6M/3/2Y", 0},
557 {"1_Swap_EUR DiscountCurve/EUR/6/5Y IndexCurve/EUR-EURIBOR-6M/4/3Y", 0},
558 {"1_Swap_EUR DiscountCurve/EUR/6/5Y IndexCurve/EUR-EURIBOR-6M/5/4Y", 137.497},
559 {"1_Swap_EUR DiscountCurve/EUR/6/5Y IndexCurve/EUR-EURIBOR-6M/6/5Y", -87.5996},
560 {"1_Swap_EUR DiscountCurve/EUR/6/5Y IndexCurve/EUR-EURIBOR-6M/7/7Y", -117.899},
561 {"1_Swap_EUR DiscountCurve/EUR/6/5Y IndexCurve/EUR-EURIBOR-6M/8/10Y", 0},
562 {"1_Swap_EUR DiscountCurve/EUR/6/5Y IndexCurve/EUR-EURIBOR-6M/9/15Y", 0},
563 {"1_Swap_EUR DiscountCurve/EUR/7/7Y DiscountCurve/EUR/10/20Y", 0},
564 {"1_Swap_EUR DiscountCurve/EUR/7/7Y DiscountCurve/EUR/11/30Y", 0},
565 {"1_Swap_EUR DiscountCurve/EUR/7/7Y DiscountCurve/EUR/8/10Y", -2.10692},
566 {"1_Swap_EUR DiscountCurve/EUR/7/7Y DiscountCurve/EUR/9/15Y", 0},
567 {"1_Swap_EUR DiscountCurve/EUR/7/7Y IndexCurve/EUR-EURIBOR-6M/0/1M", 0},
568 {"1_Swap_EUR DiscountCurve/EUR/7/7Y IndexCurve/EUR-EURIBOR-6M/1/6M", 0},
569 {"1_Swap_EUR DiscountCurve/EUR/7/7Y IndexCurve/EUR-EURIBOR-6M/10/20Y", 0},
570 {"1_Swap_EUR DiscountCurve/EUR/7/7Y IndexCurve/EUR-EURIBOR-6M/11/30Y", 0},
571 {"1_Swap_EUR DiscountCurve/EUR/7/7Y IndexCurve/EUR-EURIBOR-6M/2/1Y", 0},
572 {"1_Swap_EUR DiscountCurve/EUR/7/7Y IndexCurve/EUR-EURIBOR-6M/3/2Y", 0},
573 {"1_Swap_EUR DiscountCurve/EUR/7/7Y IndexCurve/EUR-EURIBOR-6M/4/3Y", 0},
574 {"1_Swap_EUR DiscountCurve/EUR/7/7Y IndexCurve/EUR-EURIBOR-6M/5/4Y", 0},
575 {"1_Swap_EUR DiscountCurve/EUR/7/7Y IndexCurve/EUR-EURIBOR-6M/6/5Y", 193.901},
576 {"1_Swap_EUR DiscountCurve/EUR/7/7Y IndexCurve/EUR-EURIBOR-6M/7/7Y", -96.4279},
577 {"1_Swap_EUR DiscountCurve/EUR/7/7Y IndexCurve/EUR-EURIBOR-6M/8/10Y", -250.112},
578 {"1_Swap_EUR DiscountCurve/EUR/7/7Y IndexCurve/EUR-EURIBOR-6M/9/15Y", 0},
579 {"1_Swap_EUR DiscountCurve/EUR/8/10Y DiscountCurve/EUR/10/20Y", 0},
580 {"1_Swap_EUR DiscountCurve/EUR/8/10Y DiscountCurve/EUR/11/30Y", 0},
581 {"1_Swap_EUR DiscountCurve/EUR/8/10Y DiscountCurve/EUR/9/15Y", 0},
582 {"1_Swap_EUR DiscountCurve/EUR/8/10Y IndexCurve/EUR-EURIBOR-6M/0/1M", 0},
583 {"1_Swap_EUR DiscountCurve/EUR/8/10Y IndexCurve/EUR-EURIBOR-6M/1/6M", 0},
584 {"1_Swap_EUR DiscountCurve/EUR/8/10Y IndexCurve/EUR-EURIBOR-6M/10/20Y", 0},
585 {"1_Swap_EUR DiscountCurve/EUR/8/10Y IndexCurve/EUR-EURIBOR-6M/11/30Y", 0},
586 {"1_Swap_EUR DiscountCurve/EUR/8/10Y IndexCurve/EUR-EURIBOR-6M/2/1Y", 0},
587 {"1_Swap_EUR DiscountCurve/EUR/8/10Y IndexCurve/EUR-EURIBOR-6M/3/2Y", 0},
588 {"1_Swap_EUR DiscountCurve/EUR/8/10Y IndexCurve/EUR-EURIBOR-6M/4/3Y", 0},
589 {"1_Swap_EUR DiscountCurve/EUR/8/10Y IndexCurve/EUR-EURIBOR-6M/5/4Y", 0},
590 {"1_Swap_EUR DiscountCurve/EUR/8/10Y IndexCurve/EUR-EURIBOR-6M/6/5Y", 0},
591 {"1_Swap_EUR DiscountCurve/EUR/8/10Y IndexCurve/EUR-EURIBOR-6M/7/7Y", 343.241},
592 {"1_Swap_EUR DiscountCurve/EUR/8/10Y IndexCurve/EUR-EURIBOR-6M/8/10Y", -490.385},
593 {"1_Swap_EUR DiscountCurve/EUR/8/10Y IndexCurve/EUR-EURIBOR-6M/9/15Y", 0},
594 {"1_Swap_EUR DiscountCurve/EUR/9/15Y DiscountCurve/EUR/10/20Y", 0},
595 {"1_Swap_EUR DiscountCurve/EUR/9/15Y DiscountCurve/EUR/11/30Y", 0},
596 {"1_Swap_EUR DiscountCurve/EUR/9/15Y IndexCurve/EUR-EURIBOR-6M/0/1M", 0},
597 {"1_Swap_EUR DiscountCurve/EUR/9/15Y IndexCurve/EUR-EURIBOR-6M/1/6M", 0},
598 {"1_Swap_EUR DiscountCurve/EUR/9/15Y IndexCurve/EUR-EURIBOR-6M/10/20Y", 0},
599 {"1_Swap_EUR DiscountCurve/EUR/9/15Y IndexCurve/EUR-EURIBOR-6M/11/30Y", 0},
600 {"1_Swap_EUR DiscountCurve/EUR/9/15Y IndexCurve/EUR-EURIBOR-6M/2/1Y", 0},
601 {"1_Swap_EUR DiscountCurve/EUR/9/15Y IndexCurve/EUR-EURIBOR-6M/3/2Y", 0},
602 {"1_Swap_EUR DiscountCurve/EUR/9/15Y IndexCurve/EUR-EURIBOR-6M/4/3Y", 0},
603 {"1_Swap_EUR DiscountCurve/EUR/9/15Y IndexCurve/EUR-EURIBOR-6M/5/4Y", 0},
604 {"1_Swap_EUR DiscountCurve/EUR/9/15Y IndexCurve/EUR-EURIBOR-6M/6/5Y", 0},
605 {"1_Swap_EUR DiscountCurve/EUR/9/15Y IndexCurve/EUR-EURIBOR-6M/7/7Y", 0},
606 {"1_Swap_EUR DiscountCurve/EUR/9/15Y IndexCurve/EUR-EURIBOR-6M/8/10Y", 0},
607 {"1_Swap_EUR DiscountCurve/EUR/9/15Y IndexCurve/EUR-EURIBOR-6M/9/15Y", 0},
608 {"1_Swap_EUR IndexCurve/EUR-EURIBOR-6M/0/1M IndexCurve/EUR-EURIBOR-6M/1/6M", 0},
609 {"1_Swap_EUR IndexCurve/EUR-EURIBOR-6M/0/1M IndexCurve/EUR-EURIBOR-6M/10/20Y", 0},
610 {"1_Swap_EUR IndexCurve/EUR-EURIBOR-6M/0/1M IndexCurve/EUR-EURIBOR-6M/11/30Y", 0},
611 {"1_Swap_EUR IndexCurve/EUR-EURIBOR-6M/0/1M IndexCurve/EUR-EURIBOR-6M/2/1Y", 0},
612 {"1_Swap_EUR IndexCurve/EUR-EURIBOR-6M/0/1M IndexCurve/EUR-EURIBOR-6M/3/2Y", 0},
613 {"1_Swap_EUR IndexCurve/EUR-EURIBOR-6M/0/1M IndexCurve/EUR-EURIBOR-6M/4/3Y", 0},
614 {"1_Swap_EUR IndexCurve/EUR-EURIBOR-6M/0/1M IndexCurve/EUR-EURIBOR-6M/5/4Y", 0},
615 {"1_Swap_EUR IndexCurve/EUR-EURIBOR-6M/0/1M IndexCurve/EUR-EURIBOR-6M/6/5Y", 0},
616 {"1_Swap_EUR IndexCurve/EUR-EURIBOR-6M/0/1M IndexCurve/EUR-EURIBOR-6M/7/7Y", 0},
617 {"1_Swap_EUR IndexCurve/EUR-EURIBOR-6M/0/1M IndexCurve/EUR-EURIBOR-6M/8/10Y", 0},
618 {"1_Swap_EUR IndexCurve/EUR-EURIBOR-6M/0/1M IndexCurve/EUR-EURIBOR-6M/9/15Y", 0},
619 {"1_Swap_EUR IndexCurve/EUR-EURIBOR-6M/1/6M IndexCurve/EUR-EURIBOR-6M/10/20Y", 0},
620 {"1_Swap_EUR IndexCurve/EUR-EURIBOR-6M/1/6M IndexCurve/EUR-EURIBOR-6M/11/30Y", 0},
621 {"1_Swap_EUR IndexCurve/EUR-EURIBOR-6M/1/6M IndexCurve/EUR-EURIBOR-6M/2/1Y", -4.8864},
622 {"1_Swap_EUR IndexCurve/EUR-EURIBOR-6M/1/6M IndexCurve/EUR-EURIBOR-6M/3/2Y", -0.108392},
623 {"1_Swap_EUR IndexCurve/EUR-EURIBOR-6M/1/6M IndexCurve/EUR-EURIBOR-6M/4/3Y", 0},
624 {"1_Swap_EUR IndexCurve/EUR-EURIBOR-6M/1/6M IndexCurve/EUR-EURIBOR-6M/5/4Y", 0},
625 {"1_Swap_EUR IndexCurve/EUR-EURIBOR-6M/1/6M IndexCurve/EUR-EURIBOR-6M/6/5Y", 0},
626 {"1_Swap_EUR IndexCurve/EUR-EURIBOR-6M/1/6M IndexCurve/EUR-EURIBOR-6M/7/7Y", 0},
627 {"1_Swap_EUR IndexCurve/EUR-EURIBOR-6M/1/6M IndexCurve/EUR-EURIBOR-6M/8/10Y", 0},
628 {"1_Swap_EUR IndexCurve/EUR-EURIBOR-6M/1/6M IndexCurve/EUR-EURIBOR-6M/9/15Y", 0},
629 {"1_Swap_EUR IndexCurve/EUR-EURIBOR-6M/10/20Y IndexCurve/EUR-EURIBOR-6M/11/30Y", 0},
630 {"1_Swap_EUR IndexCurve/EUR-EURIBOR-6M/2/1Y IndexCurve/EUR-EURIBOR-6M/10/20Y", 0},
631 {"1_Swap_EUR IndexCurve/EUR-EURIBOR-6M/2/1Y IndexCurve/EUR-EURIBOR-6M/11/30Y", 0},
632 {"1_Swap_EUR IndexCurve/EUR-EURIBOR-6M/2/1Y IndexCurve/EUR-EURIBOR-6M/3/2Y", -9.24531},
633 {"1_Swap_EUR IndexCurve/EUR-EURIBOR-6M/2/1Y IndexCurve/EUR-EURIBOR-6M/4/3Y", -0.0784567},
634 {"1_Swap_EUR IndexCurve/EUR-EURIBOR-6M/2/1Y IndexCurve/EUR-EURIBOR-6M/5/4Y", 0},
635 {"1_Swap_EUR IndexCurve/EUR-EURIBOR-6M/2/1Y IndexCurve/EUR-EURIBOR-6M/6/5Y", 0},
636 {"1_Swap_EUR IndexCurve/EUR-EURIBOR-6M/2/1Y IndexCurve/EUR-EURIBOR-6M/7/7Y", 0},
637 {"1_Swap_EUR IndexCurve/EUR-EURIBOR-6M/2/1Y IndexCurve/EUR-EURIBOR-6M/8/10Y", 0},
638 {"1_Swap_EUR IndexCurve/EUR-EURIBOR-6M/2/1Y IndexCurve/EUR-EURIBOR-6M/9/15Y", 0},
639 {"1_Swap_EUR IndexCurve/EUR-EURIBOR-6M/3/2Y IndexCurve/EUR-EURIBOR-6M/10/20Y", 0},
640 {"1_Swap_EUR IndexCurve/EUR-EURIBOR-6M/3/2Y IndexCurve/EUR-EURIBOR-6M/11/30Y", 0},
641 {"1_Swap_EUR IndexCurve/EUR-EURIBOR-6M/3/2Y IndexCurve/EUR-EURIBOR-6M/4/3Y", -28.0873},
642 {"1_Swap_EUR IndexCurve/EUR-EURIBOR-6M/3/2Y IndexCurve/EUR-EURIBOR-6M/5/4Y", -0.10308},
643 {"1_Swap_EUR IndexCurve/EUR-EURIBOR-6M/3/2Y IndexCurve/EUR-EURIBOR-6M/6/5Y", 0},
644 {"1_Swap_EUR IndexCurve/EUR-EURIBOR-6M/3/2Y IndexCurve/EUR-EURIBOR-6M/7/7Y", 0},
645 {"1_Swap_EUR IndexCurve/EUR-EURIBOR-6M/3/2Y IndexCurve/EUR-EURIBOR-6M/8/10Y", 0},
646 {"1_Swap_EUR IndexCurve/EUR-EURIBOR-6M/3/2Y IndexCurve/EUR-EURIBOR-6M/9/15Y", 0},
647 {"1_Swap_EUR IndexCurve/EUR-EURIBOR-6M/4/3Y IndexCurve/EUR-EURIBOR-6M/10/20Y", 0},
648 {"1_Swap_EUR IndexCurve/EUR-EURIBOR-6M/4/3Y IndexCurve/EUR-EURIBOR-6M/11/30Y", 0},
649 {"1_Swap_EUR IndexCurve/EUR-EURIBOR-6M/4/3Y IndexCurve/EUR-EURIBOR-6M/5/4Y", -55.7263},
650 {"1_Swap_EUR IndexCurve/EUR-EURIBOR-6M/4/3Y IndexCurve/EUR-EURIBOR-6M/6/5Y", 0},
651 {"1_Swap_EUR IndexCurve/EUR-EURIBOR-6M/4/3Y IndexCurve/EUR-EURIBOR-6M/7/7Y", 0},
652 {"1_Swap_EUR IndexCurve/EUR-EURIBOR-6M/4/3Y IndexCurve/EUR-EURIBOR-6M/8/10Y", 0},
653 {"1_Swap_EUR IndexCurve/EUR-EURIBOR-6M/4/3Y IndexCurve/EUR-EURIBOR-6M/9/15Y", 0},
654 {"1_Swap_EUR IndexCurve/EUR-EURIBOR-6M/5/4Y IndexCurve/EUR-EURIBOR-6M/10/20Y", 0},
655 {"1_Swap_EUR IndexCurve/EUR-EURIBOR-6M/5/4Y IndexCurve/EUR-EURIBOR-6M/11/30Y", 0},
656 {"1_Swap_EUR IndexCurve/EUR-EURIBOR-6M/5/4Y IndexCurve/EUR-EURIBOR-6M/6/5Y", -91.8185},
657 {"1_Swap_EUR IndexCurve/EUR-EURIBOR-6M/5/4Y IndexCurve/EUR-EURIBOR-6M/7/7Y", 0},
658 {"1_Swap_EUR IndexCurve/EUR-EURIBOR-6M/5/4Y IndexCurve/EUR-EURIBOR-6M/8/10Y", 0},
659 {"1_Swap_EUR IndexCurve/EUR-EURIBOR-6M/5/4Y IndexCurve/EUR-EURIBOR-6M/9/15Y", 0},
660 {"1_Swap_EUR IndexCurve/EUR-EURIBOR-6M/6/5Y IndexCurve/EUR-EURIBOR-6M/10/20Y", 0},
661 {"1_Swap_EUR IndexCurve/EUR-EURIBOR-6M/6/5Y IndexCurve/EUR-EURIBOR-6M/11/30Y", 0},
662 {"1_Swap_EUR IndexCurve/EUR-EURIBOR-6M/6/5Y IndexCurve/EUR-EURIBOR-6M/7/7Y", -77.9517},
663 {"1_Swap_EUR IndexCurve/EUR-EURIBOR-6M/6/5Y IndexCurve/EUR-EURIBOR-6M/8/10Y", 0},
664 {"1_Swap_EUR IndexCurve/EUR-EURIBOR-6M/6/5Y IndexCurve/EUR-EURIBOR-6M/9/15Y", 0},
665 {"1_Swap_EUR IndexCurve/EUR-EURIBOR-6M/7/7Y IndexCurve/EUR-EURIBOR-6M/10/20Y", 0},
666 {"1_Swap_EUR IndexCurve/EUR-EURIBOR-6M/7/7Y IndexCurve/EUR-EURIBOR-6M/11/30Y", 0},
667 {"1_Swap_EUR IndexCurve/EUR-EURIBOR-6M/7/7Y IndexCurve/EUR-EURIBOR-6M/8/10Y", -98.9016},
668 {"1_Swap_EUR IndexCurve/EUR-EURIBOR-6M/7/7Y IndexCurve/EUR-EURIBOR-6M/9/15Y", 0},
669 {"1_Swap_EUR IndexCurve/EUR-EURIBOR-6M/8/10Y IndexCurve/EUR-EURIBOR-6M/10/20Y", 0},
670 {"1_Swap_EUR IndexCurve/EUR-EURIBOR-6M/8/10Y IndexCurve/EUR-EURIBOR-6M/11/30Y", 0},
671 {"1_Swap_EUR IndexCurve/EUR-EURIBOR-6M/8/10Y IndexCurve/EUR-EURIBOR-6M/9/15Y", 0},
672 {"1_Swap_EUR IndexCurve/EUR-EURIBOR-6M/9/15Y IndexCurve/EUR-EURIBOR-6M/10/20Y", 0},
673 {"1_Swap_EUR IndexCurve/EUR-EURIBOR-6M/9/15Y IndexCurve/EUR-EURIBOR-6M/11/30Y", 0},
674 {"7_FxOption_EUR_USD DiscountCurve/EUR/0/1M DiscountCurve/EUR/1/6M", 0},
675 {"7_FxOption_EUR_USD DiscountCurve/EUR/0/1M DiscountCurve/EUR/10/20Y", 0},
676 {"7_FxOption_EUR_USD DiscountCurve/EUR/0/1M DiscountCurve/EUR/11/30Y", 0},
677 {"7_FxOption_EUR_USD DiscountCurve/EUR/0/1M DiscountCurve/EUR/2/1Y", 0},
678 {"7_FxOption_EUR_USD DiscountCurve/EUR/0/1M DiscountCurve/EUR/3/2Y", 0},
679 {"7_FxOption_EUR_USD DiscountCurve/EUR/0/1M DiscountCurve/EUR/4/3Y", 0},
680 {"7_FxOption_EUR_USD DiscountCurve/EUR/0/1M DiscountCurve/EUR/5/4Y", 0},
681 {"7_FxOption_EUR_USD DiscountCurve/EUR/0/1M DiscountCurve/EUR/6/5Y", 0},
682 {"7_FxOption_EUR_USD DiscountCurve/EUR/0/1M DiscountCurve/EUR/7/7Y", 0},
683 {"7_FxOption_EUR_USD DiscountCurve/EUR/0/1M DiscountCurve/EUR/8/10Y", 0},
684 {"7_FxOption_EUR_USD DiscountCurve/EUR/0/1M DiscountCurve/EUR/9/15Y", 0},
685 {"7_FxOption_EUR_USD DiscountCurve/EUR/0/1M DiscountCurve/USD/0/1M", 0},
686 {"7_FxOption_EUR_USD DiscountCurve/EUR/0/1M DiscountCurve/USD/1/6M", 0},
687 {"7_FxOption_EUR_USD DiscountCurve/EUR/0/1M DiscountCurve/USD/10/20Y", 0},
688 {"7_FxOption_EUR_USD DiscountCurve/EUR/0/1M DiscountCurve/USD/11/30Y", 0},
689 {"7_FxOption_EUR_USD DiscountCurve/EUR/0/1M DiscountCurve/USD/2/1Y", 0},
690 {"7_FxOption_EUR_USD DiscountCurve/EUR/0/1M DiscountCurve/USD/3/2Y", 0},
691 {"7_FxOption_EUR_USD DiscountCurve/EUR/0/1M DiscountCurve/USD/4/3Y", 0},
692 {"7_FxOption_EUR_USD DiscountCurve/EUR/0/1M DiscountCurve/USD/5/4Y", 0},
693 {"7_FxOption_EUR_USD DiscountCurve/EUR/0/1M DiscountCurve/USD/6/5Y", 0},
694 {"7_FxOption_EUR_USD DiscountCurve/EUR/0/1M DiscountCurve/USD/7/7Y", 0},
695 {"7_FxOption_EUR_USD DiscountCurve/EUR/0/1M DiscountCurve/USD/8/10Y", 0},
696 {"7_FxOption_EUR_USD DiscountCurve/EUR/0/1M DiscountCurve/USD/9/15Y", 0},
697 {"7_FxOption_EUR_USD DiscountCurve/EUR/1/6M DiscountCurve/EUR/10/20Y", 0},
698 {"7_FxOption_EUR_USD DiscountCurve/EUR/1/6M DiscountCurve/EUR/11/30Y", 0},
699 {"7_FxOption_EUR_USD DiscountCurve/EUR/1/6M DiscountCurve/EUR/2/1Y", 0},
700 {"7_FxOption_EUR_USD DiscountCurve/EUR/1/6M DiscountCurve/EUR/3/2Y", 0},
701 {"7_FxOption_EUR_USD DiscountCurve/EUR/1/6M DiscountCurve/EUR/4/3Y", 0},
702 {"7_FxOption_EUR_USD DiscountCurve/EUR/1/6M DiscountCurve/EUR/5/4Y", 0},
703 {"7_FxOption_EUR_USD DiscountCurve/EUR/1/6M DiscountCurve/EUR/6/5Y", 0},
704 {"7_FxOption_EUR_USD DiscountCurve/EUR/1/6M DiscountCurve/EUR/7/7Y", 0},
705 {"7_FxOption_EUR_USD DiscountCurve/EUR/1/6M DiscountCurve/EUR/8/10Y", 0},
706 {"7_FxOption_EUR_USD DiscountCurve/EUR/1/6M DiscountCurve/EUR/9/15Y", 0},
707 {"7_FxOption_EUR_USD DiscountCurve/EUR/1/6M DiscountCurve/USD/0/1M", 0},
708 {"7_FxOption_EUR_USD DiscountCurve/EUR/1/6M DiscountCurve/USD/1/6M", 0},
709 {"7_FxOption_EUR_USD DiscountCurve/EUR/1/6M DiscountCurve/USD/10/20Y", 0},
710 {"7_FxOption_EUR_USD DiscountCurve/EUR/1/6M DiscountCurve/USD/11/30Y", 0},
711 {"7_FxOption_EUR_USD DiscountCurve/EUR/1/6M DiscountCurve/USD/2/1Y", 0},
712 {"7_FxOption_EUR_USD DiscountCurve/EUR/1/6M DiscountCurve/USD/3/2Y", 0},
713 {"7_FxOption_EUR_USD DiscountCurve/EUR/1/6M DiscountCurve/USD/4/3Y", 0},
714 {"7_FxOption_EUR_USD DiscountCurve/EUR/1/6M DiscountCurve/USD/5/4Y", 0},
715 {"7_FxOption_EUR_USD DiscountCurve/EUR/1/6M DiscountCurve/USD/6/5Y", 0},
716 {"7_FxOption_EUR_USD DiscountCurve/EUR/1/6M DiscountCurve/USD/7/7Y", 0},
717 {"7_FxOption_EUR_USD DiscountCurve/EUR/1/6M DiscountCurve/USD/8/10Y", 0},
718 {"7_FxOption_EUR_USD DiscountCurve/EUR/1/6M DiscountCurve/USD/9/15Y", 0},
719 {"7_FxOption_EUR_USD DiscountCurve/EUR/10/20Y DiscountCurve/EUR/11/30Y", 0},
720 {"7_FxOption_EUR_USD DiscountCurve/EUR/10/20Y DiscountCurve/USD/0/1M", 0},
721 {"7_FxOption_EUR_USD DiscountCurve/EUR/10/20Y DiscountCurve/USD/1/6M", 0},
722 {"7_FxOption_EUR_USD DiscountCurve/EUR/10/20Y DiscountCurve/USD/10/20Y", 0},
723 {"7_FxOption_EUR_USD DiscountCurve/EUR/10/20Y DiscountCurve/USD/11/30Y", 0},
724 {"7_FxOption_EUR_USD DiscountCurve/EUR/10/20Y DiscountCurve/USD/2/1Y", 0},
725 {"7_FxOption_EUR_USD DiscountCurve/EUR/10/20Y DiscountCurve/USD/3/2Y", 0},
726 {"7_FxOption_EUR_USD DiscountCurve/EUR/10/20Y DiscountCurve/USD/4/3Y", 0},
727 {"7_FxOption_EUR_USD DiscountCurve/EUR/10/20Y DiscountCurve/USD/5/4Y", 0},
728 {"7_FxOption_EUR_USD DiscountCurve/EUR/10/20Y DiscountCurve/USD/6/5Y", 0},
729 {"7_FxOption_EUR_USD DiscountCurve/EUR/10/20Y DiscountCurve/USD/7/7Y", 0},
730 {"7_FxOption_EUR_USD DiscountCurve/EUR/10/20Y DiscountCurve/USD/8/10Y", 0},
731 {"7_FxOption_EUR_USD DiscountCurve/EUR/10/20Y DiscountCurve/USD/9/15Y", 0},
732 {"7_FxOption_EUR_USD DiscountCurve/EUR/11/30Y DiscountCurve/USD/0/1M", 0},
733 {"7_FxOption_EUR_USD DiscountCurve/EUR/11/30Y DiscountCurve/USD/1/6M", 0},
734 {"7_FxOption_EUR_USD DiscountCurve/EUR/11/30Y DiscountCurve/USD/10/20Y", 0},
735 {"7_FxOption_EUR_USD DiscountCurve/EUR/11/30Y DiscountCurve/USD/11/30Y", 0},
736 {"7_FxOption_EUR_USD DiscountCurve/EUR/11/30Y DiscountCurve/USD/2/1Y", 0},
737 {"7_FxOption_EUR_USD DiscountCurve/EUR/11/30Y DiscountCurve/USD/3/2Y", 0},
738 {"7_FxOption_EUR_USD DiscountCurve/EUR/11/30Y DiscountCurve/USD/4/3Y", 0},
739 {"7_FxOption_EUR_USD DiscountCurve/EUR/11/30Y DiscountCurve/USD/5/4Y", 0},
740 {"7_FxOption_EUR_USD DiscountCurve/EUR/11/30Y DiscountCurve/USD/6/5Y", 0},
741 {"7_FxOption_EUR_USD DiscountCurve/EUR/11/30Y DiscountCurve/USD/7/7Y", 0},
742 {"7_FxOption_EUR_USD DiscountCurve/EUR/11/30Y DiscountCurve/USD/8/10Y", 0},
743 {"7_FxOption_EUR_USD DiscountCurve/EUR/11/30Y DiscountCurve/USD/9/15Y", 0},
744 {"7_FxOption_EUR_USD DiscountCurve/EUR/2/1Y DiscountCurve/EUR/10/20Y", 0},
745 {"7_FxOption_EUR_USD DiscountCurve/EUR/2/1Y DiscountCurve/EUR/11/30Y", 0},
746 {"7_FxOption_EUR_USD DiscountCurve/EUR/2/1Y DiscountCurve/EUR/3/2Y", 0},
747 {"7_FxOption_EUR_USD DiscountCurve/EUR/2/1Y DiscountCurve/EUR/4/3Y", 0},
748 {"7_FxOption_EUR_USD DiscountCurve/EUR/2/1Y DiscountCurve/EUR/5/4Y", 0},
749 {"7_FxOption_EUR_USD DiscountCurve/EUR/2/1Y DiscountCurve/EUR/6/5Y", 0},
750 {"7_FxOption_EUR_USD DiscountCurve/EUR/2/1Y DiscountCurve/EUR/7/7Y", 0},
751 {"7_FxOption_EUR_USD DiscountCurve/EUR/2/1Y DiscountCurve/EUR/8/10Y", 0},
752 {"7_FxOption_EUR_USD DiscountCurve/EUR/2/1Y DiscountCurve/EUR/9/15Y", 0},
753 {"7_FxOption_EUR_USD DiscountCurve/EUR/2/1Y DiscountCurve/USD/0/1M", 0},
754 {"7_FxOption_EUR_USD DiscountCurve/EUR/2/1Y DiscountCurve/USD/1/6M", 0},
755 {"7_FxOption_EUR_USD DiscountCurve/EUR/2/1Y DiscountCurve/USD/10/20Y", 0},
756 {"7_FxOption_EUR_USD DiscountCurve/EUR/2/1Y DiscountCurve/USD/11/30Y", 0},
757 {"7_FxOption_EUR_USD DiscountCurve/EUR/2/1Y DiscountCurve/USD/2/1Y", 0},
758 {"7_FxOption_EUR_USD DiscountCurve/EUR/2/1Y DiscountCurve/USD/3/2Y", 0},
759 {"7_FxOption_EUR_USD DiscountCurve/EUR/2/1Y DiscountCurve/USD/4/3Y", 0},
760 {"7_FxOption_EUR_USD DiscountCurve/EUR/2/1Y DiscountCurve/USD/5/4Y", 0},
761 {"7_FxOption_EUR_USD DiscountCurve/EUR/2/1Y DiscountCurve/USD/6/5Y", 0},
762 {"7_FxOption_EUR_USD DiscountCurve/EUR/2/1Y DiscountCurve/USD/7/7Y", 0},
763 {"7_FxOption_EUR_USD DiscountCurve/EUR/2/1Y DiscountCurve/USD/8/10Y", 0},
764 {"7_FxOption_EUR_USD DiscountCurve/EUR/2/1Y DiscountCurve/USD/9/15Y", 0},
765 {"7_FxOption_EUR_USD DiscountCurve/EUR/3/2Y DiscountCurve/EUR/10/20Y", 0},
766 {"7_FxOption_EUR_USD DiscountCurve/EUR/3/2Y DiscountCurve/EUR/11/30Y", 0},
767 {"7_FxOption_EUR_USD DiscountCurve/EUR/3/2Y DiscountCurve/EUR/4/3Y", 0},
768 {"7_FxOption_EUR_USD DiscountCurve/EUR/3/2Y DiscountCurve/EUR/5/4Y", 0},
769 {"7_FxOption_EUR_USD DiscountCurve/EUR/3/2Y DiscountCurve/EUR/6/5Y", 0},
770 {"7_FxOption_EUR_USD DiscountCurve/EUR/3/2Y DiscountCurve/EUR/7/7Y", 0},
771 {"7_FxOption_EUR_USD DiscountCurve/EUR/3/2Y DiscountCurve/EUR/8/10Y", 0},
772 {"7_FxOption_EUR_USD DiscountCurve/EUR/3/2Y DiscountCurve/EUR/9/15Y", 0},
773 {"7_FxOption_EUR_USD DiscountCurve/EUR/3/2Y DiscountCurve/USD/0/1M", 0},
774 {"7_FxOption_EUR_USD DiscountCurve/EUR/3/2Y DiscountCurve/USD/1/6M", 0},
775 {"7_FxOption_EUR_USD DiscountCurve/EUR/3/2Y DiscountCurve/USD/10/20Y", 0},
776 {"7_FxOption_EUR_USD DiscountCurve/EUR/3/2Y DiscountCurve/USD/11/30Y", 0},
777 {"7_FxOption_EUR_USD DiscountCurve/EUR/3/2Y DiscountCurve/USD/2/1Y", 0},
778 {"7_FxOption_EUR_USD DiscountCurve/EUR/3/2Y DiscountCurve/USD/3/2Y", 0},
779 {"7_FxOption_EUR_USD DiscountCurve/EUR/3/2Y DiscountCurve/USD/4/3Y", 0},
780 {"7_FxOption_EUR_USD DiscountCurve/EUR/3/2Y DiscountCurve/USD/5/4Y", 0},
781 {"7_FxOption_EUR_USD DiscountCurve/EUR/3/2Y DiscountCurve/USD/6/5Y", 0},
782 {"7_FxOption_EUR_USD DiscountCurve/EUR/3/2Y DiscountCurve/USD/7/7Y", 0},
783 {"7_FxOption_EUR_USD DiscountCurve/EUR/3/2Y DiscountCurve/USD/8/10Y", 0},
784 {"7_FxOption_EUR_USD DiscountCurve/EUR/3/2Y DiscountCurve/USD/9/15Y", 0},
785 {"7_FxOption_EUR_USD DiscountCurve/EUR/4/3Y DiscountCurve/EUR/10/20Y", 0},
786 {"7_FxOption_EUR_USD DiscountCurve/EUR/4/3Y DiscountCurve/EUR/11/30Y", 0},
787 {"7_FxOption_EUR_USD DiscountCurve/EUR/4/3Y DiscountCurve/EUR/5/4Y", 0.703423},
788 {"7_FxOption_EUR_USD DiscountCurve/EUR/4/3Y DiscountCurve/EUR/6/5Y", 0},
789 {"7_FxOption_EUR_USD DiscountCurve/EUR/4/3Y DiscountCurve/EUR/7/7Y", 0},
790 {"7_FxOption_EUR_USD DiscountCurve/EUR/4/3Y DiscountCurve/EUR/8/10Y", 0},
791 {"7_FxOption_EUR_USD DiscountCurve/EUR/4/3Y DiscountCurve/EUR/9/15Y", 0},
792 {"7_FxOption_EUR_USD DiscountCurve/EUR/4/3Y DiscountCurve/USD/0/1M", 0},
793 {"7_FxOption_EUR_USD DiscountCurve/EUR/4/3Y DiscountCurve/USD/1/6M", 0},
794 {"7_FxOption_EUR_USD DiscountCurve/EUR/4/3Y DiscountCurve/USD/10/20Y", 0},
795 {"7_FxOption_EUR_USD DiscountCurve/EUR/4/3Y DiscountCurve/USD/11/30Y", 0},
796 {"7_FxOption_EUR_USD DiscountCurve/EUR/4/3Y DiscountCurve/USD/2/1Y", 0},
797 {"7_FxOption_EUR_USD DiscountCurve/EUR/4/3Y DiscountCurve/USD/3/2Y", 0},
798 {"7_FxOption_EUR_USD DiscountCurve/EUR/4/3Y DiscountCurve/USD/4/3Y", -129.352},
799 {"7_FxOption_EUR_USD DiscountCurve/EUR/4/3Y DiscountCurve/USD/5/4Y", -0.473197},
800 {"7_FxOption_EUR_USD DiscountCurve/EUR/4/3Y DiscountCurve/USD/6/5Y", 0},
801 {"7_FxOption_EUR_USD DiscountCurve/EUR/4/3Y DiscountCurve/USD/7/7Y", 0},
802 {"7_FxOption_EUR_USD DiscountCurve/EUR/4/3Y DiscountCurve/USD/8/10Y", 0},
803 {"7_FxOption_EUR_USD DiscountCurve/EUR/4/3Y DiscountCurve/USD/9/15Y", 0},
804 {"7_FxOption_EUR_USD DiscountCurve/EUR/5/4Y DiscountCurve/EUR/10/20Y", 0},
805 {"7_FxOption_EUR_USD DiscountCurve/EUR/5/4Y DiscountCurve/EUR/11/30Y", 0},
806 {"7_FxOption_EUR_USD DiscountCurve/EUR/5/4Y DiscountCurve/EUR/6/5Y", 0},
807 {"7_FxOption_EUR_USD DiscountCurve/EUR/5/4Y DiscountCurve/EUR/7/7Y", 0},
808 {"7_FxOption_EUR_USD DiscountCurve/EUR/5/4Y DiscountCurve/EUR/8/10Y", 0},
809 {"7_FxOption_EUR_USD DiscountCurve/EUR/5/4Y DiscountCurve/EUR/9/15Y", 0},
810 {"7_FxOption_EUR_USD DiscountCurve/EUR/5/4Y DiscountCurve/USD/0/1M", 0},
811 {"7_FxOption_EUR_USD DiscountCurve/EUR/5/4Y DiscountCurve/USD/1/6M", 0},
812 {"7_FxOption_EUR_USD DiscountCurve/EUR/5/4Y DiscountCurve/USD/10/20Y", 0},
813 {"7_FxOption_EUR_USD DiscountCurve/EUR/5/4Y DiscountCurve/USD/11/30Y", 0},
814 {"7_FxOption_EUR_USD DiscountCurve/EUR/5/4Y DiscountCurve/USD/2/1Y", 0},
815 {"7_FxOption_EUR_USD DiscountCurve/EUR/5/4Y DiscountCurve/USD/3/2Y", 0},
816 {"7_FxOption_EUR_USD DiscountCurve/EUR/5/4Y DiscountCurve/USD/4/3Y", -0.473197},
817 {"7_FxOption_EUR_USD DiscountCurve/EUR/5/4Y DiscountCurve/USD/5/4Y", -0.00173105},
818 {"7_FxOption_EUR_USD DiscountCurve/EUR/5/4Y DiscountCurve/USD/6/5Y", 0},
819 {"7_FxOption_EUR_USD DiscountCurve/EUR/5/4Y DiscountCurve/USD/7/7Y", 0},
820 {"7_FxOption_EUR_USD DiscountCurve/EUR/5/4Y DiscountCurve/USD/8/10Y", 0},
821 {"7_FxOption_EUR_USD DiscountCurve/EUR/5/4Y DiscountCurve/USD/9/15Y", 0},
822 {"7_FxOption_EUR_USD DiscountCurve/EUR/6/5Y DiscountCurve/EUR/10/20Y", 0},
823 {"7_FxOption_EUR_USD DiscountCurve/EUR/6/5Y DiscountCurve/EUR/11/30Y", 0},
824 {"7_FxOption_EUR_USD DiscountCurve/EUR/6/5Y DiscountCurve/EUR/7/7Y", 0},
825 {"7_FxOption_EUR_USD DiscountCurve/EUR/6/5Y DiscountCurve/EUR/8/10Y", 0},
826 {"7_FxOption_EUR_USD DiscountCurve/EUR/6/5Y DiscountCurve/EUR/9/15Y", 0},
827 {"7_FxOption_EUR_USD DiscountCurve/EUR/6/5Y DiscountCurve/USD/0/1M", 0},
828 {"7_FxOption_EUR_USD DiscountCurve/EUR/6/5Y DiscountCurve/USD/1/6M", 0},
829 {"7_FxOption_EUR_USD DiscountCurve/EUR/6/5Y DiscountCurve/USD/10/20Y", 0},
830 {"7_FxOption_EUR_USD DiscountCurve/EUR/6/5Y DiscountCurve/USD/11/30Y", 0},
831 {"7_FxOption_EUR_USD DiscountCurve/EUR/6/5Y DiscountCurve/USD/2/1Y", 0},
832 {"7_FxOption_EUR_USD DiscountCurve/EUR/6/5Y DiscountCurve/USD/3/2Y", 0},
833 {"7_FxOption_EUR_USD DiscountCurve/EUR/6/5Y DiscountCurve/USD/4/3Y", 0},
834 {"7_FxOption_EUR_USD DiscountCurve/EUR/6/5Y DiscountCurve/USD/5/4Y", 0},
835 {"7_FxOption_EUR_USD DiscountCurve/EUR/6/5Y DiscountCurve/USD/6/5Y", 0},
836 {"7_FxOption_EUR_USD DiscountCurve/EUR/6/5Y DiscountCurve/USD/7/7Y", 0},
837 {"7_FxOption_EUR_USD DiscountCurve/EUR/6/5Y DiscountCurve/USD/8/10Y", 0},
838 {"7_FxOption_EUR_USD DiscountCurve/EUR/6/5Y DiscountCurve/USD/9/15Y", 0},
839 {"7_FxOption_EUR_USD DiscountCurve/EUR/7/7Y DiscountCurve/EUR/10/20Y", 0},
840 {"7_FxOption_EUR_USD DiscountCurve/EUR/7/7Y DiscountCurve/EUR/11/30Y", 0},
841 {"7_FxOption_EUR_USD DiscountCurve/EUR/7/7Y DiscountCurve/EUR/8/10Y", 0},
842 {"7_FxOption_EUR_USD DiscountCurve/EUR/7/7Y DiscountCurve/EUR/9/15Y", 0},
843 {"7_FxOption_EUR_USD DiscountCurve/EUR/7/7Y DiscountCurve/USD/0/1M", 0},
844 {"7_FxOption_EUR_USD DiscountCurve/EUR/7/7Y DiscountCurve/USD/1/6M", 0},
845 {"7_FxOption_EUR_USD DiscountCurve/EUR/7/7Y DiscountCurve/USD/10/20Y", 0},
846 {"7_FxOption_EUR_USD DiscountCurve/EUR/7/7Y DiscountCurve/USD/11/30Y", 0},
847 {"7_FxOption_EUR_USD DiscountCurve/EUR/7/7Y DiscountCurve/USD/2/1Y", 0},
848 {"7_FxOption_EUR_USD DiscountCurve/EUR/7/7Y DiscountCurve/USD/3/2Y", 0},
849 {"7_FxOption_EUR_USD DiscountCurve/EUR/7/7Y DiscountCurve/USD/4/3Y", 0},
850 {"7_FxOption_EUR_USD DiscountCurve/EUR/7/7Y DiscountCurve/USD/5/4Y", 0},
851 {"7_FxOption_EUR_USD DiscountCurve/EUR/7/7Y DiscountCurve/USD/6/5Y", 0},
852 {"7_FxOption_EUR_USD DiscountCurve/EUR/7/7Y DiscountCurve/USD/7/7Y", 0},
853 {"7_FxOption_EUR_USD DiscountCurve/EUR/7/7Y DiscountCurve/USD/8/10Y", 0},
854 {"7_FxOption_EUR_USD DiscountCurve/EUR/7/7Y DiscountCurve/USD/9/15Y", 0},
855 {"7_FxOption_EUR_USD DiscountCurve/EUR/8/10Y DiscountCurve/EUR/10/20Y", 0},
856 {"7_FxOption_EUR_USD DiscountCurve/EUR/8/10Y DiscountCurve/EUR/11/30Y", 0},
857 {"7_FxOption_EUR_USD DiscountCurve/EUR/8/10Y DiscountCurve/EUR/9/15Y", 0},
858 {"7_FxOption_EUR_USD DiscountCurve/EUR/8/10Y DiscountCurve/USD/0/1M", 0},
859 {"7_FxOption_EUR_USD DiscountCurve/EUR/8/10Y DiscountCurve/USD/1/6M", 0},
860 {"7_FxOption_EUR_USD DiscountCurve/EUR/8/10Y DiscountCurve/USD/10/20Y", 0},
861 {"7_FxOption_EUR_USD DiscountCurve/EUR/8/10Y DiscountCurve/USD/11/30Y", 0},
862 {"7_FxOption_EUR_USD DiscountCurve/EUR/8/10Y DiscountCurve/USD/2/1Y", 0},
863 {"7_FxOption_EUR_USD DiscountCurve/EUR/8/10Y DiscountCurve/USD/3/2Y", 0},
864 {"7_FxOption_EUR_USD DiscountCurve/EUR/8/10Y DiscountCurve/USD/4/3Y", 0},
865 {"7_FxOption_EUR_USD DiscountCurve/EUR/8/10Y DiscountCurve/USD/5/4Y", 0},
866 {"7_FxOption_EUR_USD DiscountCurve/EUR/8/10Y DiscountCurve/USD/6/5Y", 0},
867 {"7_FxOption_EUR_USD DiscountCurve/EUR/8/10Y DiscountCurve/USD/7/7Y", 0},
868 {"7_FxOption_EUR_USD DiscountCurve/EUR/8/10Y DiscountCurve/USD/8/10Y", 0},
869 {"7_FxOption_EUR_USD DiscountCurve/EUR/8/10Y DiscountCurve/USD/9/15Y", 0},
870 {"7_FxOption_EUR_USD DiscountCurve/EUR/9/15Y DiscountCurve/EUR/10/20Y", 0},
871 {"7_FxOption_EUR_USD DiscountCurve/EUR/9/15Y DiscountCurve/EUR/11/30Y", 0},
872 {"7_FxOption_EUR_USD DiscountCurve/EUR/9/15Y DiscountCurve/USD/0/1M", 0},
873 {"7_FxOption_EUR_USD DiscountCurve/EUR/9/15Y DiscountCurve/USD/1/6M", 0},
874 {"7_FxOption_EUR_USD DiscountCurve/EUR/9/15Y DiscountCurve/USD/10/20Y", 0},
875 {"7_FxOption_EUR_USD DiscountCurve/EUR/9/15Y DiscountCurve/USD/11/30Y", 0},
876 {"7_FxOption_EUR_USD DiscountCurve/EUR/9/15Y DiscountCurve/USD/2/1Y", 0},
877 {"7_FxOption_EUR_USD DiscountCurve/EUR/9/15Y DiscountCurve/USD/3/2Y", 0},
878 {"7_FxOption_EUR_USD DiscountCurve/EUR/9/15Y DiscountCurve/USD/4/3Y", 0},
879 {"7_FxOption_EUR_USD DiscountCurve/EUR/9/15Y DiscountCurve/USD/5/4Y", 0},
880 {"7_FxOption_EUR_USD DiscountCurve/EUR/9/15Y DiscountCurve/USD/6/5Y", 0},
881 {"7_FxOption_EUR_USD DiscountCurve/EUR/9/15Y DiscountCurve/USD/7/7Y", 0},
882 {"7_FxOption_EUR_USD DiscountCurve/EUR/9/15Y DiscountCurve/USD/8/10Y", 0},
883 {"7_FxOption_EUR_USD DiscountCurve/EUR/9/15Y DiscountCurve/USD/9/15Y", 0},
884 {"7_FxOption_EUR_USD DiscountCurve/USD/0/1M DiscountCurve/USD/1/6M", 0},
885 {"7_FxOption_EUR_USD DiscountCurve/USD/0/1M DiscountCurve/USD/10/20Y", 0},
886 {"7_FxOption_EUR_USD DiscountCurve/USD/0/1M DiscountCurve/USD/11/30Y", 0},
887 {"7_FxOption_EUR_USD DiscountCurve/USD/0/1M DiscountCurve/USD/2/1Y", 0},
888 {"7_FxOption_EUR_USD DiscountCurve/USD/0/1M DiscountCurve/USD/3/2Y", 0},
889 {"7_FxOption_EUR_USD DiscountCurve/USD/0/1M DiscountCurve/USD/4/3Y", 0},
890 {"7_FxOption_EUR_USD DiscountCurve/USD/0/1M DiscountCurve/USD/5/4Y", 0},
891 {"7_FxOption_EUR_USD DiscountCurve/USD/0/1M DiscountCurve/USD/6/5Y", 0},
892 {"7_FxOption_EUR_USD DiscountCurve/USD/0/1M DiscountCurve/USD/7/7Y", 0},
893 {"7_FxOption_EUR_USD DiscountCurve/USD/0/1M DiscountCurve/USD/8/10Y", 0},
894 {"7_FxOption_EUR_USD DiscountCurve/USD/0/1M DiscountCurve/USD/9/15Y", 0},
895 {"7_FxOption_EUR_USD DiscountCurve/USD/1/6M DiscountCurve/USD/10/20Y", 0},
896 {"7_FxOption_EUR_USD DiscountCurve/USD/1/6M DiscountCurve/USD/11/30Y", 0},
897 {"7_FxOption_EUR_USD DiscountCurve/USD/1/6M DiscountCurve/USD/2/1Y", 0},
898 {"7_FxOption_EUR_USD DiscountCurve/USD/1/6M DiscountCurve/USD/3/2Y", 0},
899 {"7_FxOption_EUR_USD DiscountCurve/USD/1/6M DiscountCurve/USD/4/3Y", 0},
900 {"7_FxOption_EUR_USD DiscountCurve/USD/1/6M DiscountCurve/USD/5/4Y", 0},
901 {"7_FxOption_EUR_USD DiscountCurve/USD/1/6M DiscountCurve/USD/6/5Y", 0},
902 {"7_FxOption_EUR_USD DiscountCurve/USD/1/6M DiscountCurve/USD/7/7Y", 0},
903 {"7_FxOption_EUR_USD DiscountCurve/USD/1/6M DiscountCurve/USD/8/10Y", 0},
904 {"7_FxOption_EUR_USD DiscountCurve/USD/1/6M DiscountCurve/USD/9/15Y", 0},
905 {"7_FxOption_EUR_USD DiscountCurve/USD/10/20Y DiscountCurve/USD/11/30Y", 0},
906 {"7_FxOption_EUR_USD DiscountCurve/USD/2/1Y DiscountCurve/USD/10/20Y", 0},
907 {"7_FxOption_EUR_USD DiscountCurve/USD/2/1Y DiscountCurve/USD/11/30Y", 0},
908 {"7_FxOption_EUR_USD DiscountCurve/USD/2/1Y DiscountCurve/USD/3/2Y", 0},
909 {"7_FxOption_EUR_USD DiscountCurve/USD/2/1Y DiscountCurve/USD/4/3Y", 0},
910 {"7_FxOption_EUR_USD DiscountCurve/USD/2/1Y DiscountCurve/USD/5/4Y", 0},
911 {"7_FxOption_EUR_USD DiscountCurve/USD/2/1Y DiscountCurve/USD/6/5Y", 0},
912 {"7_FxOption_EUR_USD DiscountCurve/USD/2/1Y DiscountCurve/USD/7/7Y", 0},
913 {"7_FxOption_EUR_USD DiscountCurve/USD/2/1Y DiscountCurve/USD/8/10Y", 0},
914 {"7_FxOption_EUR_USD DiscountCurve/USD/2/1Y DiscountCurve/USD/9/15Y", 0},
915 {"7_FxOption_EUR_USD DiscountCurve/USD/3/2Y DiscountCurve/USD/10/20Y", 0},
916 {"7_FxOption_EUR_USD DiscountCurve/USD/3/2Y DiscountCurve/USD/11/30Y", 0},
917 {"7_FxOption_EUR_USD DiscountCurve/USD/3/2Y DiscountCurve/USD/4/3Y", 0},
918 {"7_FxOption_EUR_USD DiscountCurve/USD/3/2Y DiscountCurve/USD/5/4Y", 0},
919 {"7_FxOption_EUR_USD DiscountCurve/USD/3/2Y DiscountCurve/USD/6/5Y", 0},
920 {"7_FxOption_EUR_USD DiscountCurve/USD/3/2Y DiscountCurve/USD/7/7Y", 0},
921 {"7_FxOption_EUR_USD DiscountCurve/USD/3/2Y DiscountCurve/USD/8/10Y", 0},
922 {"7_FxOption_EUR_USD DiscountCurve/USD/3/2Y DiscountCurve/USD/9/15Y", 0},
923 {"7_FxOption_EUR_USD DiscountCurve/USD/4/3Y DiscountCurve/USD/10/20Y", 0},
924 {"7_FxOption_EUR_USD DiscountCurve/USD/4/3Y DiscountCurve/USD/11/30Y", 0},
925 {"7_FxOption_EUR_USD DiscountCurve/USD/4/3Y DiscountCurve/USD/5/4Y", 0.287762},
926 {"7_FxOption_EUR_USD DiscountCurve/USD/4/3Y DiscountCurve/USD/6/5Y", 0},
927 {"7_FxOption_EUR_USD DiscountCurve/USD/4/3Y DiscountCurve/USD/7/7Y", 0},
928 {"7_FxOption_EUR_USD DiscountCurve/USD/4/3Y DiscountCurve/USD/8/10Y", 0},
929 {"7_FxOption_EUR_USD DiscountCurve/USD/4/3Y DiscountCurve/USD/9/15Y", 0},
930 {"7_FxOption_EUR_USD DiscountCurve/USD/5/4Y DiscountCurve/USD/10/20Y", 0},
931 {"7_FxOption_EUR_USD DiscountCurve/USD/5/4Y DiscountCurve/USD/11/30Y", 0},
932 {"7_FxOption_EUR_USD DiscountCurve/USD/5/4Y DiscountCurve/USD/6/5Y", 0},
933 {"7_FxOption_EUR_USD DiscountCurve/USD/5/4Y DiscountCurve/USD/7/7Y", 0},
934 {"7_FxOption_EUR_USD DiscountCurve/USD/5/4Y DiscountCurve/USD/8/10Y", 0},
935 {"7_FxOption_EUR_USD DiscountCurve/USD/5/4Y DiscountCurve/USD/9/15Y", 0},
936 {"7_FxOption_EUR_USD DiscountCurve/USD/6/5Y DiscountCurve/USD/10/20Y", 0},
937 {"7_FxOption_EUR_USD DiscountCurve/USD/6/5Y DiscountCurve/USD/11/30Y", 0},
938 {"7_FxOption_EUR_USD DiscountCurve/USD/6/5Y DiscountCurve/USD/7/7Y", 0},
939 {"7_FxOption_EUR_USD DiscountCurve/USD/6/5Y DiscountCurve/USD/8/10Y", 0},
940 {"7_FxOption_EUR_USD DiscountCurve/USD/6/5Y DiscountCurve/USD/9/15Y", 0},
941 {"7_FxOption_EUR_USD DiscountCurve/USD/7/7Y DiscountCurve/USD/10/20Y", 0},
942 {"7_FxOption_EUR_USD DiscountCurve/USD/7/7Y DiscountCurve/USD/11/30Y", 0},
943 {"7_FxOption_EUR_USD DiscountCurve/USD/7/7Y DiscountCurve/USD/8/10Y", 0},
944 {"7_FxOption_EUR_USD DiscountCurve/USD/7/7Y DiscountCurve/USD/9/15Y", 0},
945 {"7_FxOption_EUR_USD DiscountCurve/USD/8/10Y DiscountCurve/USD/10/20Y", 0},
946 {"7_FxOption_EUR_USD DiscountCurve/USD/8/10Y DiscountCurve/USD/11/30Y", 0},
947 {"7_FxOption_EUR_USD DiscountCurve/USD/8/10Y DiscountCurve/USD/9/15Y", 0},
948 {"7_FxOption_EUR_USD DiscountCurve/USD/9/15Y DiscountCurve/USD/10/20Y", 0},
949 {"7_FxOption_EUR_USD DiscountCurve/USD/9/15Y DiscountCurve/USD/11/30Y", 0}};
950 // sensitivity analysis
951 QuantLib::ext::shared_ptr<SensitivityAnalysis> sa = QuantLib::ext::make_shared<SensitivityAnalysis>(
952 portfolio, initMarket, Market::defaultConfiguration, data, simMarketData, sensiData, false);
953 sa->generateSensitivities();
954 map<pair<string, string>, Real> deltaMap;
955 map<pair<string, string>, Real> gammaMap;
956 for (auto [pid,p] : portfolio->trades()) {
957 for (const auto& f : sa->sensiCube()->factors()) {
958 auto des = sa->sensiCube()->factorDescription(f);
959 deltaMap[make_pair(pid, des)] = sa->sensiCube()->delta(pid, f);
960 gammaMap[make_pair(pid, des)] = sa->sensiCube()->gamma(pid, f);
961 }
962 }
963 std::vector<ore::analytics::SensitivityScenarioGenerator::ScenarioDescription> scenDesc =
964 sa->scenarioGenerator()->scenarioDescriptions();
965
966 Real shiftSize = 1E-5; // shift size
967
968 // check deltas
969 BOOST_TEST_MESSAGE("Checking deltas...");
970 Size foundDeltas = 0, zeroDeltas = 0;
971 for (auto const& x : deltaMap) {
972 string key = x.first.first + " " + x.first.second;
973 Real scaledResult = x.second / shiftSize;
974 if (analyticalResultsDelta.count(key) > 0) {
975 if (!check(analyticalResultsDelta.at(key), scaledResult))
976 BOOST_ERROR("Sensitivity analysis result " << key << " (" << scaledResult
977 << ") could not be verified against analytic result ("
978 << analyticalResultsDelta.at(key) << ")");
979 ++foundDeltas;
980 } else {
981 if (!close_enough(x.second, 0.0))
982 BOOST_ERROR("Sensitivity analysis result " << key << " (" << scaledResult << ") expected to be zero");
983 ++zeroDeltas;
984 }
985 }
986 if (foundDeltas != analyticalResultsDelta.size())
987 BOOST_ERROR("Mismatch between number of analytical results for delta ("
988 << analyticalResultsDelta.size() << ") and sensitivity results (" << foundDeltas << ")");
989 BOOST_TEST_MESSAGE("Checked " << foundDeltas << " deltas against analytical values (and " << zeroDeltas
990 << " deal-unrelated deltas for zero).");
991
992 // check gammas
993 BOOST_TEST_MESSAGE("Checking gammas...");
994 Size foundGammas = 0, zeroGammas = 0;
995 for (auto const& x : gammaMap) {
996 string key = x.first.first + " " + x.first.second;
997 Real scaledResult = x.second / (shiftSize * shiftSize);
998 if (analyticalResultsGamma.count(key) > 0) {
999 if (!check(analyticalResultsGamma.at(key), scaledResult))
1000 BOOST_ERROR("Sensitivity analysis result " << key << " (" << scaledResult
1001 << ") could not be verified against analytic result ("
1002 << analyticalResultsGamma.at(key) << ")");
1003 ++foundGammas;
1004 } else {
1005 // the sensi framework produces a Vomma, which we don't check (it isn't produced by the analytic sensi
1006 // engine)
1007 if (!close_enough(x.second, 0.0) && key != "5_Swaption_EUR SwaptionVolatility/EUR/47/10Y/10Y/ATM" &&
1008 key != "7_FxOption_EUR_USD FXVolatility/EURUSD/0/5Y/ATM")
1009 BOOST_ERROR("Sensitivity analysis result " << key << " (" << scaledResult << ") expected to be zero");
1010 ++zeroGammas;
1011 }
1012 }
1013 if (foundGammas != analyticalResultsGamma.size())
1014 BOOST_ERROR("Mismatch between number of analytical results for gamma ("
1015 << analyticalResultsGamma.size() << ") and sensitivity results (" << foundGammas << ")");
1016 BOOST_TEST_MESSAGE("Checked " << foundGammas << " gammas against analytical values (and " << zeroGammas
1017 << " deal-unrelated gammas for zero).");
1018
1019 // check cross gammas
1020 BOOST_TEST_MESSAGE("Checking cross-gammas...");
1021 Size foundCrossGammas = 0, zeroCrossGammas = 0;
1022 for (const auto& [tradeId, _] : portfolio->trades()) {
1023 for (auto const& s : scenDesc) {
1024 if (s.type() == ShiftScenarioGenerator::ScenarioDescription::Type::Cross) {
1025 string key = tradeId + " " + s.factor1() + " " + s.factor2();
1026 Real crossGamma = sa->sensiCube()->crossGamma(tradeId, make_pair(s.key1(), s.key2()));
1027 Real scaledResult = crossGamma / (shiftSize * shiftSize);
1028 // BOOST_TEST_MESSAGE(key << " " << scaledResult); // debug
1029 if (analyticalResultsCrossGamma.count(key) > 0) {
1030 if (!check(analyticalResultsCrossGamma.at(key), scaledResult))
1031 BOOST_ERROR("Sensitivity analysis result "
1032 << key << " (" << scaledResult
1033 << ") could not be verified against analytic result ("
1034 << analyticalResultsCrossGamma.at(key) << ")");
1035 ++foundCrossGammas;
1036 } else {
1037 if (!check(crossGamma, 0.0))
1038 BOOST_ERROR("Sensitivity analysis result " << key << " (" << crossGamma
1039 << ") expected to be zero");
1040 ++zeroCrossGammas;
1041 }
1042 }
1043 }
1044 }
1045 if (foundCrossGammas != analyticalResultsCrossGamma.size())
1046 BOOST_ERROR("Mismatch between number of analytical results for gamma ("
1047 << analyticalResultsCrossGamma.size() << ") and sensitivity results (" << foundCrossGammas << ")");
1048 BOOST_TEST_MESSAGE("Checked " << foundCrossGammas << " cross gammas against analytical values (and "
1049 << zeroCrossGammas << " deal-unrelated cross gammas for zero).");
1050
1051 // debug: dump analytical cross gamma results
1052 // for(auto const& x: analyticalResultsCrossGamma) {
1053 // BOOST_TEST_MESSAGE(x.first << " " << x.second);
1054 // }
1055
1056 ObservationMode::instance().setMode(backupMode);
1057 IndexManager::instance().clearHistories();
1058
1059 BOOST_CHECK(true);
1060}
1061
1062BOOST_AUTO_TEST_SUITE_END()
1063
1064BOOST_AUTO_TEST_SUITE_END()
static const string defaultConfiguration
OREAnalytics Top level fixture.
Simple flat market setup to be used in the test suite.
Definition: testmarket.hpp:64
factory class for cloning a cached scenario
Class that wraps a sensitivity stream and filters out negligible records.
A cube implementation that stores the cube in memory.
data
Filter close_enough(const RandomVariable &x, const RandomVariable &y)
QuantLib::ext::shared_ptr< Trade > buildFxOption(string id, string longShort, string putCall, Size expiry, string boughtCcy, Real boughtAmount, string soldCcy, Real soldAmount, Real premium, string premiumCcy, string premiumDate)
QuantLib::ext::shared_ptr< Trade > buildSwap(string id, string ccy, bool isPayer, Real notional, int start, Size term, Real rate, Real spread, string fixedFreq, string fixedDC, string floatFreq, string floatDC, string index, Calendar calendar, Natural spotDays, bool spotStartLag)
QuantLib::ext::shared_ptr< Trade > buildEuropeanSwaption(string id, string longShort, string ccy, bool isPayer, Real notional, int start, Size term, Real rate, Real spread, string fixedFreq, string fixedDC, string floatFreq, string floatDC, string index, string cashPhysical, Real premium, string premiumCcy, string premiumDate)
The base NPV cube class.
Singleton class to hold global Observation Mode.
Fixture that can be used at top level of OREAnalytics test suites.
Perform parametric var calculation for a given portfolio.
risk class and type filter
A Market class that can be updated by Scenarios.
A class to hold Scenario parameters for scenarioSimMarket.
Class for aggregating SensitivityRecords.
Perform sensitivity analysis for a given portfolio.
BOOST_AUTO_TEST_CASE(testSensitivities)
Class for streaming SensitivityRecords from a SensitivityCube.
Class for streaming SensitivityRecords from file.
Class for streaming SensitivityRecords from in-memory container.
Struct for holding a sensitivity record.
Sensitivity scenario generation.
Base class for sensitivity record streamer.
perform a stress testing analysis for a given portfolio.
QuantLib::ext::shared_ptr< SensitivityScenarioData > setupSensitivityScenarioData5(bool parConversion)
QuantLib::ext::shared_ptr< analytics::ScenarioSimMarketParameters > setupSimMarketData5()
The counterparty cube calculator interface.
The cube valuation core.