@@ -150,7 +150,6 @@ std::vector<SensitivityRecord> DecomposedSensitivityStream::decomposeEquityRisk(
150150 auto indexRefDatum = boost::dynamic_pointer_cast<ore::data::IndexReferenceDatum>(refDatum);
151151 auto decompResults = decomposeIndex (sr.delta , indexRefDatum, ore::data::CurveSpec::CurveType::Equity);
152152 scaleFxRisk (decompResults.fxRisk , indexName);
153- convertFxRiskToBaseCurrency (decompResults.fxRisk , indexCurrency);
154153 return createDecompositionRecords (
155154 decompResults.equityDelta , decompResults.fxRisk , decompResults.indexCurrency , sr);
156155 } else {
@@ -207,7 +206,6 @@ DecomposedSensitivityStream::decomposeCurrencyHedgedIndexRisk(const SensitivityR
207206 decompResults.fxRisk [ccy] = decompResults.fxRisk [ccy] - fxRisk * fxRiskShiftSize (ccy, baseCurrency_, ssd_);
208207 }
209208 // Convert into the correct currency
210- convertFxRiskToBaseCurrency (decompResults.fxRisk , indexCurrency);
211209 return createDecompositionRecords (decompResults.equityDelta , decompResults.fxRisk ,
212210 indexCurrency, sr);
213211 } else {
@@ -229,7 +227,6 @@ std::vector<SensitivityRecord> DecomposedSensitivityStream::decomposeCommodityRi
229227 auto decompResults = decomposeIndex (sr.delta , indexRefDatum, ore::data::CurveSpec::CurveType::Commodity);
230228 scaleFxRisk (decompResults.fxRisk , indexName);
231229 auto indexCurrency = curveCurrency (indexName, ore::data::CurveSpec::CurveType::Commodity);
232- convertFxRiskToBaseCurrency (decompResults.fxRisk , indexCurrency);
233230 return createDecompositionRecords (
234231 decompResults.equityDelta , decompResults.fxRisk , decompResults.indexCurrency , sr);
235232 } else {
@@ -293,7 +290,7 @@ std::vector<SensitivityRecord> DecomposedSensitivityStream::createDecompositionR
293290 }
294291 // Add aggregated FX Deltas
295292 for (auto [ccy, delta] : fxDeltas) {
296- if (ccy != indexCurrency) {
293+ if (ccy != indexCurrency && ccy != baseCurrency_ ) {
297294 RiskFactorKey underlyingKey (RiskFactorKey::KeyType::FXSpot, ccy + baseCurrency_, 0 );
298295 records.push_back (SensitivityRecord (sr.tradeId , sr.isPar , underlyingKey, sr.desc_1 , sr.shift_1 ,
299296 RiskFactorKey (), " " , sr.shift_2 , sr.currency , sr.baseNpv , delta, 0.0 ));
@@ -311,15 +308,6 @@ void DecomposedSensitivityStream::scaleFxRisk(std::map<std::string, double>& fxR
311308 }
312309}
313310
314- void DecomposedSensitivityStream::convertFxRiskToBaseCurrency (std::map<std::string, double >& fxRisk,
315- const std::string& indexCurrency) const {
316- // Eq/Comm Shift to FX Shift Conversion
317- auto fxSpot = todaysMarket_->fxSpot (indexCurrency + baseCurrency_)->value ();
318- for (auto & [ccy, fxdelta] : fxRisk) {
319- fxdelta *= fxSpot;
320- }
321- }
322-
323311std::string DecomposedSensitivityStream::curveCurrency (const std::string& name,
324312 ore::data::CurveSpec::CurveType curveType) const {
325313 std::string curveCurrency;
0 commit comments