@@ -76,6 +76,12 @@ std::vector<SensitivityRecord> DecomposedSensitivityStream::decompose(const Sens
7676 refDataManager_ != nullptr &&
7777 refDataManager_->hasData (" CommodityIndex" , record.key_1 .name );
7878
79+ if (isEquitySpotSensi && refDataManager_->hasData (" Equity" , record.key_1 .name )) {
80+ auto eqRefData = QuantLib::ext::dynamic_pointer_cast<ore::data::EquityReferenceDatum>(
81+ refDataManager_->getData (" Equity" , record.key_1 .name ));
82+ isEquitySpotSensi = eqRefData->equityData ().isIndex ;
83+ }
84+
7985 try {
8086 if (tradeMarkedForDecompositionDefaultRisk && isSurvivalProbSensi && isNotCrossGamma) {
8187 return decomposeSurvivalProbability (record);
@@ -91,7 +97,7 @@ std::vector<SensitivityRecord> DecomposedSensitivityStream::decompose(const Sens
9197 indexDecomposition (record.delta , record.key_1 .name , ore::data::CurveSpec::CurveType::Commodity);
9298 return sensitivityRecords (decompResults.spotRisk , decompResults.fxRisk , decompResults.indexCurrency ,
9399 record);
94- } else if (tradeMarkedForDecomposition && (isCommoditySpotSensi || isEquitySpotSensi) && isNotCrossGamma) {
100+ } else if (tradeMarkedForDecomposition && (isCommoditySpotSensi || isEquitySpotSensi ) && isNotCrossGamma) {
95101 auto subFields = std::map<std::string, std::string>({{" tradeId" , record.tradeId }});
96102 StructuredAnalyticsErrorMessage (
97103 " Sensitivity Decomposition" , " Index decomposition failed" ,
0 commit comments