Skip to content

Commit 5804ba2

Browse files
committed
Allow customization of Csv and SIMM intermediate reports in master input file
1 parent d2e1ae6 commit 5804ba2

5 files changed

Lines changed: 22 additions & 2 deletions

File tree

Examples/Example_44/ExpectedOutput/SIMM2.6_10D/simm.csv

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
#Portfolio,ProductClass,RiskClass,MarginType,Bucket,SimmSide,Regulation,InitialMargin,Currency,CalculationCurrency
1+
Portfolio,ProductClass,RiskClass,MarginType,Bucket,SimmSide,Regulation,InitialMargin,Currency,CalculationCurrency
22
CRIF_20191230,RatesFX,InterestRate,Delta,All,Call,ESA,811888.16,USD,USD
33
CRIF_20191230,RatesFX,InterestRate,Delta,USD,Call,ESA,811888.16,USD,USD
44
CRIF_20191230,RatesFX,InterestRate,Vega,All,Call,ESA,210187.75,USD,USD

Examples/Example_44/Input/ore_SIMM2.6_10D.xml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
<Parameter name="pricingEnginesFile">../../Input/pricingengine.xml</Parameter>
1616
<Parameter name="portfolioFile"></Parameter>
1717
<Parameter name="observationModel">None</Parameter>
18+
<Parameter name="csvCommentReportHeader">N</Parameter>
1819
</Setup>
1920
<Markets>
2021
<Parameter name="lgmcalibration">default</Parameter>
@@ -30,6 +31,7 @@
3031
<Parameter name="crif">crif.csv</Parameter>
3132
<Parameter name="calculationCurrency">USD</Parameter>
3233
<Parameter name="enforceIMRegulations">Y</Parameter>
34+
<Parameter name="writeIntermediateReports">N</Parameter>
3335
<Parameter name="mporDays">10</Parameter>
3436
</Analytic>
3537
</Analytics>

OREAnalytics/orea/app/analytics/simmanalytic.hpp

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,9 @@ class SimmAnalytic : public Analytic {
4646
const bool determineWinningRegulations = true)
4747
: Analytic(std::make_unique<SimmAnalyticImpl>(inputs), {"SIMM"}, inputs, false, false, false, false),
4848
hasNettingSetDetails_(hasNettingSetDetails),
49-
determineWinningRegulations_(determineWinningRegulations) {}
49+
determineWinningRegulations_(determineWinningRegulations) {
50+
setWriteIntermediateReports(inputs->writeSimmIntermediateReports());
51+
}
5052

5153
const boost::shared_ptr<SimmNetSensitivities>& crifRecords() const { return crifRecords_; }
5254
bool hasNettingSetDetails() { return hasNettingSetDetails_; }

OREAnalytics/orea/app/inputparameters.hpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -285,6 +285,7 @@ class InputParameters {
285285
void setSimmResultCurrency(const std::string& s) { simmResultCurrency_ = s; }
286286
void setSimmReportingCurrency(const std::string& s) { simmReportingCurrency_ = s; }
287287
void setEnforceIMRegulations(bool b) { enforceIMRegulations_= b; }
288+
void setWriteSimmIntermediateReports(bool b) { writeSimmIntermediateReports_ = b; }
288289

289290
// Setters for ZeroToParSensiConversion
290291
void setParConversionXbsParConversion(bool b) { parConversionXbsParConversion_ = b; }
@@ -534,6 +535,7 @@ class InputParameters {
534535
const std::string& simmResultCurrency() { return simmResultCurrency_; }
535536
const std::string& simmReportingCurrency() { return simmReportingCurrency_; }
536537
bool enforceIMRegulations() { return enforceIMRegulations_; }
538+
bool writeSimmIntermediateReports() { return writeSimmIntermediateReports_; }
537539

538540
/**************************************************
539541
* Getters for Zero to Par Sensi conversion
@@ -776,6 +778,7 @@ class InputParameters {
776778
std::string simmReportingCurrency_ = "";
777779
bool enforceIMRegulations_ = false;
778780
bool useSimmParameters_ = true;
781+
bool writeSimmIntermediateReports_ = true;
779782

780783
/***************
781784
* Zero to Par Conversion analytic

OREAnalytics/orea/app/oreapp.cpp

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -635,6 +635,15 @@ void OREApp::buildInputParameters(boost::shared_ptr<InputParameters> inputs,
635635
LOG("MarketContext::" << m.first << " = " << m.second);
636636
}
637637

638+
if (params_->has("setup", "csvCommentReportHeader"))
639+
inputs->setCsvCommentCharacter(parseBool(params_->get("setup", "csvCommentReportHeader")));
640+
641+
if (params_->has("setup", "csvSeparator")) {
642+
tmp = params_->get("setup", "csvSeparator");
643+
QL_REQUIRE(tmp.size() == 1, "csvSeparator must be exactly one character");
644+
inputs->setCsvSeparator(tmp[0]);
645+
}
646+
638647
/*************
639648
* NPV
640649
*************/
@@ -873,6 +882,10 @@ void OREApp::buildInputParameters(boost::shared_ptr<InputParameters> inputs,
873882
tmp = params_->get("simm", "enforceIMRegulations", false);
874883
if (tmp != "")
875884
inputs->setEnforceIMRegulations(parseBool(tmp));
885+
886+
tmp = params_->get("simm", "writeIntermediateReports", false);
887+
if (tmp != "")
888+
inputs->setWriteSimmIntermediateReports(parseBool(tmp));
876889
}
877890

878891
/************

0 commit comments

Comments
 (0)