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

Abstract base class defining the interface for a SIMM configuration. More...

#include <orea/simm/simmconfiguration.hpp>

+ Inheritance diagram for SimmConfiguration:
+ Collaboration diagram for SimmConfiguration:

Public Types

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

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
 

Static Public Member Functions

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

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

Abstract base class defining the interface for a SIMM configuration.

Definition at line 39 of file simmconfiguration.hpp.

Member Enumeration Documentation

◆ SimmSide

enum class SimmSide
strong

Enum indicating the relevant side of the SIMM calculation.

Enumerator
Call 
Post 

Definition at line 44 of file simmconfiguration.hpp.

◆ RiskClass

enum class RiskClass
strong

Risk class types in SIMM plus an All type for convenience

Warning:
The ordering here matters. It is used in indexing in to correlation matrices for the correlation between risk classes.
Warning:
Internal methods rely on the last element being 'All'
Enumerator
InterestRate 
CreditQualifying 
CreditNonQualifying 
Equity 
Commodity 
FX 
All 

Definition at line 53 of file simmconfiguration.hpp.

◆ MarginType

enum class MarginType
strong

Margin types in SIMM plus an All type for convenience Internal methods rely on the last element being 'All'

Enumerator
Delta 
Vega 
Curvature 
BaseCorr 
AdditionalIM 
All 

Definition at line 59 of file simmconfiguration.hpp.

◆ IMModel

enum class IMModel
strong
Enumerator
Schedule 
SIMM 
SIMM_R 
SIMM_P 

Definition at line 61 of file simmconfiguration.hpp.

◆ Regulation

enum Regulation

SIMM regulators.

Enumerator
APRA 
CFTC 
ESA 
FINMA 
KFSC 
HKMA 
JFSA 
MAS 
OSFI 
RBI 
SEC 
SEC_unseg 
USPR 
NONREG 
BACEN 
SANT 
SFC 
UK 
AMFQ 
Included 
Unspecified 
Invalid 

Definition at line 69 of file simmconfiguration.hpp.

69 {
70 APRA,
71 CFTC,
72 ESA,
73 FINMA,
74 KFSC,
75 HKMA,
76 JFSA,
77 MAS,
78 OSFI,
79 RBI,
80 SEC,
82 USPR,
83 NONREG,
84 BACEN,
85 SANT,
86 SFC,
87 UK,
88 AMFQ,
92 };

Constructor & Destructor Documentation

◆ ~SimmConfiguration()

virtual ~SimmConfiguration ( )
virtual

Definition at line 41 of file simmconfiguration.hpp.

41{}

Member Function Documentation

◆ riskClasses()

set< SimmConfiguration::RiskClass > riskClasses ( bool  includeAll = false)
static

Give back a set containing the RiskClass values optionally excluding 'All'.

Definition at line 91 of file simmconfiguration.cpp.

91 {
92
93 // This only works if 'All' is the last enum value
94 Size bound = includeAll ? numberOfRiskClasses : numberOfRiskClasses - 1;
95
96 // Return the set of values
97 set<RiskClass> result;
98 for (Size i = 0; i < bound; ++i) {
99 result.insert(RiskClass(i));
100 }
101 return result;
102}
static const QuantLib::Size numberOfRiskClasses
Number of risk classes including RiskClass::All.

◆ riskTypes()

set< CrifRecord::RiskType > riskTypes ( bool  includeAll = false)
static

Give back a set containing the RiskType values optionally excluding 'All'.

Definition at line 104 of file simmconfiguration.cpp.

104 {
105
106 static std::set<CrifRecord::RiskType> simmRiskTypes = {
107 // SIMM Risk Types
108 CrifRecord::RiskType::Commodity,
109 CrifRecord::RiskType::CommodityVol,
110 CrifRecord::RiskType::CreditNonQ,
111 CrifRecord::RiskType::CreditQ,
112 CrifRecord::RiskType::CreditVol,
113 CrifRecord::RiskType::CreditVolNonQ,
114 CrifRecord::RiskType::Equity,
115 CrifRecord::RiskType::EquityVol,
116 CrifRecord::RiskType::FX,
117 CrifRecord::RiskType::FXVol,
118 CrifRecord::RiskType::Inflation,
119 CrifRecord::RiskType::IRCurve,
120 CrifRecord::RiskType::IRVol,
121 CrifRecord::RiskType::InflationVol,
122 CrifRecord::RiskType::BaseCorr,
123 CrifRecord::RiskType::XCcyBasis,
124 CrifRecord::RiskType::ProductClassMultiplier,
125 CrifRecord::RiskType::AddOnNotionalFactor,
126 CrifRecord::RiskType::Notional,
127 CrifRecord::RiskType::AddOnFixedAmount,
128 CrifRecord::RiskType::PV, // IM Schedule
129 };
130
131 // This only works if 'All' is the last enum value
132 if (includeAll) {
133 simmRiskTypes.insert(CrifRecord::RiskType::All);
134 }
135 return simmRiskTypes;
136}

