Logo
Fully annotated reference manual - version 1.8.12
Loading...
Searching...
No Matches
Public Types | Public Member Functions | Protected Member Functions | Protected Attributes | Private Member Functions | Private Attributes | List of all members
SimmConfigurationBase Class Reference

#include <orea/simm/simmconfigurationbase.hpp>

+ Inheritance diagram for SimmConfigurationBase:
+ Collaboration diagram for SimmConfigurationBase:

Public Types

typedef std::map< std::tuple< std::string, std::string, std::string >, QuantLib::Real > Amounts
 
- Public Types inherited from SimmConfiguration
enum class  SimmSide { Call , Post }
 Enum indicating the relevant side of the SIMM calculation. More...
 
enum class  RiskClass {
  InterestRate , CreditQualifying , CreditNonQualifying , Equity ,
  Commodity , FX , All
}
 
enum class  MarginType {
  Delta , Vega , Curvature , BaseCorr ,
  AdditionalIM , All
}
 
enum class  IMModel { Schedule , SIMM , SIMM_R , SIMM_P }
 
enum  Regulation {
  APRA , CFTC , ESA , FINMA ,
  KFSC , HKMA , JFSA , MAS ,
  OSFI , RBI , SEC , SEC_unseg ,
  USPR , NONREG , BACEN , SANT ,
  SFC , UK , AMFQ , Included ,
  Unspecified , Invalid
}
 SIMM regulators. More...
 

Public Member Functions

const std::string & name () const override
 Returns the SIMM configuration name. More...
 
const std::string & version () const override
 Returns the SIMM configuration version. More...
 
const QuantLib::ext::shared_ptr< SimmBucketMapper > & bucketMapper () const override
 Returns the SIMM bucket mapper used by the configuration. More...
 
bool hasBuckets (const CrifRecord::RiskType &rt) const override
 Return true if the SIMM risk type rt has buckets. More...
 
std::string bucket (const CrifRecord::RiskType &rt, const std::string &qualifier) const override
 
const bool checkValue (const std::string &, const std::vector< std::string > &) const
 
std::vector< std::string > buckets (const CrifRecord::RiskType &rt) const override
 
std::vector< std::string > labels1 (const CrifRecord::RiskType &rt) const override
 
std::vector< std::string > labels2 (const CrifRecord::RiskType &rt) const override
 
void addLabels2 (const CrifRecord::RiskType &rt, const std::string &label_2) override
 Add SIMM Label2 values under certain circumstances. More...
 
QuantLib::Real weight (const CrifRecord::RiskType &rt, boost::optional< std::string > qualifier=boost::none, boost::optional< std::string > label_1=boost::none, const std::string &calculationCurrency="") const override
 
QuantLib::Real curvatureWeight (const CrifRecord::RiskType &rt, const std::string &label_1) const override
 
QuantLib::Real historicalVolatilityRatio (const CrifRecord::RiskType &rt) const override
 
QuantLib::Real sigma (const CrifRecord::RiskType &rt, boost::optional< std::string > qualifier=boost::none, boost::optional< std::string > label_1=boost::none, const std::string &calculationCurrency="") const override
 
QuantLib::Real curvatureMarginScaling () const override
 
QuantLib::Real concentrationThreshold (const CrifRecord::RiskType &rt, const std::string &qualifier) const override
 
bool isValidRiskType (const CrifRecord::RiskType &rt) const override
 
QuantLib::Real correlationRiskClasses (const RiskClass &rc_1, const RiskClass &rc_2) const override
 Return the correlation between SIMM risk classes rc_1 and rc_2. More...
 
QuantLib::Real correlation (const CrifRecord::RiskType &firstRt, const std::string &firstQualifier, const std::string &firstLabel_1, const std::string &firstLabel_2, const CrifRecord::RiskType &secondRt, const std::string &secondQualifier, const std::string &secondLabel_1, const std::string &secondLabel_2, const std::string &calculationCurrency="") const override
 
QuantLib::Size mporDays () const
 MPOR in days. More...
 
- Public Member Functions inherited from SimmConfiguration
virtual ~SimmConfiguration ()
 
virtual std::vector< std::string > buckets (const CrifRecord::RiskType &rt) const =0
 
virtual bool hasBuckets (const CrifRecord::RiskType &rt) const =0
 Return true if the SIMM risk type rt has buckets. More...
 
bool hasBucketMapping (const CrifRecord::RiskType &rt, const std::string &qualifier) const override
 Return true if the SIMM risk type rt has buckets. More...
 
virtual std::vector< std::string > labels1 (const CrifRecord::RiskType &rt) const =0
 
virtual std::vector< std::string > labels2 (const CrifRecord::RiskType &rt) const =0
 
virtual void addLabels2 (const CrifRecord::RiskType &rt, const std::string &label_2)=0
 
virtual QuantLib::Real weight (const CrifRecord::RiskType &rt, boost::optional< std::string > qualifier=boost::none, boost::optional< std::string > label_1=boost::none, const std::string &calculationCurrency="") const =0
 
virtual QuantLib::Real curvatureWeight (const CrifRecord::RiskType &rt, const std::string &label_1) const =0
 
virtual QuantLib::Real historicalVolatilityRatio (const CrifRecord::RiskType &rt) const =0
 
virtual QuantLib::Real sigma (const CrifRecord::RiskType &rt, boost::optional< std::string > qualifier=boost::none, boost::optional< std::string > label_1=boost::none, const std::string &calculationCurrency="") const =0
 
virtual QuantLib::Real curvatureMarginScaling () const =0
 
virtual QuantLib::Real concentrationThreshold (const CrifRecord::RiskType &rt, const std::string &qualifier) const =0
 
virtual bool isValidRiskType (const CrifRecord::RiskType &rt) const =0
 
virtual QuantLib::Real correlationRiskClasses (const RiskClass &rc_1, const RiskClass &rc_2) const =0
 Return the correlation between SIMM risk classes rc_1 and rc_2. More...
 
virtual QuantLib::Real correlation (const CrifRecord::RiskType &firstRt, const std::string &firstQualifier, const std::string &firstLabel_1, const std::string &firstLabel_2, const CrifRecord::RiskType &secondRt, const std::string &secondQualifier, const std::string &secondLabel_1, const std::string &secondLabel_2, const std::string &calculationCurrency="") const =0
 
virtual bool isSimmConfigCalibration () const
 
- Public Member Functions inherited from CrifConfiguration
virtual ~CrifConfiguration ()
 
virtual const std::string & name () const =0
 Returns the SIMM configuration name. More...
 
virtual const std::string & version () const =0
 Returns the SIMM configuration version. More...
 
