Skip to content

Commit c1ccc19

Browse files
committed
Merge branch 'feature/QPR-13781' into 'master'
QPR-13781 option to allow simm exempt trades in CRIF calculation Closes QPR-13781 See merge request qs/oreplus!3157
2 parents 2f639b7 + b13f246 commit c1ccc19

2 files changed

Lines changed: 19 additions & 9 deletions

File tree

OREAnalytics/orea/app/analytics/crifanalytic.cpp

Lines changed: 16 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -171,7 +171,10 @@ void CrifAnalyticImpl::setUpConfigurations() {
171171
QL_REQUIRE(analytic()->configurations().simMarketParams, "CrifAnalytic: simMarketParams not set");
172172
QL_REQUIRE(analytic()->configurations().sensiScenarioData, "CrifAnalytic: sensiScenarioData not set");
173173
QL_REQUIRE(analytic()->configurations().todaysMarketParams, "CrifAnalytic: todaysMarketParams not set");
174-
174+
175+
inputs_->loadParameter<bool>(applySimmExemptions_, "crif", "applySimmExemptions", false,
176+
std::function<bool(const string&)>(parseBool));
177+
175178
setGenerateAdditionalResults(true);
176179
}
177180

@@ -208,15 +211,19 @@ void CrifAnalyticImpl::runAnalytic(const QuantLib::ext::shared_ptr<ore::data::In
208211
analytic()->addReport(LABEL, "npv_no_simm_exemptions", npvWithoutReport);
209212

210213
std::set<std::string> removedTrades, modifiedTrades;
211-
analytic()->startTimer("applySimmExemptions()");
212-
try {
213-
std::tie(removedTrades, modifiedTrades) =
214-
applySimmExemptions(*analytic()->portfolio(), engineFactory(), crifAnalytic->simmExemptionOverrides(),
215-
inputs_->useAtParCouponsTrades());
216-
} catch (std::exception& e) {
217-
QL_FAIL(e.what());
214+
if (applySimmExemptions_) {
215+
analytic()->startTimer("applySimmExemptions()");
216+
try {
217+
std::tie(removedTrades, modifiedTrades) =
218+
applySimmExemptions(*analytic()->portfolio(), engineFactory(), crifAnalytic->simmExemptionOverrides(),
219+
inputs_->useAtParCouponsTrades());
220+
} catch (std::exception& e) {
221+
QL_FAIL(e.what());
222+
}
223+
analytic()->stopTimer("applySimmExemptions()");
224+
} else {
225+
WLOG("Skipping application of SIMM exemptions as applySimmExemptions is set to false");
218226
}
219-
analytic()->stopTimer("applySimmExemptions()");
220227

221228
// If we have an empty portfolio, then quit the CRIF analytic
222229
if (analytic()->portfolio()->size() == 0) {

OREAnalytics/orea/app/analytics/crifanalytic.hpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,9 @@ class CrifAnalyticImpl : public Analytic::Impl {
4545
void runAnalytic(const QuantLib::ext::shared_ptr<ore::data::InMemoryLoader>& loader,
4646
const std::set<std::string>& runTypes = {}) override;
4747
void setUpConfigurations() override;
48+
49+
private:
50+
bool applySimmExemptions_ = true;
4851
};
4952

5053

0 commit comments

Comments
 (0)