◆ marginTypes()

set< SimmConfiguration::MarginType > marginTypes ( bool  includeAll = false)
static

Give back a set containing the MarginType values optionally excluding 'All'.

Definition at line 138 of file simmconfiguration.cpp.

138 {
139
140 // This only works if 'All' is the last enum value
141 Size bound = includeAll ? numberOfMarginTypes : numberOfMarginTypes - 1;
142
143 // Return the set of values
144 set<MarginType> result;
145 for (Size i = 0; i < bound; ++i) {
146 result.insert(MarginType(i));
147 }
148 return result;
149}
static const QuantLib::Size numberOfMarginTypes
Number of margin types including MarginType::All.

◆ productClasses()

set< CrifRecord::ProductClass > productClasses ( bool  includeAll = false)
static

Give back a set containing the ProductClass values optionally excluding 'All'.

Definition at line 151 of file simmconfiguration.cpp.

151 {
152
153
154 static std::set<CrifRecord::ProductClass> simmProductClasses = {
155 CrifRecord::ProductClass::RatesFX,
156 CrifRecord::ProductClass::Rates, // extension for IM Schedule
157 CrifRecord::ProductClass::FX, // extension for IM Schedule
158 CrifRecord::ProductClass::Credit,
159 CrifRecord::ProductClass::Equity,
160 CrifRecord::ProductClass::Commodity,
161 CrifRecord::ProductClass::Empty,
162 CrifRecord::ProductClass::Other, // extension for IM Schedule
163 CrifRecord::ProductClass::AddOnNotionalFactor, // extension for additional IM
164 CrifRecord::ProductClass::AddOnFixedAmount};
165
166 if (includeAll) {
167 simmProductClasses.insert(CrifRecord::ProductClass::All);
168 }
169 return simmProductClasses;
170}

◆ riskClassToRiskType()

pair< CrifRecord::RiskType, CrifRecord::RiskType > riskClassToRiskType ( const RiskClass rc)
static

For a given risk class, return the corresponding risk types.

Definition at line 173 of file simmconfiguration.cpp.

173 {
174 CrifRecord::RiskType deltaRiskType, vegaRiskType;
175 switch (rc) {
176 case RiskClass::InterestRate:
177 deltaRiskType = CrifRecord::RiskType::IRCurve;
178 vegaRiskType = CrifRecord::RiskType::IRVol;
179 break;
180 case RiskClass::CreditQualifying:
181 deltaRiskType = CrifRecord::RiskType::CreditQ;
182 vegaRiskType = CrifRecord::RiskType::CreditVol;
183 break;
184 case RiskClass::CreditNonQualifying:
185 deltaRiskType = CrifRecord::RiskType::CreditNonQ;
186 vegaRiskType = CrifRecord::RiskType::CreditVolNonQ;
187 break;
188 case RiskClass::Equity:
189 deltaRiskType = CrifRecord::RiskType::Equity;
190 vegaRiskType = CrifRecord::RiskType::EquityVol;
191 break;
192 case RiskClass::Commodity:
193 deltaRiskType = CrifRecord::RiskType::Commodity;
194 vegaRiskType = CrifRecord::RiskType::CommodityVol;
195 break;
196 case RiskClass::FX:
197 deltaRiskType = CrifRecord::RiskType::FX;
198 vegaRiskType = CrifRecord::RiskType::FXVol;
199 break;
200 default:
201 QL_FAIL("riskClassToRiskType: Unexpected risk class");
202 }
203
204 return std::make_pair(deltaRiskType, vegaRiskType);
205}
+ Here is the caller graph for this function:

◆ riskTypeToRiskClass()

SimmConfiguration::RiskClass riskTypeToRiskClass ( const CrifRecord::RiskType rt)
static

For a given rirsk type, return the corresponding risk class.

Definition at line 207 of file simmconfiguration.cpp.