virtual std::string bucket (const ore::analytics::CrifRecord::RiskType &rt, const std::string &qualifier) const =0
 
virtual bool hasBucketMapping (const ore::analytics::CrifRecord::RiskType &rt, const std::string &qualifier) const =0
 
virtual const QuantLib::ext::shared_ptr< SimmBucketMapper > & bucketMapper () const =0
 Returns the SIMM bucket mapper used by the configuration. More...
 
virtual std::string label2 (const QuantLib::ext::shared_ptr< QuantLib::InterestRateIndex > &irIndex) const
 
virtual std::string label2 (const QuantLib::Period &p) const
 

Protected Member Functions

 SimmConfigurationBase (const QuantLib::ext::shared_ptr< SimmBucketMapper > &simmBucketMapper, const std::string &name, const std::string version, QuantLib::Size mporDays=10)
 Constructor taking the SIMM configuration name and version. More...
 
const std::tuple< std::string, std::string, std::string > makeKey (const std::string &, const std::string &, const std::string &) const
 
QuantLib::Size labelIndex (const std::string &label, const std::vector< std::string > &labels) const
 Helper method to find the index of the label in labels. More...
 
void addLabels2Impl (const CrifRecord::RiskType &rt, const std::string &label_2)
 A base implementation of addLabels2 that can be shared by derived classes. More...
 

Protected Attributes

std::string version_
 SIMM configuration version. More...
 
QuantLib::ext::shared_ptr< SimmBucketMappersimmBucketMapper_
 Used to map SIMM Qualifier names to SIMM bucket values. More...
 
QuantLib::ext::shared_ptr< SimmConcentrationsimmConcentration_
 Used to get the concentration thresholds for a given risk type and qualifier. More...
 
std::map< CrifRecord::RiskType, std::vector< std::string > > mapBuckets_
 
std::map< CrifRecord::RiskType, std::vector< std::string > > mapLabels_1_
 
std::map< CrifRecord::RiskType, std::vector< std::string > > mapLabels_2_
 
std::map< CrifRecord::RiskType, QuantLib::Real > rwRiskType_
 
std::map< CrifRecord::RiskType, AmountsrwBucket_
 
std::map< CrifRecord::RiskType, AmountsrwLabel_1_
 
std::map< CrifRecord::RiskType, std::vector< QuantLib::Real > > curvatureWeights_
 
std::map< CrifRecord::RiskType, QuantLib::Real > historicalVolatilityRatios_
 Map from risk type to a historical volatility ratio. More...
 
std::set< CrifRecord::RiskTypevalidRiskTypes_
 Set of valid risk types for the current configuration. More...
 
Amounts riskClassCorrelation_
 Risk class correlation matrix. More...
 
std::map< CrifRecord::RiskType, AmountsinterBucketCorrelation_
 
std::map< CrifRecord::RiskType, AmountsintraBucketCorrelation_
 
QuantLib::Size mporDays_
 
Single Correlations

Single correlation numbers that don't fit in to a structure. They can be populated in derived classes and are requested in the base implementation of the correlation method.

QuantLib::Real xccyCorr_
 
QuantLib::Real infCorr_
 Correlation between any yield and inflation in same currency. More...
 
QuantLib::Real infVolCorr_
 Correlation between any yield volatility and inflation volatility in same currency. More...
 
QuantLib::Real irSubCurveCorr_
 IR Label2 level i.e. sub-curve correlation. More...
 
QuantLib::Real irInterCurrencyCorr_
 IR correlation across currencies. More...
 
QuantLib::Real crqResidualIntraCorr_
 Credit-Q residual intra correlation. More...
 
QuantLib::Real crqSameIntraCorr_
 Credit-Q non-residual intra correlation when same qualifier but different vertex/source. More...
 
QuantLib::Real crqDiffIntraCorr_
 Credit-Q non-residual intra correlation when different qualifier. More...
 
QuantLib::Real crnqResidualIntraCorr_
 Credit-NonQ residual intra correlation. More...
 
QuantLib::Real crnqSameIntraCorr_
 Credit-NonQ non-residual intra correlation when same underlying names. More...
 
QuantLib::Real crnqDiffIntraCorr_
 Credit-NonQ non-residual intra correlation when different underlying names. More...
 
QuantLib::Real crnqInterCorr_
 Credit-NonQ non-residual inter bucket correlation. More...
 
QuantLib::Real fxCorr_
 FX correlation. More...
 
QuantLib::Real basecorrCorr_
 Base correlation risk factor correlation. More...
 

Private Member Functions

QuantLib::Real sigmaMultiplier () const
 Calculate variable for use in sigma method. More...
 

Private Attributes

std::string name_
 Name of the SIMM configuration. More...
 

Additional Inherited Members

- Static Public Member Functions inherited from SimmConfiguration
static std::set< RiskClassriskClasses (bool includeAll=false)
 Give back a set containing the RiskClass values optionally excluding 'All'. More...
 
static std::set< CrifRecord::RiskTyperiskTypes (bool includeAll=false)
 Give back a set containing the RiskType values optionally excluding 'All'. More...
 
static std::set< MarginTypemarginTypes (bool includeAll=false)
 Give back a set containing the MarginType values optionally excluding 'All'. More...
 
static std::set< CrifRecord::ProductClassproductClasses (bool includeAll=false)
 Give back a set containing the ProductClass values optionally excluding 'All'. More...
 
static std::pair< CrifRecord::RiskType, CrifRecord::RiskTyperiskClassToRiskType (const RiskClass &rc)
 For a given risk class, return the corresponding risk types. More...
 
static RiskClass riskTypeToRiskClass (const CrifRecord::RiskType &rt)
 For a given rirsk type, return the corresponding risk class. More...
 
static bool less_than (const CrifRecord::ProductClass &lhs, const CrifRecord::ProductClass &rhs)
 Define ordering for ProductClass according to a waterfall: More...
 
static bool greater_than (const CrifRecord::ProductClass &lhs, const CrifRecord::ProductClass &rhs)
 
static bool less_than_or_equal_to (const CrifRecord::ProductClass &lhs, const CrifRecord::ProductClass &rhs)
 
static bool greater_than_or_equal_to (const CrifRecord::ProductClass &lhs, const CrifRecord::ProductClass &rhs)
 
static CrifRecord::ProductClass maxProductClass (CrifRecord::ProductClass pc1, CrifRecord::ProductClass pc2)
 Return the "worse" ProductClass using a waterfall logic: More...
 
- Static Protected Attributes inherited from SimmConfiguration
static const QuantLib::Size numberOfRiskClasses = riskClassMap.size()
 Number of risk classes including RiskClass::All. More...
 
