Skip to content

Commit 0aedbe5

Browse files
committed
Merge branch 'feature/QPR-13799' into 'master'
QPR-13799 Correlation: Allow portfolio to be different from scenario Closes QPR-13799 See merge request qs/oreplus!3179
2 parents 42cc3af + 39772a1 commit 0aedbe5

3 files changed

Lines changed: 10 additions & 4 deletions

File tree

OREAnalytics/orea/engine/correlationreport.cpp

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,12 +35,15 @@ void CorrelationReport::calculate(const ext::shared_ptr<Report>& report) {
3535
ext::shared_ptr<Scenario> sc = hisScenGen_->next(hisScenGen_->baseScenario()->asof());
3636
std::vector<RiskFactorKey> deltaKeys = sc->keys();
3737

38+
// Discrepancy between scenario risk factors and shift risk factors
39+
bool supressError = true;
40+
3841
ext::shared_ptr<NPVCube>cube;
3942
ext::shared_ptr<CovarianceCalculator> covCalculator;
4043
covCalculator = ext::make_shared<CovarianceCalculator>(covariancePeriod());
4144

4245
sensiPnlCalculator_ = ext::make_shared<HistoricalSensiPnlCalculator>(hisScenGen_, nullptr);
43-
sensiPnlCalculator_->populateSensiShifts(cube, deltaKeys, shiftCalc_);
46+
sensiPnlCalculator_->populateSensiShifts(cube, deltaKeys, shiftCalc_, supressError);
4447
sensiPnlCalculator_->calculateSensiPnl({}, deltaKeys, cube, pnlCalculators_, covCalculator, {},
4548
false, false, false);
4649

OREAnalytics/orea/engine/historicalsensipnlcalculator.cpp

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -173,7 +173,7 @@ void PNLCalculator::populateRiskFactorTradePNLs(const RiskFactorTradePnLStore& a
173173
}
174174

175175
void HistoricalSensiPnlCalculator::populateSensiShifts(QuantLib::ext::shared_ptr<NPVCube>& cube, const vector<RiskFactorKey>& keys,
176-
ext::shared_ptr<ScenarioShiftCalculator> shiftCalculator) {
176+
ext::shared_ptr<ScenarioShiftCalculator> shiftCalculator, const bool& supressError) {
177177

178178
hisScenGen_->reset();
179179
QuantLib::ext::shared_ptr<Scenario> baseScenario = hisScenGen_->baseScenario();
@@ -200,11 +200,13 @@ void HistoricalSensiPnlCalculator::populateSensiShifts(QuantLib::ext::shared_ptr
200200
Real shift = shiftCalculator->shift(key, *baseScenario, *scenario, isPar);
201201
cube->set(shift, j, 0, i);
202202
} catch (const std::exception& e) {
203-
StructuredAnalyticsErrorMessage(
203+
if(!supressError){
204+
StructuredAnalyticsErrorMessage(
204205
"HistocialSensiPnlCalculator",
205206
"Shift calculation failed. Check consistency of simulation and sensi config.",
206207
"Error retrieving sensi key '" + ore::data::to_string(key) + "' from ssm scenario: '" + e.what())
207208
.log();
209+
}
208210
}
209211
j++;
210212
}

OREAnalytics/orea/engine/historicalsensipnlcalculator.hpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -118,7 +118,8 @@ class HistoricalSensiPnlCalculator {
118118
: hisScenGen_(hisScenGen), sensitivityStream_(ss) {}
119119

120120
void populateSensiShifts(QuantLib::ext::shared_ptr<NPVCube>& cube, const vector<RiskFactorKey>& keys,
121-
QuantLib::ext::shared_ptr<ScenarioShiftCalculator> shiftCalculator);
121+
QuantLib::ext::shared_ptr<ScenarioShiftCalculator> shiftCalculator,
122+
const bool& supressError = false);
122123

123124
void calculateSensiPnl(const std::set<SensitivityRecord>& srs,
124125
const std::vector<RiskFactorKey>& rfKeys,

0 commit comments

Comments
 (0)