207 {
208 switch (rt) {
209 case CrifRecord::RiskType::Commodity:
210 case CrifRecord::RiskType::CommodityVol:
211 return SimmConfiguration::RiskClass::Commodity;
212 case CrifRecord::RiskType::CreditQ:
213 case CrifRecord::RiskType::CreditVol:
214 case CrifRecord::RiskType::BaseCorr:
215 return SimmConfiguration::RiskClass::CreditQualifying;
216 case CrifRecord::RiskType::CreditNonQ:
217 case CrifRecord::RiskType::CreditVolNonQ:
218 return SimmConfiguration::RiskClass::CreditNonQualifying;
219 case CrifRecord::RiskType::Equity:
220 case CrifRecord::RiskType::EquityVol:
221 return SimmConfiguration::RiskClass::Equity;
222 case CrifRecord::RiskType::FX:
223 case CrifRecord::RiskType::FXVol:
224 return SimmConfiguration::RiskClass::FX;
225 case CrifRecord::RiskType::Inflation:
226 case CrifRecord::RiskType::InflationVol:
227 case CrifRecord::RiskType::IRCurve:
228 case CrifRecord::RiskType::IRVol:
229 case CrifRecord::RiskType::XCcyBasis:
230 return SimmConfiguration::RiskClass::InterestRate;
231 default:
232 QL_FAIL("riskTypeToRiskClass: Invalid risk type");
233 }
234}

◆ less_than()

bool less_than ( const CrifRecord::ProductClass lhs,
const CrifRecord::ProductClass rhs 
)
static

Define ordering for ProductClass according to a waterfall:

Define ordering for ProductClass.

Definition at line 402 of file simmconfiguration.cpp.

403 {
404 QL_REQUIRE(lhs != CrifRecord::ProductClass::All && rhs != CrifRecord::ProductClass::All,
405 "Cannot compare the \"All\" ProductClass.");
406 QL_REQUIRE(static_cast<int>(CrifRecord::ProductClass::All) == 10,
407 "Number of SIMM Product classes is not 11. Some order comparisons are not handled.");
408
409 // all branches end in returns so no breaks are included.
410 switch (lhs) {
411 case CrifRecord::ProductClass::AddOnFixedAmount:
412 case CrifRecord::ProductClass::AddOnNotionalFactor:
413 case CrifRecord::ProductClass::Empty:
414 case CrifRecord::ProductClass::Other:
415 switch (rhs) {
416 case CrifRecord::ProductClass::AddOnFixedAmount:
417 case CrifRecord::ProductClass::AddOnNotionalFactor:
418 case CrifRecord::ProductClass::Empty:
419 case CrifRecord::ProductClass::Other:
420 return false;
421 default:
422 return true;
423 }
424 case CrifRecord::ProductClass::RatesFX:
425 case CrifRecord::ProductClass::Rates:
426 case CrifRecord::ProductClass::FX:
427 switch (rhs) {
428 case CrifRecord::ProductClass::Empty:
429 case CrifRecord::ProductClass::Other:
430 case CrifRecord::ProductClass::RatesFX:
431 case CrifRecord::ProductClass::Rates:
432 case CrifRecord::ProductClass::FX:
433 return false;
434 default:
435 return true;
436 }
437 case CrifRecord::ProductClass::Equity:
438 switch (rhs) {
439 case CrifRecord::ProductClass::Empty:
440 case CrifRecord::ProductClass::Other:
441 case CrifRecord::ProductClass::RatesFX:
442 case CrifRecord::ProductClass::Rates:
443 case CrifRecord::ProductClass::FX:
444 case CrifRecord::ProductClass::Equity:
445 return false;
446 default:
447 return true;
448 }
449 case CrifRecord::ProductClass::Commodity:
450 if (rhs != CrifRecord::ProductClass::Credit) {
451 return false;
452 } else {
453 return true;
454 }
455 case CrifRecord::ProductClass::Credit:
456 return false;
457 case CrifRecord::ProductClass::All:
458 // not handled, fall through to failure
459 break;
460 }
461 QL_FAIL("Unhandled SIMM Product class in waterfall logic.");
462}
+ Here is the caller graph for this function:

◆ greater_than()

bool greater_than ( const CrifRecord::ProductClass lhs,
const CrifRecord::ProductClass rhs 
)
static

Definition at line 464 of file simmconfiguration.cpp.

465 {
466 return SimmConfiguration::less_than(rhs, lhs);
467}
static bool less_than(const CrifRecord::ProductClass &lhs, const CrifRecord::ProductClass &rhs)
Define ordering for ProductClass according to a waterfall:
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ less_than_or_equal_to()

bool less_than_or_equal_to ( const CrifRecord::ProductClass lhs,
const CrifRecord::ProductClass rhs 
)
static

Definition at line 468 of file simmconfiguration.cpp.

469 {
470 return !SimmConfiguration::greater_than(lhs, rhs);
471}
static bool greater_than(const CrifRecord::ProductClass &lhs, const CrifRecord::ProductClass &rhs)
+ Here is the call graph for this function:

◆ greater_than_or_equal_to()

bool greater_than_or_equal_to ( const CrifRecord::ProductClass lhs,
const CrifRecord::ProductClass rhs 
)
static