static const QuantLib::Size numberOfMarginTypes = marginTypeMap.size()
 Number of margin types including MarginType::All. More...
 
static const QuantLib::Size numberOfRegulations = regulationsMap.size()
 Number of regulations. More...
 

Detailed Description

Definition at line 37 of file simmconfigurationbase.hpp.

Member Typedef Documentation

◆ Amounts

typedef std::map<std::tuple<std::string, std::string, std::string>, QuantLib::Real> Amounts

Definition at line 39 of file simmconfigurationbase.hpp.

Constructor & Destructor Documentation

◆ SimmConfigurationBase()

SimmConfigurationBase ( const QuantLib::ext::shared_ptr< SimmBucketMapper > &  simmBucketMapper,
const std::string &  name,
const std::string  version,
QuantLib::Size  mporDays = 10 
)
protected

Constructor taking the SIMM configuration name and version.

Definition at line 75 of file simmconfigurationbase.cpp.

77 : name_(name), version_(version), simmBucketMapper_(simmBucketMapper), mporDays_(mporDays) {}
std::string name_
Name of the SIMM configuration.
std::string version_
SIMM configuration version.
QuantLib::Size mporDays() const
MPOR in days.
const std::string & name() const override
Returns the SIMM configuration name.
const std::string & version() const override
Returns the SIMM configuration version.
QuantLib::ext::shared_ptr< SimmBucketMapper > simmBucketMapper_
Used to map SIMM Qualifier names to SIMM bucket values.

Member Function Documentation

◆ name()

const std::string & name ( ) const
overridevirtual

Returns the SIMM configuration name.

Implements CrifConfiguration.

Definition at line 42 of file simmconfigurationbase.hpp.

42{ return name_; }
+ Here is the caller graph for this function:

◆ version()

const std::string & version ( ) const
overridevirtual

Returns the SIMM configuration version.

Implements CrifConfiguration.

Definition at line 45 of file simmconfigurationbase.hpp.

45{ return version_; }

◆ bucketMapper()

const QuantLib::ext::shared_ptr< SimmBucketMapper > & bucketMapper ( ) const
overridevirtual

Returns the SIMM bucket mapper used by the configuration.

Implements CrifConfiguration.

Definition at line 48 of file simmconfigurationbase.hpp.

48{ return simmBucketMapper_; }

◆ hasBuckets()

bool hasBuckets ( const CrifRecord::RiskType rt) const
overridevirtual

Return true if the SIMM risk type rt has buckets.

Implements SimmConfiguration.

Definition at line 79 of file simmconfigurationbase.cpp.

79{ return simmBucketMapper_->hasBuckets(rt); }
+ Here is the caller graph for this function:

◆ bucket()

string bucket ( const CrifRecord::RiskType rt,
const std::string &  qualifier 
) const
overridevirtual

Return the SIMM bucket name for the given risk type rt and qualifier

Implements CrifConfiguration.

Definition at line 81 of file simmconfigurationbase.cpp.

81 {
82 QL_REQUIRE(hasBuckets(rt), "The SIMM risk type " << rt << " does not have buckets");
83 return simmBucketMapper_->bucket(rt, qualifier);
84}
bool hasBuckets(const CrifRecord::RiskType &rt) const override
Return true if the SIMM risk type rt has buckets.
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ checkValue()

const bool checkValue ( const std::string &  value,
const std::vector< std::string > &  container 
) const

Definition at line 86 of file simmconfigurationbase.cpp.

86 {
87 return std::find(container.begin(), container.end(), value) != container.end();
88}

◆ buckets()

vector< string > buckets ( const CrifRecord::RiskType rt) const
overridevirtual

Return the SIMM bucket names for the given risk type rt An empty vector is returned if the risk type has no buckets

Implements SimmConfiguration.

Definition at line 90 of file simmconfigurationbase.cpp.

90 {
91 QL_REQUIRE(isValidRiskType(rt),
92 "The risk type " << rt << " is not valid for SIMM configuration with name" << name_);
93 return lookup(rt, mapBuckets_);
94}
bool isValidRiskType(const CrifRecord::RiskType &rt) const override
std::map< CrifRecord::RiskType, std::vector< std::string > > mapBuckets_
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ labels1()

vector< string > labels1 ( const CrifRecord::RiskType rt) const
overridevirtual

Return the list of SIMM Label1 values for risk type rt An empty vector is returned if the risk type does not use Label1

Implements SimmConfiguration.

Definition at line 96 of file simmconfigurationbase.cpp.

96 {
97 QL_REQUIRE(isValidRiskType(rt),
98 "The risk type " << rt << " is not valid for SIMM configuration with name" << name_);
99 return lookup(rt, mapLabels_1_);
100}
std::map< CrifRecord::RiskType, std::vector< std::string > > mapLabels_1_
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ labels2()

vector< string > labels2 ( const CrifRecord::RiskType rt) const
overridevirtual

Return the list of SIMM Label2 values for risk type rt An empty vector is returned if the risk type does not use Label2

Implements SimmConfiguration.

Definition at line 102 of file simmconfigurationbase.cpp.

102 {
103 QL_REQUIRE(isValidRiskType(rt),
104 "The risk type " << rt << " is not valid for SIMM configuration with name" << name_);
105 return lookup(rt, mapLabels_2_);
106}
std::map< CrifRecord::RiskType, std::vector< std::string > > mapLabels_2_
+ Here is the call graph for this function:

◆ addLabels2()

void addLabels2 ( const CrifRecord::RiskType rt,
const std::string &  label_2 
)
overridevirtual

◆ weight()

QuantLib::Real weight ( const CrifRecord::RiskType rt,
boost::optional< std::string >  qualifier = boost::none,
boost::optional< std::string >  label_1 = boost::none,
const std::string &  calculationCurrency = "" 
) const
overridevirtual

Return the SIMM risk weight for the given risk type rt with the given qualifier and the given label_1. Three possibilities:

  1. there is a flat risk weight for the risk factor's RiskType so only need rt
  2. there is a qualifier-dependent risk weight for the risk factor's RiskType so need rt and qualifier
  3. there is a qualifier-dependent and label1-dependent risk weight for the risk factor's RiskType so need all three parameters

Implements SimmConfiguration.

Reimplemented in SimmConfigurationCalibration, SimmConfiguration_ISDA_V2_2, SimmConfiguration_ISDA_V2_3, SimmConfiguration_ISDA_V2_3_8, SimmConfiguration_ISDA_V2_5, SimmConfiguration_ISDA_V2_5A, and SimmConfiguration_ISDA_V2_6.

