Skip to content

Commit b68d198

Browse files
mgronckijenkins
authored andcommitted
QPR-12173 Code cleanup & bugfix
1 parent ed6f164 commit b68d198

1 file changed

Lines changed: 15 additions & 14 deletions

File tree

OREAnalytics/orea/engine/decomposedsensitivitystream.cpp

Lines changed: 15 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -59,38 +59,39 @@ SensitivityRecord DecomposedSensitivityStream::next() {
5959
std::vector<SensitivityRecord> DecomposedSensitivityStream::decompose(const SensitivityRecord& record) const {
6060
std::vector<SensitivityRecord> results;
6161

62-
bool tradeIdValidSurvival =
62+
bool tradeMarkedForDecompositionDefaultRisk =
6363
defaultRiskDecompositionWeights_.find(record.tradeId) != defaultRiskDecompositionWeights_.end();
64-
bool tradeIdValid = eqComDecompositionTradeIds_.find(record.tradeId) != eqComDecompositionTradeIds_.end();
64+
bool tradeMarkedForDecomposition =
65+
eqComDecompositionTradeIds_.find(record.tradeId) != eqComDecompositionTradeIds_.end();
6566
bool isNotCrossGamma = record.isCrossGamma() == false;
6667
bool isSurvivalProbSensi = record.key_1.keytype == RiskFactorKey::KeyType::SurvivalProbability;
6768
bool isEquitySpotSensi = record.key_1.keytype == RiskFactorKey::KeyType::EquitySpot;
6869
bool isCommoditySpotSensi = record.key_1.keytype == RiskFactorKey::KeyType::CommodityCurve;
6970

70-
bool hasEquityIndexRefData =
71-
refDataManager_ != nullptr && refDataManager_->hasData("EquityIndex", record.key_1.name);
72-
bool hasCurrencyHedgedIndexRefData =
73-
refDataManager_ != nullptr && refDataManager_->hasData("CurrencyHedgedEquityIndex", record.key_1.name);
74-
bool hasCommodityRefData =
75-
refDataManager_ != nullptr && refDataManager_->hasData("CommodityIndex", record.key_1.name);
71+
bool decomposeEquitySpot = tradeMarkedForDecomposition && isEquitySpotSensi && refDataManager_ != nullptr &&
72+
refDataManager_->hasData("EquityIndex", record.key_1.name);
73+
bool decomposeCurrencyHedgedSpot = tradeMarkedForDecomposition && isEquitySpotSensi && refDataManager_ != nullptr &&
74+
refDataManager_->hasData("CurrencyHedgedEquityIndex", record.key_1.name);
75+
bool decomposeCommoditySpot = tradeMarkedForDecomposition && (isCommoditySpotSensi || isEquitySpotSensi) &&
76+
refDataManager_ != nullptr &&
77+
refDataManager_->hasData("CommodityIndex", record.key_1.name);
7678

7779
try {
78-
if (isSurvivalProbSensi && tradeIdValidSurvival && isNotCrossGamma) {
80+
if (tradeMarkedForDecompositionDefaultRisk && isSurvivalProbSensi && isNotCrossGamma) {
7981
return decomposeSurvivalProbability(record);
80-
} else if (isEquitySpotSensi && tradeIdValid && hasEquityIndexRefData && isNotCrossGamma) {
82+
} else if (decomposeEquitySpot && isNotCrossGamma) {
8183
auto decompResults =
8284
indexDecomposition(record.delta, record.key_1.name, ore::data::CurveSpec::CurveType::Equity);
8385
return sensitivityRecords(decompResults.spotRisk, decompResults.fxRisk, decompResults.indexCurrency,
8486
record);
85-
} else if (isEquitySpotSensi && tradeIdValid && hasCurrencyHedgedIndexRefData && isNotCrossGamma) {
87+
} else if (decomposeCurrencyHedgedSpot && isNotCrossGamma) {
8688
return decomposeCurrencyHedgedIndexRisk(record);
87-
} else if ((isEquitySpotSensi || isCommoditySpotSensi) && tradeIdValid && hasCommodityRefData &&
88-
isNotCrossGamma) {
89+
} else if (decomposeCommoditySpot && isNotCrossGamma) {
8990
auto decompResults =
9091
indexDecomposition(record.delta, record.key_1.name, ore::data::CurveSpec::CurveType::Commodity);
9192
return sensitivityRecords(decompResults.spotRisk, decompResults.fxRisk, decompResults.indexCurrency,
9293
record);
93-
} else if ((isEquitySpotSensi || isCommoditySpotSensi) && tradeIdValid && isNotCrossGamma) {
94+
} else if (tradeMarkedForDecomposition && (isCommoditySpotSensi || isEquitySpotSensi) && isNotCrossGamma) {
9495
auto subFields = std::map<std::string, std::string>({{"tradeId", record.tradeId}});
9596
StructuredAnalyticsErrorMessage(
9697
"Sensitivity Decomposition", "Index decomposition failed",

0 commit comments

Comments
 (0)