- This topic has 3 replies, 2 voices, and was last updated 3 years, 6 months ago by Anonymous.
January 9, 2018 at 3:57 pm #6241AnonymousInactive
I’ve got a specific problem with calculating the FVA for a USD based bank (we use the bank issued bond zero curve from bloomberg for this purpose):
In case the base currency for the xVA is EUR, this obviously leads to wrong results, as the ois curve here is EONIA (oisCurve = market_->discountCurve(baseCurrency_, configuration_) in postprocess.cpp and <DiscountingCurve currency=”EUR”>Yield/EUR/EUR1D</DiscountingCurve>)
Now, I’ve tried to set the base currency of the xVA calculation to USD (which is reasonable enough), that leads to the error “Aggregation and XVA Reports… Error: scenario data does not provide FX rates for EURUSD” coming from QL_REQUIRE(scenarioData_->has(AggregationScenarioDataType::FXSpot, netting->csaCurrency()),”scenario data does not provide FX rates for ” << csaFxPair); in postprocess.cpp 596
So, as I don’t want to change the base currency of the simulation, which would be really onerous, I need to find a way to add EURUSD to the simulation. I tried to add an FXRates section including <CurrencyPair>EURUSD</CurrencyPair> to simulation.xml/Market (furthermore CurrencyPairs USDEUR, GBPEUR, JPYEUR, CADEUR and CHFEUR as this seems to replace the automatic FXRate CurrencyPair creation done for the currencies during FX volatility simulation creation -> Unable to build FXQuote for ccy pair <2ndCcypair>, e.g CHFEUR), however that results in
“Error: mismatch between scenario and sim data size, exit” coming from scenariosimmarket.cpp:1011 (mismatch between scenario and sim data size, 161 vs 162 … Key FXSpot/EURUSD/0 missing in scenario)
If I just add the currency pairs that are implicitly created otherwise, there is no “Unable to build FXQuote for ccy pair ..” error, however I also don’t get the EURUSD quotes in the simulations…
Actually a simple inversion of the USDEUR quote would be sufficient in that case, however I’m not sure how that might fit in.
RolandJanuary 9, 2018 at 4:21 pm #6242AnonymousInactive
Internally, ORE takes care of any FX inversion it needs for pricing, there is no FX dominance table used. This means that sometimes you have to add market quotes for things like USDEUR, even though it is typically not quoted that way.
However, in your case for simulation, you will need the same currency in both the simulation setup (for the model) and the system base currency. This is very annoying and yes, it can be a bit tricky as some of the configuration needs to be reversed and your market data might need to be inverted. You will also need USD-based FX option quotes for the FX calibration, there is no way to avoid this I believe.
However once it is setup like this, it is allot easier to see what is going on.
Niall.January 9, 2018 at 4:45 pm #6243AnonymousInactive
OK I see. Would it be possible to pass the base curve for fva calculation somehow else?
Like overruling the oisCurve = market_->discountCurve(baseCurrency_, configuration_) call in postprocess.cpp?
And as a general suggestion. I’d remove those baseCurrency settings that really depend on the baseCurrency setting in the simulation/market section. Also the domesticCurrency settings in the CrossAssetModel and ForeignExchangeModels sections are actually redundant in that sense.
RolandJanuary 10, 2018 at 9:39 am #6244AnonymousInactive
We’ve discussed this now internally, there is actually a lot more to do than just replace the basecurrency in oisCurve = market_->discountCurve(baseCurrency_, configuration_) as the EPE is still in basecurrency.
A transformation of the borrowingCurve and lendingCurve to the basecurrency is needed, so the approach would involve at least the currency basis and other transformations as in https://arxiv.org/pdf/0905.2770.pdf (Two Curves, One Price, M. Bianchetti).
- You must be logged in to reply to this topic.