Definition at line 108 of file simmconfigurationbase.cpp.

109 {
110
111 QL_REQUIRE(isValidRiskType(rt),
112 "The risk type " << rt << " is not valid for SIMM configuration with name" << name_);
113
114 // If the risk type has flat risk weights, ignore last 2 parameters
115 if (rwRiskType_.count(rt) > 0) {
116 return rwRiskType_.at(rt);
117 }
118
119 // We now at least have bucket dependent risk weights so check qualifier and buckets
120 QL_REQUIRE(qualifier, "Need a valid qualifier to return a risk weight because the risk type "
121 << rt << " has bucket dependent risk weights");
122 QL_REQUIRE(!buckets(rt).empty(), "Could not find any buckets for risk type " << rt);
123 string bucket = simmBucketMapper_->bucket(rt, *qualifier);
124
125 // If risk weight for this risk type is bucket-dependent
126 if (rwBucket_.find(rt) != rwBucket_.end()) {
127 auto bucketKey = makeKey(bucket, "", "");
128 if (rwBucket_.at(rt).find(bucketKey) != rwBucket_.at(rt).end())
129 return rwBucket_.at(rt).at(bucketKey);
130 else
131 QL_FAIL("Could not find risk weight for risk type " << rt << " and key " << bucketKey);
132 }
133
134 // If we get to here, risk weight must depend on risk type, bucket and Label1
135 if (rwLabel_1_.find(rt) != rwLabel_1_.end()) {
136
137 QL_REQUIRE(label_1, "Need a valid Label1 value to return a risk weight because the risk type "
138 << rt << " has bucket and Label1 dependent risk weights");
139 QL_REQUIRE(!labels1(rt).empty(), "Could not find any Label1 values for risk type " << rt);
140 auto label1Key = makeKey(bucket, *label_1, "");
141
142 if (rwLabel_1_.at(rt).find(label1Key) != rwLabel_1_.at(rt).end())
143 return rwLabel_1_.at(rt).at(label1Key);
144 else
145 QL_FAIL("Could not find risk weight for risk type " << rt << " and key " << label1Key);
146 }
147
148 // If we get to here, we have failed to get a risk weight
149 QL_FAIL("Could not find a risk weight for (risk type, qualifier, Label1) = (" << rt << "," << qualifier << ","
150 << label_1 << ")");
151}
const std::tuple< std::string, std::string, std::string > makeKey(const std::string &, const std::string &, const std::string &) const
std::vector< std::string > buckets(const CrifRecord::RiskType &rt) const override
std::map< CrifRecord::RiskType, QuantLib::Real > rwRiskType_
std::map< CrifRecord::RiskType, Amounts > rwLabel_1_
std::vector< std::string > labels1(const CrifRecord::RiskType &rt) const override
std::string bucket(const CrifRecord::RiskType &rt, const std::string &qualifier) const override
std::map< CrifRecord::RiskType, Amounts > rwBucket_
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ curvatureWeight()

QuantLib::Real curvatureWeight ( const CrifRecord::RiskType rt,
const std::string &  label_1 
) const
overridevirtual

Gives back the value of the scaling function used in the calculation of curvature risk for the risk type rt with SIMM Label1 value label_1. The scaling function is:

\[ SF(t) = 0.5 \times \min \left(1, \frac{14}{t} \right) \]

where \(t\) is given in days.

Warning:
An error is thrown if there is no curvature from the risk type rt

Implements SimmConfiguration.

Definition at line 153 of file simmconfigurationbase.cpp.

153 {
154
155 QL_REQUIRE(isValidRiskType(rt),
156 "The risk type " << rt << " is not valid for SIMM configuration with name" << name_);
157
158 QL_REQUIRE(curvatureWeights_.count(rt) > 0, "The risk type " << rt << " does not have a curvature weight.");
159
160 QL_REQUIRE(!labels1(rt).empty(), "Could not find any Label1 values for risk type " << rt);
161 auto idx = labelIndex(label_1, labels1(rt));
162
163 return curvatureWeights_.at(rt)[idx];
164}
QuantLib::Size labelIndex(const std::string &label, const std::vector< std::string > &labels) const
Helper method to find the index of the label in labels.
std::map< CrifRecord::RiskType, std::vector< QuantLib::Real > > curvatureWeights_
+ Here is the call graph for this function:

◆ historicalVolatilityRatio()

Real historicalVolatilityRatio ( const CrifRecord::RiskType rt) const
overridevirtual

Give back the SIMM historical volatility ratio for the risk type rt

Remarks
1.0 is returned if there is no historical volatility ratio for rt

Implements SimmConfiguration.

Definition at line 166 of file simmconfigurationbase.cpp.

166 {
167 QL_REQUIRE(isValidRiskType(rt),
168 "The risk type " << rt << " is not valid for SIMM configuration with name" << name_);
169
170 if (historicalVolatilityRatios_.count(rt) > 0) {
171 return historicalVolatilityRatios_.at(rt);
172 } else {
173 return 1.0;
174 }
175}
std::map< CrifRecord::RiskType, QuantLib::Real > historicalVolatilityRatios_
Map from risk type to a historical volatility ratio.
+ Here is the call graph for this function:

◆ sigma()

Real sigma ( const CrifRecord::RiskType rt,
boost::optional< std::string >  qualifier = boost::none,
boost::optional< std::string >  label_1 = boost::none,
const std::string &  calculationCurrency = "" 
) const
overridevirtual

Give back the value of \(\sigma_{kj}\) from the SIMM docs for risk type rt. In general, rt is a volatility risk type and the method returns:

\[ \sigma_{kj} = \frac{RW_k \sqrt{\frac{365}{14}}}{\Phi^{-1}(0.99)} \]

where \(RW_k\) is the corresponding delta risk weight and \(\Phi(z)\) is the cumulative standard normal distribution.

Remarks
For convenience, returns 1.0 if not applicable for risk type rt

Implements SimmConfiguration.

Definition at line 177 of file simmconfigurationbase.cpp.