Definition at line 472 of file simmconfiguration.cpp.

473 {
474 return !SimmConfiguration::less_than(lhs, rhs);
475}
+ Here is the call graph for this function:

◆ maxProductClass()

static CrifRecord::ProductClass maxProductClass ( CrifRecord::ProductClass  pc1,
CrifRecord::ProductClass  pc2 
)
static

Return the "worse" ProductClass using a waterfall logic:

Definition at line 123 of file simmconfiguration.hpp.

123 {
124 QL_REQUIRE(pc1 != CrifRecord::ProductClass::All && pc2 != CrifRecord::ProductClass::All,
125 "Cannot define worse product type if even one of the product classes is indeterminate.");
126 return (less_than(pc1, pc2) ? pc2 : pc1);
127 }
+ Here is the call graph for this function:

◆ buckets()

virtual std::vector< std::string > buckets ( const CrifRecord::RiskType rt) const
pure virtual

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

Implemented in SimmConfigurationBase.

◆ hasBuckets()

virtual bool hasBuckets ( const CrifRecord::RiskType rt) const
pure virtual

Return true if the SIMM risk type rt has buckets.

Implemented in SimmConfigurationBase.

◆ hasBucketMapping()

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

Return true if the SIMM risk type rt has buckets.

Implements CrifConfiguration.

Definition at line 137 of file simmconfiguration.hpp.

137 {
138 return bucketMapper()->has(rt, qualifier);
139 }
virtual const QuantLib::ext::shared_ptr< SimmBucketMapper > & bucketMapper() const =0
Returns the SIMM bucket mapper used by the configuration.
+ Here is the call graph for this function:

◆ labels1()

virtual std::vector< std::string > labels1 ( const CrifRecord::RiskType rt) const
pure virtual

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

Implemented in SimmConfigurationBase.

◆ labels2()

virtual std::vector< std::string > labels2 ( const CrifRecord::RiskType rt) const
pure virtual

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

Implemented in SimmConfigurationBase.

◆ addLabels2()

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

Add SIMM Label2 values under certain circumstances.

For example, in v338 and later, CreditQ label2 should have the payment currency if sensitivty is not the result of a securitisation and "payment currency,Sec" if sensitivty is the result of a securitisation. Adding to label2 in the configuration means you do not have to have an exhaustive list up front.

Implemented in SimmConfigurationBase, SimmConfigurationCalibration, SimmConfiguration_ISDA_V1_3_38, SimmConfiguration_ISDA_V2_0, SimmConfiguration_ISDA_V2_1, 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.

◆ weight()

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
pure virtual

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

Implemented in SimmConfigurationBase, 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.

◆ curvatureWeight()

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

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.

Implemented in SimmConfigurationBase.

◆ historicalVolatilityRatio()

virtual QuantLib::Real historicalVolatilityRatio ( const CrifRecord::RiskType rt) const
pure virtual

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

Implemented in SimmConfigurationBase.

◆ sigma()

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
pure virtual

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

Implemented in SimmConfigurationBase.

◆ curvatureMarginScaling()

virtual QuantLib::Real curvatureMarginScaling ( ) const
pure virtual

◆ concentrationThreshold()

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

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

Implemented in SimmConfigurationBase.

◆ isValidRiskType()

virtual bool isValidRiskType ( const CrifRecord::RiskType rt) const
pure virtual

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

Implemented in SimmConfigurationBase.

◆ correlationRiskClasses()

virtual QuantLib::Real correlationRiskClasses ( const RiskClass rc_1,
const RiskClass rc_2 
) const
pure virtual

Return the correlation between SIMM risk classes rc_1 and rc_2.

Implemented in SimmConfigurationBase.

◆ correlation()

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
pure virtual

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

Warning:
Returns 0 if no correlation found

Implemented in SimmConfigurationBase, 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.

◆ isSimmConfigCalibration()

virtual bool isSimmConfigCalibration ( ) const
virtual

Reimplemented in SimmConfigurationCalibration.

Definition at line 231 of file simmconfiguration.hpp.

231{ return false; }
+ Here is the caller graph for this function:

Member Data Documentation

◆ numberOfRiskClasses

const Size numberOfRiskClasses = riskClassMap.size()
staticprotected

Number of risk classes including RiskClass::All.

Definition at line 235 of file simmconfiguration.hpp.

◆ numberOfMarginTypes

const Size numberOfMarginTypes = marginTypeMap.size()
staticprotected

Number of margin types including MarginType::All.

Definition at line 237 of file simmconfiguration.hpp.

◆ numberOfRegulations

const Size numberOfRegulations = regulationsMap.size()
staticprotected

Number of regulations.

Definition at line 239 of file simmconfiguration.hpp.