178 {
179
181
182 Real result = 1.0;
183 Real deltaRiskWeight;
184 std::string ccy1, ccy2;
185 switch (rt) {
186 case RiskType::CommodityVol:
187 deltaRiskWeight = weight(RiskType::Commodity, qualifier, label_1);
188 result = sigmaMultiplier * deltaRiskWeight;
189 break;
190 case RiskType::EquityVol:
191 deltaRiskWeight = weight(RiskType::Equity, qualifier, label_1);
192 result = sigmaMultiplier * deltaRiskWeight;
193 break;
194 case RiskType::FXVol:
195 /*For FX vega (which depends on a pair of currencies), the risk weight to use here is
196 the FX delta risk weight value. Before ISDA 2.2 this value is common for all currency pairs.
197 For ISDA 2.2 the FX delta is from the sensitivity table, given explicitly
198 in section I of the ISDA document, whose row is the FX volatility group of the first currency and
199 whose column is the FX volatility group of the second currency.
200 */
201 ccy1 = (*qualifier).substr(0, 3);
202 ccy2 = (*qualifier).substr(3, 3);
203 // make sure they parse as currencies
206 deltaRiskWeight = weight(RiskType::FX, ccy1, label_1, ccy2);
207 result = sigmaMultiplier * deltaRiskWeight;
208 break;
209 default:
210 break;
211 }
212
213 return result;
214}
QuantLib::Real weight(const CrifRecord::RiskType &rt, boost::optional< std::string > qualifier=boost::none, boost::optional< std::string > label_1=boost::none, const std::string &calculationCurrency="") const override
QuantLib::Real sigmaMultiplier() const
Calculate variable for use in sigma method.
Currency parseCurrency(const string &s)
+ Here is the call graph for this function:

◆ curvatureMarginScaling()

QuantLib::Real curvatureMarginScaling ( ) const
overridevirtual

◆ concentrationThreshold()

QuantLib::Real concentrationThreshold ( const CrifRecord::RiskType rt,
const std::string &  qualifier 
) const
overridevirtual

Give back the SIMM concentration threshold for the risk type rt and the SIMM qualifier

Implements SimmConfiguration.

Definition at line 125 of file simmconfigurationbase.hpp.

125 {
126 return simmConcentration_->threshold(rt, qualifier);
127 }
QuantLib::ext::shared_ptr< SimmConcentration > simmConcentration_
Used to get the concentration thresholds for a given risk type and qualifier.

◆ isValidRiskType()

bool isValidRiskType ( const CrifRecord::RiskType rt) const
overridevirtual

Return true if rt is a valid SIMM RiskType under the current configuration. Otherwise, return false.

Implements SimmConfiguration.

Definition at line 132 of file simmconfigurationbase.hpp.

132{ return validRiskTypes_.count(rt) > 0; }
std::set< CrifRecord::RiskType > validRiskTypes_
Set of valid risk types for the current configuration.
+ Here is the caller graph for this function:

◆ correlationRiskClasses()

QuantLib::Real correlationRiskClasses ( const RiskClass rc_1,
const RiskClass rc_2 
) const
overridevirtual

Return the correlation between SIMM risk classes rc_1 and rc_2.

Implements SimmConfiguration.

Definition at line 442 of file simmconfigurationbase.cpp.

442 {
443
444 if (rc_1 == rc_2)
445 return 1.0;
446
447 auto rcLabel12Key = makeKey("", ore::data::to_string(rc_1), ore::data::to_string(rc_2));
448
449 QL_REQUIRE(riskClassCorrelation_.find(rcLabel12Key) != riskClassCorrelation_.end(),
450 "Could not find risk class correlation between " << rc_1 << " and " << rc_2 << ".");
451
452 return riskClassCorrelation_.at(rcLabel12Key);
453}
Amounts riskClassCorrelation_
Risk class correlation matrix.
std::string to_string(const LocationInfo &l)
+ Here is the call graph for this function:

◆ correlation()

QuantLib::Real correlation ( const CrifRecord::RiskType firstRt,
const std::string &  firstQualifier,
const std::string &  firstLabel_1,
const std::string &  firstLabel_2,
const CrifRecord::RiskType secondRt,
const std::string &  secondQualifier,
const std::string &  secondLabel_1,
const std::string &  secondLabel_2,
const std::string &  calculationCurrency = "" 
) const
overridevirtual

Return the correlation between the firstQualifier with risk type firstRt, Label1 value of firstLabel_1 and Label2 value of firstLabel_2 and the secondQualifier with risk type secondRt, Label1 value of secondLabel_1 and Label2 value of secondLabel_2

Remarks
if not using firstLabel_1 and secondLabel_1, just enter an empty string for both. Similarly for firstLabel_2 and secondLabel_2.
Warning:
Returns 0 if no correlation found

Implements SimmConfiguration.

Reimplemented in SimmConfigurationCalibration, SimmConfiguration_ISDA_V2_2, SimmConfiguration_ISDA_V2_3, SimmConfiguration_ISDA_V2_3_8, SimmConfiguration_ISDA_V2_5, SimmConfiguration_ISDA_V2_5A, and SimmConfiguration_ISDA_V2_6.

Definition at line 216 of file simmconfigurationbase.cpp.

220 {
221
222 // First check that we have valid risk types for the configuration in question
223 QL_REQUIRE(isValidRiskType(firstRt),
224 "The risk type " << firstRt << " is not valid for SIMM configuration with name" << name());
225 QL_REQUIRE(isValidRiskType(secondRt),
226 "The risk type " << secondRt << " is not valid for SIMM configuration with name" << name());
227
228 // Deal with trivial case of everything equal
229 if (firstRt == secondRt && firstQualifier == secondQualifier && firstLabel_1 == secondLabel_1 &&
230 firstLabel_2 == secondLabel_2) {
231 return 1.0;
232 }
233
234 // Deal with Equity correlations
235 if ((firstRt == RiskType::Equity && secondRt == RiskType::Equity) ||
236 (firstRt == RiskType::EquityVol && secondRt == RiskType::EquityVol)) {
237
238 // Get the bucket of each qualifier
239 string bucket_1 = simmBucketMapper_->bucket(firstRt, firstQualifier);
240 string bucket_2 = simmBucketMapper_->bucket(secondRt, secondQualifier);
241
242 // Residual is special, 0 correlation inter and intra except if same qualifier
243 if (bucket_1 == "Residual" || bucket_2 == "Residual") {
244 return firstQualifier == secondQualifier ? 1.0 : 0.0;
245 }
246
247 // Non-residual
248 // Get the bucket index of each qualifier
249 if (bucket_1 == bucket_2) {
250 auto bucketKey = makeKey(bucket_1, "", "");
251 // If same bucket, return the intra-bucket correlation
252 return firstQualifier == secondQualifier ? 1.0 : intraBucketCorrelation_.at(RiskType::Equity).at(bucketKey);
253 } else {
254 // If different buckets, return the inter-bucket correlation
255 auto label12Key = makeKey("", bucket_1, bucket_2);
256 return interBucketCorrelation_.at(RiskType::Equity).at(label12Key);
257 }
258 }
259
260 // Deal with CreditQ correlations
261 if ((firstRt == RiskType::CreditQ && secondRt == RiskType::CreditQ) ||
262 (firstRt == RiskType::CreditVol && secondRt == RiskType::CreditVol)) {
263
264 // Get the bucket of each qualifier
265 string bucket_1 = simmBucketMapper_->bucket(firstRt, firstQualifier);
266 string bucket_2 = simmBucketMapper_->bucket(secondRt, secondQualifier);
267
268 // Residual is special
269 if (bucket_1 == "Residual" || bucket_2 == "Residual") {
270 if (bucket_1 == bucket_2) {
271 // Both Residual
273 } else {
274 // One is a residual bucket and the other is not
275 return 0.0;
276 }
277 }
278
279 // Non-residual
280 if (bucket_1 == bucket_2) {
281 // If same bucket
282 if (firstQualifier != secondQualifier) {
283 // If different qualifier (i.e. here issuer/seniority)
284 return crqDiffIntraCorr_;
285 } else {
286 // If same qualifier (i.e. here issuer/seniority)
287 return crqSameIntraCorr_;
288 }
289 } else {
290 // Get the bucket indices of each qualifier for reading the matrix
291 RiskType rt = RiskType::CreditQ;
292 auto label12Key = makeKey("", bucket_1, bucket_2);
293 if (interBucketCorrelation_.at(rt).find(label12Key) != interBucketCorrelation_.at(rt).end())
294 return interBucketCorrelation_.at(rt).at(label12Key);
295 else
296 QL_FAIL("Could not find correlation for risk type " << rt << " and key " << label12Key);
297 }
298 }
299
300 // Deal with CreditNonQ correlations
301 if ((firstRt == RiskType::CreditNonQ && secondRt == RiskType::CreditNonQ) ||
302 (firstRt == RiskType::CreditVolNonQ && secondRt == RiskType::CreditVolNonQ)) {
303
304 // Get the bucket of each qualifier
305 string bucket_1 = simmBucketMapper_->bucket(firstRt, firstQualifier);
306 string bucket_2 = simmBucketMapper_->bucket(secondRt, secondQualifier);
307
308 // Residual is special
309 if (bucket_1 == "Residual" || bucket_2 == "Residual") {
310 if (bucket_1 == bucket_2) {
311 // Both Residual
313 } else {
314 // One is a residual bucket and the other is not
315 return 0.0;
316 }
317 }
318
319 // Non-residual
320 if (bucket_1 == bucket_2) {
321 SimmVersion thresholdVersion = SimmVersion::V2_2;
322 if (isSimmConfigCalibration() || parseSimmVersion(version_) >= thresholdVersion) {
323 // In ISDA SIMM version 2.2 or greater, the CRNQ correlations differ depending on whether or not
324 // the entities have the same group name i.e. CMBX.
325 return firstLabel_2 == secondLabel_2 ? crnqSameIntraCorr_ : crnqDiffIntraCorr_;
326 }
327 // TODO:
328 // If same bucket. For ISDA SIMM < 2.2 there is a section in the documentation where
329 // you choose between a correlation if the underlying names are the same and another
330 // correlation if the underlying names are different. The underlying names being the
331 // same is defined in terms of an overlap of 80% in notional terms in underlying names.
332 // Don't know how to pass this down yet so we just go on qualifiers here.
333 return firstQualifier == secondQualifier ? crnqSameIntraCorr_ : crnqDiffIntraCorr_;
334 } else {
335 // If different buckets, return the inter-bucket correlation
336 return crnqInterCorr_;
337 }
338 }
339
340 // Deal with Commodity correlations
341 if ((firstRt == RiskType::Commodity && secondRt == RiskType::Commodity) ||
342 (firstRt == RiskType::CommodityVol && secondRt == RiskType::CommodityVol)) {
343
344 // Get the bucket index of each qualifier
345 const string& bucket_1 = simmBucketMapper_->bucket(firstRt, firstQualifier);
346 const string& bucket_2 = simmBucketMapper_->bucket(secondRt, secondQualifier);
347
348 if (bucket_1 == bucket_2) {
349 auto bucketKey = makeKey(bucket_1, "", "");
350 // If same bucket, return the intra-bucket correlation
351 return firstQualifier == secondQualifier ? 1.0 : intraBucketCorrelation_.at(RiskType::Commodity).at(bucketKey);
352 } else {
353 // If different buckets, return the inter-bucket correlation
354 auto label12Key = makeKey("", bucket_1, bucket_2);
355 return interBucketCorrelation_.at(RiskType::Commodity).at(label12Key);
356 }
357 }
358
359 // Deal with case of different risk types
360 if ((firstRt != secondRt) && (firstQualifier == secondQualifier)) {
361 if (((firstRt == RiskType::IRCurve || firstRt == RiskType::Inflation) && secondRt == RiskType::XCcyBasis) ||
362 (firstRt == RiskType::XCcyBasis && (secondRt == RiskType::IRCurve || secondRt == RiskType::Inflation))) {
363 // Between xccy basis and any yield or inflation in same currency
364 return xccyCorr_;
365 }
366 if ((firstRt == RiskType::IRCurve && secondRt == RiskType::Inflation) ||
367 (firstRt == RiskType::Inflation && secondRt == RiskType::IRCurve)) {
368 // Between any yield and inflation in same currency
369 return infCorr_;
370 }
371 if ((firstRt == RiskType::IRVol && secondRt == RiskType::InflationVol) ||
372 (firstRt == RiskType::InflationVol && secondRt == RiskType::IRVol)) {
373 // Between any yield volatility and inflation volatility in same currency
374 return infVolCorr_;
375 }
376 }
377
378 // Deal with IRCurve and IRVol correlations
379 if ((firstRt == RiskType::IRCurve && secondRt == RiskType::IRCurve) ||
380 (firstRt == RiskType::IRVol && secondRt == RiskType::IRVol)) {
381
382 // If the qualifiers, i.e. currencies, are the same
383 if (firstQualifier == secondQualifier) {
384 // Label2 level, i.e. sub-curve, correlations
385 if (firstLabel_2 != secondLabel_2) {
386 QL_REQUIRE(
387 firstLabel_1 == "" && secondLabel_1 == "",
388 "When asking for Label2 level correlations, "
389 << "the Label1 level values should both contain the default parameter i.e. empty string");
390 QL_REQUIRE(firstRt != RiskType::IRVol, "There is no correlation at the Label2 level for Risk_IRVol");
391 return irSubCurveCorr_;
392 }
393
394 // Label1 level, i.e. tenor, correlations
395 RiskType rt = RiskType::IRCurve;
396 auto label12Key = makeKey("", firstLabel_1, secondLabel_1);
397 if (intraBucketCorrelation_.at(rt).find(label12Key) != intraBucketCorrelation_.at(rt).end())
398 return intraBucketCorrelation_.at(rt).at(label12Key);
399 else
400 QL_FAIL("Could not find correlation for risk type " << rt << " and key " << label12Key);
401 } else {
402 // If the qualifiers, i.e. currencies, are not the same
404 }
405 }
406
407 // Deal with inflation volatility correlations
408 if (firstRt == RiskType::InflationVol && secondRt == RiskType::InflationVol) {
409 return 1.0;
410 }
411
412 // Deal with FX correlations
413 // TODO:
414 // For FXVol, qualifier is a currency pair. Is it possible to get here
415 // and to have something like secondQualifier = USDJPY and firstQualifier =
416 // JPYUSD an to give back 0.5
417 if ((firstRt == RiskType::FX && secondRt == RiskType::FX) ||
418 (firstRt == RiskType::FXVol && secondRt == RiskType::FXVol)) {
419 return firstQualifier == secondQualifier ? 1.0 : fxCorr_;
420 }
421
422 // Both risk types Base correlation
423 if (firstRt == RiskType::BaseCorr && secondRt == RiskType::BaseCorr) {
424 return basecorrCorr_;
425 }
426
427 // If we get to here
428 return 0.0;
429}
QuantLib::Real crqResidualIntraCorr_
Credit-Q residual intra correlation.
QuantLib::Real basecorrCorr_
Base correlation risk factor correlation.
QuantLib::Real crnqResidualIntraCorr_
Credit-NonQ residual intra correlation.
QuantLib::Real irInterCurrencyCorr_
IR correlation across currencies.
std::map< CrifRecord::RiskType, Amounts > intraBucketCorrelation_
QuantLib::Real crnqDiffIntraCorr_
Credit-NonQ non-residual intra correlation when different underlying names.
QuantLib::Real crqSameIntraCorr_
Credit-Q non-residual intra correlation when same qualifier but different vertex/source.
QuantLib::Real crnqSameIntraCorr_
Credit-NonQ non-residual intra correlation when same underlying names.
QuantLib::Real infCorr_
Correlation between any yield and inflation in same currency.
QuantLib::Real crnqInterCorr_
Credit-NonQ non-residual inter bucket correlation.
std::map< CrifRecord::RiskType, Amounts > interBucketCorrelation_
QuantLib::Real infVolCorr_
Correlation between any yield volatility and inflation volatility in same currency.
QuantLib::Real crqDiffIntraCorr_
Credit-Q non-residual intra correlation when different qualifier.
QuantLib::Real irSubCurveCorr_
IR Label2 level i.e. sub-curve correlation.
virtual bool isSimmConfigCalibration() const
CrifRecord::RiskType RiskType
Definition: crifloader.cpp:92
SimmVersion
Ordered SIMM versions.
Definition: utilities.hpp:43
SimmVersion parseSimmVersion(const string &version)
Definition: utilities.cpp:162
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ mporDays()

QuantLib::Size mporDays ( ) const

MPOR in days.

Definition at line 156 of file simmconfigurationbase.hpp.

156{ return mporDays_; }
+ Here is the caller graph for this function:

◆ sigmaMultiplier()

Real sigmaMultiplier ( ) const
private

Calculate variable for use in sigma method.

Definition at line 431 of file simmconfigurationbase.cpp.

431 {
432 // return 2.19486471232815;
433 // Use boost inverse normal here as opposed to QL. Using QL inverse normal
434 // will cause the ISDA SIMM unit tests to fail
435
436 /* We write sqrt(365.0 / (1.4 * mporDays_)) so that this function is
437 sqrt(365.0 / 14) for MPOR = 10 as expected and sqrt(365.0 / 1.4) for MPOR = 1.
438 This is described in SIMM:Technical Paper (Version 10), Section I.2 */
439 return sqrt(365.0 / (1.4 * mporDays_)) / boost::math::quantile(boost::math::normal(), 0.99);
440}
RandomVariable sqrt(RandomVariable x)
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ makeKey()

const tuple< string, string, string > makeKey ( const std::string &  bucket,
const std::string &  label1,
const std::string &  label2 
) const
protected

Definition at line 70 of file simmconfigurationbase.cpp.

71 {
72 return std::make_tuple(bucket, label1, label2);
73}
virtual std::string label2(const QuantLib::ext::shared_ptr< QuantLib::InterestRateIndex > &irIndex) const
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ labelIndex()

Size labelIndex ( const std::string &  label,
const std::vector< std::string > &  labels 
) const
protected

Helper method to find the index of the label in labels.

Definition at line 455 of file simmconfigurationbase.cpp.

455 {
456 QL_REQUIRE(!labels.empty(), "Labels cannot be empty");
457 auto it = std::find(labels.begin(), labels.end(), label);
458 QL_REQUIRE(it != labels.end(), "The label '" << label << "' could not be found in the labels.");
459 return std::distance(labels.begin(), it);
460}
+ Here is the caller graph for this function:

◆ addLabels2Impl()

void addLabels2Impl ( const CrifRecord::RiskType rt,
const std::string &  label_2 
)
protected

A base implementation of addLabels2 that can be shared by derived classes.

Definition at line 462 of file simmconfigurationbase.cpp.

462 {
463 // Only currently need this for risk type CreditQ
464 QL_REQUIRE(rt == RiskType::CreditQ, "addLabels2 only supported for RiskType_CreditQ");
465
466 // Expect label of the form "CCY" or "CCY,Sec"
467 if (label_2.size() == 3) {
468 QL_REQUIRE(checkCurrency(label_2), "Expected a Label2 of size 3 to be a valid currency code");
469 }
470
471 if (label_2.size() == 7) {
472 QL_REQUIRE(checkCurrency(label_2.substr(0, 3)), "Expected first 3 characters of Label2 ("
473 << label_2.substr(0, 3) << ") to be a valid currency code");
474 QL_REQUIRE(label_2.substr(4) == "Sec", "Last 3 characters of Label2 should be 'Sec'");
475 QL_REQUIRE(checkCurrency(label_2.substr(3, 1)), "Delimiter should be a comma");
476 }
477
478 QL_FAIL("Label2 passed to addLabels2 is unusable for RiskType " << rt);
479}
bool checkCurrency(const string &code)
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

Member Data Documentation

◆ name_

std::string name_
private

Name of the SIMM configuration.

Definition at line 160 of file simmconfigurationbase.hpp.

◆ version_

std::string version_
protected

SIMM configuration version.

Definition at line 170 of file simmconfigurationbase.hpp.

◆ simmBucketMapper_

QuantLib::ext::shared_ptr<SimmBucketMapper> simmBucketMapper_
protected

Used to map SIMM Qualifier names to SIMM bucket values.

Definition at line 173 of file simmconfigurationbase.hpp.

◆ simmConcentration_

QuantLib::ext::shared_ptr<SimmConcentration> simmConcentration_
protected

Used to get the concentration thresholds for a given risk type and qualifier.

Definition at line 176 of file simmconfigurationbase.hpp.

◆ mapBuckets_

std::map<CrifRecord::RiskType, std::vector<std::string> > mapBuckets_
protected

Map giving the SIMM bucket names for each risk type. If risk type is not present in the map keys => there are no buckets for that risk type

Definition at line 190 of file simmconfigurationbase.hpp.

◆ mapLabels_1_

std::map<CrifRecord::RiskType, std::vector<std::string> > mapLabels_1_
protected

Map giving the possible SIMM Label1 values for each risk type. If risk type is not present in the map keys then the Label1 value is not used for that risk type

Definition at line 196 of file simmconfigurationbase.hpp.

◆ mapLabels_2_

std::map<CrifRecord::RiskType, std::vector<std::string> > mapLabels_2_
protected

Map giving the possible SIMM Label2 values for each risk type. If risk type is not present in the map keys then the Label2 value is not used for that risk type

Definition at line 202 of file simmconfigurationbase.hpp.

◆ rwRiskType_

std::map<CrifRecord::RiskType, QuantLib::Real> rwRiskType_
protected

Risk weights, there are three types:

  1. risk type dependent only
  2. risk type and bucket dependent
  3. risk type, bucket and label1 dependent

Definition at line 209 of file simmconfigurationbase.hpp.

◆ rwBucket_

std::map<CrifRecord::RiskType, Amounts> rwBucket_
protected

Definition at line 210 of file simmconfigurationbase.hpp.

◆ rwLabel_1_

std::map<CrifRecord::RiskType, Amounts> rwLabel_1_
protected

Definition at line 211 of file simmconfigurationbase.hpp.

◆ curvatureWeights_

std::map<CrifRecord::RiskType, std::vector<QuantLib::Real> > curvatureWeights_
protected

Map from risk type to a vector of curvature weights. The size of the vector of weights for a given risk type must equal the size of the vector of Label1 values for that risk type in the map mapLabels_1_

Definition at line 217 of file simmconfigurationbase.hpp.

◆ historicalVolatilityRatios_

std::map<CrifRecord::RiskType, QuantLib::Real> historicalVolatilityRatios_
protected

Map from risk type to a historical volatility ratio.

Definition at line 220 of file simmconfigurationbase.hpp.

◆ validRiskTypes_

std::set<CrifRecord::RiskType> validRiskTypes_
protected

Set of valid risk types for the current configuration.

Definition at line 223 of file simmconfigurationbase.hpp.

◆ riskClassCorrelation_

Amounts riskClassCorrelation_
protected

Risk class correlation matrix.

Definition at line 226 of file simmconfigurationbase.hpp.

◆ interBucketCorrelation_

std::map<CrifRecord::RiskType, Amounts> interBucketCorrelation_
protected

Map from risk type to a matrix of inter-bucket correlations for that risk type i.e. correlation between qualifiers of the risk type that fall in different buckets

Definition at line 232 of file simmconfigurationbase.hpp.

◆ intraBucketCorrelation_

std::map<CrifRecord::RiskType, Amounts> intraBucketCorrelation_
protected

Map from risk type to an intra-bucket correlation for that risk type i.e. correlation between qualifiers of the risk type that fall in the same bucket

Definition at line 238 of file simmconfigurationbase.hpp.

◆ xccyCorr_

QuantLib::Real xccyCorr_
protected

Correlation between xccy basis and any yield or inflation in same currency

Definition at line 247 of file simmconfigurationbase.hpp.

◆ infCorr_

QuantLib::Real infCorr_
protected

Correlation between any yield and inflation in same currency.

Definition at line 249 of file simmconfigurationbase.hpp.

◆ infVolCorr_

QuantLib::Real infVolCorr_
protected

Correlation between any yield volatility and inflation volatility in same currency.

Definition at line 251 of file simmconfigurationbase.hpp.

◆ irSubCurveCorr_

QuantLib::Real irSubCurveCorr_
protected

IR Label2 level i.e. sub-curve correlation.

Definition at line 253 of file simmconfigurationbase.hpp.

◆ irInterCurrencyCorr_

QuantLib::Real irInterCurrencyCorr_
protected

IR correlation across currencies.

Definition at line 255 of file simmconfigurationbase.hpp.

◆ crqResidualIntraCorr_

QuantLib::Real crqResidualIntraCorr_
protected

Credit-Q residual intra correlation.

Definition at line 257 of file simmconfigurationbase.hpp.

◆ crqSameIntraCorr_

QuantLib::Real crqSameIntraCorr_
protected

Credit-Q non-residual intra correlation when same qualifier but different vertex/source.

Definition at line 259 of file simmconfigurationbase.hpp.

◆ crqDiffIntraCorr_

QuantLib::Real crqDiffIntraCorr_
protected

Credit-Q non-residual intra correlation when different qualifier.

Definition at line 261 of file simmconfigurationbase.hpp.

◆ crnqResidualIntraCorr_

QuantLib::Real crnqResidualIntraCorr_
protected

Credit-NonQ residual intra correlation.

Definition at line 263 of file simmconfigurationbase.hpp.

◆ crnqSameIntraCorr_

QuantLib::Real crnqSameIntraCorr_
protected

Credit-NonQ non-residual intra correlation when same underlying names.

Definition at line 265 of file simmconfigurationbase.hpp.

◆ crnqDiffIntraCorr_

QuantLib::Real crnqDiffIntraCorr_
protected

Credit-NonQ non-residual intra correlation when different underlying names.

Definition at line 267 of file simmconfigurationbase.hpp.

◆ crnqInterCorr_

QuantLib::Real crnqInterCorr_
protected

Credit-NonQ non-residual inter bucket correlation.

Definition at line 269 of file simmconfigurationbase.hpp.

◆ fxCorr_

QuantLib::Real fxCorr_
protected

FX correlation.

Definition at line 271 of file simmconfigurationbase.hpp.

◆ basecorrCorr_

QuantLib::Real basecorrCorr_
protected

Base correlation risk factor correlation.

Definition at line 273 of file simmconfigurationbase.hpp.

◆ mporDays_

QuantLib::Size mporDays_
protected

Margin Period of risk in days

Definition at line 276 of file simmconfigurationbase.hpp.