SIMM
Introduction
This section outlines our interpretation of the SIMM variance-covariance methodology1 and describes the input data, calculations, and results.
Quick overview
Summary of the aggregation steps:
For each NettingSet:
For each ProductClass in [RatesFX, Credit, Equity, Commodity]:
For each RiskClass in [Interest Rate, Credit Qualifying, Credit Non-Qualifying, Equity, Commodity, FX]:
Compute Delta, Vega, Curvature and BaseCorr margins
IM_<RiskClass> (from <SensitivityType>Margin): IM_x = DeltaMargin_x +
+ VegaMargin_x + CurvatureMargin_x + BaseCorrMargin_x
SIMM_product (from IM_<RiskClass>): aggregate IM across risk classes (variance covariance)
SIMM (from SIMM_product): SIMM = SIMMRatesFX + SIMMCredit + SIMMEquity+SIMMCommodity
Step-by-step overview:
- Inputs:
- Read and process sensitivities - $s$,
- Compute vega risk (weight vega by vol) for Equity, Commodity, FX,
- Generate Curvature Risk Exposure CVR from vegas.
- Define aggregation levels - k and b:
- Derived Risk Factor - $k$,
- Derived Bucket - $b$,
- for each input sensitivity record.
- Compute Weighted sensitivity $WS_k$:
- Lookup concentration thresholds $Tb$
- Compute concentration risk factor $CR$
- Assign risk weights $RW$
- Compute weighted sensitivity $WS$
- Bucket-level margin $K_b$:
- Lookup risk factor correlations $\rho_{kl}$ (and $\phi_{i,j}$ for rates)
- Compute inner correlation adjustment factor $f_{k,l}$ for non-IR risk classes
- Compute bucket-level margin $K_b$
- Delta, Vega, BaseCorr, and Curvature margins for each risk class
- Look up cross-bucket correlation $\gamma_{k,l}$
- Compute $S_b$ for each bucket
- Compute inner correlation adjustment factor $g_{b,c}$ for IR risk classes
- Compute margins for each risk class and sensitivity type
- Compute risk class level margin (sum across sensitivity types)
- Compute product level margin (aggregate across risk classes using variance-covariance formula)
- Compute total SIMM requirement (sum across product classes)
Reading and processing sensitivities
Atoti ISDA-SIMM expects to receive trade-level sensitivities in CRIF format from the upstream risk engine and data management systems.
Calculation Currency and FX Delta
The calculation currency is looked up for each netting set based on the netting set attributes. FX Delta exposures where qualifier matches the calculation currency do not contribute into Margin.
Compute vol-weighted vega risk
This step is applicable for equity, fx, and commodity risk classes.
Vol-weighted vega risk is computed as follows:
$$VR_{i,k} = HVR_{RiskClass}\cdot \sum_{j} \sigma_{kj} \cdot \frac{\partial V_i}{\partial \sigma}$$
where $\sum_{j}$ - summing across tenors.
- HVR (Historical volatility ratio) - is set as a single value per RiskClass and is obtained via a lookup from the parameter set.
- Vega - is provided in the CRIF file.
- Volatility is computed as follows: $$\sigma_{k,j}=\frac{RW_k \cdot \sqrt{\frac{365}{1.4\cdot Info_MPOR}}}{\alpha}$$
where $\alpha = \Phi^{-1}(99%)$.
See the resulting measures in the Sensitivities section.
Generate Curvature Risk Exposure CVR from vegas
Curvature Risk Exposure is used for gamma effect calculation (approximation) and is denoted as $CVR_{ik}$, where i is for instrument (trade).
CVR is maturity-weighted and volatility-weighted vega across tenors, where weights are defined as $SF(t)$:
$$SF(t) = 0.5 \cdot min(1, \frac{14 days}{t days})$$
Then, the curvature risk is computed as follows:
$$CVR_{i,k} = \sum_{j} SF(t_{kj})\cdot \sigma_{kj} \cdot \frac{\partial V_i}{\partial \sigma}$$
Interest rate and credit vegas come already vol-weighted.
Bucket and risk factor
This section describes Buckets and Risk Factors which are specific aggregation levels defined by the methodology. They are most probably different from the definition of buckets and risk factors for internal risk management.
Derived risk factors
Section C1 specifies a certain definition of risk factors (subscript ~k~ in the methodology).
Risk factors are further used as the aggregation level for weighted sensitivities/CVR (see the variance-covariance formula for the Bucket-Level Margin).
This table summarizes the combinations of fields used to assign risk factors for interest rate sensitivities.
RiskType | Example of a CRIF record (for a trade aka “instrument” in SIMM) | Risk factor fields in CRIF |
---|---|---|
Risk_IRCurve | {RiskType: Risk_IRCurve, Qualifier: USD, Bucket: 1, Label 1: 1y, Label2: Libor3m, Amount: 23472.8, AmountCcy: EUR} | Qualifier, Label1, Label2 |
Risk_Inflation | {RiskType: Risk_Inflation, Qualifier: USD, Amount: 23472.8, AmountCcy: EUR} | Qualifier |
Risk_XCcyBasis | {RiskType: Risk_XCcyBasis, Qualifier: JPY, Amount: 23472.8, AmountCcy: EUR} | Qualifier |
Risk_IRVol | {RiskType: Risk_IRVol, Qualifier : USD, Label1: 1y, Amount: Vega x Volatility} | Qualifier, Label1 |
Risk_InflationVol | {RiskType: Risk_InflationVol, Qualifier : USD, Label1: 1yr, Amount: Vega x Volatility} | Qualifier, Label1 |
Risk_Equity | {RiskType: Risk_CreditQ, Qualifier: ISIN:US1081333921, Bucket: 1, Amount: 23472.8, AmountCcy: EUR} | Qualifier |
Risk_EquityVol | {RiskType: Risk_EquityVol, Qualifier: ISIN:US682348237, Bucket: 1, Label 1: 1y, Amount: 23472.8, AmountCcy: EUR} | Qualifier, Label1 |
Risk_FX | {RiskType: Risk_FX, Qualifier: CHF, Amount: 23472.8, AmountCcy: EUR} | Qualifier |
Risk_FXVol | {RiskType: Risk_FXVol, Qualifier: USDEUR, Label 1: 1y, Amount: 23472.8, AmountCcy: EUR} | Qualifier, Label1 |
Risk_Commodity | {RiskType: Risk_Commodity, Qualifier: Coal Europe, Bucket: 1, Amount: 23472.8, AmountCcy: EUR} | Qualifier |
Risk_CommodityVol | {RiskType: Risk_CommodityVol, Qualifier: Coal Europe, Label1: 1y, Amount: 23472.8, AmountCcy: EUR} | Qualifier, Label1 |
Risk_CreditQ | {RiskType: Risk_CreditQ, Qualifier: ISIN:US7648683693, Bucket: 2, Label1: 2Y, Label2: USD, Amount: 23472.8, AmountCcy: EUR} | Qualifier, Label1, Label2 |
Risk_CreditVol | {RiskType: Risk_CreditVol, Qualifier: ISIN:US7648683693, Bucket: 2, Label1: 2Y, Label2: USD, Amount: 23472.8, AmountCcy: EUR} | Qualifier, Label1, Label2 |
Risk_BaseCorr | {RiskType: Risk_BaseCorr, Qualifier: CDX IG, Amount: 23472.8, AmountCcy: EUR} | Qualifier |
Risk_CreditNonQ | {RiskType: Risk_CreditNonQ, Qualifier: Instrument1, Bucket: 2, Label1: 2Y, Label2: CMBX, Amount: 23472.8, AmountCcy: EUR} | Qualifier, Label1, Label2 |
Risk_CreditVolNonQ | {RiskType: Risk_CreditVolNonQ, Qualifier: Instrument1, Bucket: 2, Label1: 2Y, Label2: CMBX, Amount: 23472.8, AmountCcy: EUR} | Qualifier, Label1, Label2 |
Derived Bucket
Section C1 specifies the way sensitivities are grouped into Buckets - $b$.
Buckets are further used:
- as a parameter for defining Risk Weight,
- as an aggregation level for Bucket-Level Margin.
The regulatory (aggregation) buckets are defined as follows:
- For interest rate risk class, bucket is currency delivered in the Qualifier field.
- For foreign exchange, all sensitivities are place into a single bucket.
- For risk type Risk_BaseCorr, all sensitivities are place into a single bucket.
- In all other cases: bucket is provided in the input file.
Weighted Sensitivities
Weighted sensitivities are computed for each input sensitivity record.
Concentration Threshold
This step is not applicable for the curvature chains of calculations and for the base correlation.
$T_b$ concentration threshold is looked up in the parameter set based on:
RiskType | Specified per | Remark |
---|---|---|
Risk_IRCurve + Risk_Inflation | CurrencyRiskGroup | delta |
Risk_XCcyBasis | not defined | delta |
Risk_IRVol + Risk_InflationVol | CurrencyRiskGroup | vega |
Risk_Equity | Bucket | delta |
Risk_EquityVol | Bucket | vega |
Risk_FX | CurrencyRiskGroup | delta |
Risk_FXVol | CurrencyRiskGroup of one currency in pair and CurrencyRiskGroup of the second currency in pair | vega |
Risk_Commodity | Bucket | delta |
Risk_CommodityVol | Bucket | vega |
Risk_CreditQ | Bucket | delta |
Risk_CreditVol | single value | vega |
Risk_CreditNonQ | Bucket | delta |
Risk_CreditVolNonQ | single value | vega |
Curvatures | not defined | not defined |
Risk_BaseCorr | not defined | not defined |
The currency risk group mapping is part of the parameter set configuration and must be provided for each Qualifier.
Concentration Risk Factor
This step is not applicable for the curvature chains of calculations, and for Risk_BaseCorr. Assume CR = 1.
The formula is similar for all risk classes/sensitivity types:
$$CR_b = max\left ( 1, \sqrt{\frac{abs(\text{net sensitivity})}{\text{concentration threshold}}} \right )$$
The $CR_b$ is computed for each RiskType and bucket inside a netting set and product class.
Interest Rate
For Risk_IRCurve and Risk_Inflation, the CR_b is computed on the currency level, but does not include XCcy risk:
$$CR_b = max\left ( 1, \sqrt{\frac{|\sum_{k,i}s_{k,i}|}{T_b}} \right )$$
For Risk_XCcyBasis CR = 1 (see para 7b).
For Risk_IRVol and Risk_InflationVol,
$$VCR_b = max\left ( 1, \sqrt{\frac{|\sum_{k,i}VR_{k,i}|}{VT_b}} \right )$$
Equity, Commodity, and Foreign Exchange
$$CR_k = max\left ( 1, \sqrt{\frac{|s_{k}|}{T_b}} \right )$$
$$VCR_k = max\left ( 1, \sqrt{\frac{|\sum_{i}VR_{k,i}|}{VT_b}} \right )$$
Credit spread
$$CR_k = max\left ( 1, \sqrt{\frac{| \sum_j s_{j} |}{T_b}} \right )$$
$$VCR_k = max\left ( 1, \sqrt{\frac{|\sum_{ij} VR_{ij}|}{VT_b}} \right )$$
Risk Weights
Risk Weights lookup is defined per risk type. It is either based on a lookup of a combination of fields or a constant value.
Risk Type | RW/VRW lookup specification |
---|---|
Curvatures | not defined, RW = 1 |
Risk_BaseCorr | single value |
Risk_Commodity | per Bucket |
Risk_CommodityVol | single value |
Risk_CreditNonQ | per Bucket |
Risk_CreditQ | per Bucket |
Risk_CreditVol | single value |
Risk_CreditVolNonQ | single value |
Risk_Equity | per Bucket |
Risk_EquityVol | per Bucket |
Risk_FX | single value |
Risk_FXVol | single value |
Risk_Inflation | single value |
Risk_InflationVol | single value |
Risk_IRCurve | per CurrencyRiskGroup, Tenor |
Risk_IRVol | single value |
Risk_XCcyBasis | single value |
Formula for the Weighted Sensitivities
Once the risk weights, $RW$, are assigned, the weighted sensitivities $WS$ are computed according to this general formula:
$$WS = s \cdot RW \cdot CR$$
Specific formula for each risk type:
RiskType | Notation | Formula |
---|---|---|
Risk_IRCurve, Risk_Inflation, Risk_XCcyBasis | $WS_{k,i}$ | $WS = s_{i,k} \cdot RW_{k} \cdot CR_b$ Note, that for Risk_XccyCurve CR=1 (para 7b) |
Risk_CreditQ, Risk_CreditNonQ, Risk_Equity, Risk_FX, Risk_Commodity | $WS_{k}$ | $WS = s_{k} \cdot RW_{k} \cdot CR_k$ |
Risk_IRVol, Risk_InflationVol,Risk_CreditVol, Risk_CreditVolNonQ, Risk_EquityVol, Risk_FXVol, Risk_CommodityVol | $VR_k$ | $$VR_k = VRW \cdot \left ( \sum_i VR_{i,k} \right ) \cdot VCR_b$$ for rates, $$VR_k = VRW \cdot \left ( \sum_i VR_{i,k} \right ) \cdot VCR_k$$ - all other risk classes |
Risk_BaseCorr | $WS_{k}$ | $WS_k = RW_k \cdot s_k$ |
Curvatures | not defined | $WS = CVR$ |
Bucket-Level Capital Charge
Weighted sensitivities netted at Risk Factor level are rolled up into Bucket Level Margin $K_{b}$ using a variance-covariance type formula.
Risk Factors Correlation
For all pairs of risk factors in each bucket (see definitions above) we need to look up risk factor correlations from the parameter set. $\rho_{k,l}$ - are defined per risk class without a split onto delta and vega. We assume same $\rho_{k,l}$ for vega, as for delta.
Interest Rate
For all pairs of risk factors of the same curve currency:
RiskType | Notation | Lookup |
---|---|---|
Risk_IRCurve | $\phi_{i,j} \cdot \rho_{k,l}$ - risk factors correlation is a product of two variables. | $$\rho_{i,j}$$ is set per Tenor 1, Tenor 2. $$\phi_{i,j}$$ is subcurve correlation, it is set as a single value for different subcurves and as 1 between tenors of one subcurve |
Risk_Inflation | $\rho_{k,l}$ | single value |
Risk_XCcyBasis | $\rho_{k,l}$ | single value |
Note the correlations for Risk_Inflation and Risk_XCcyBasis are for those sensitivities against all Risk_IRCurve sensitivities (within the same currency).
Equity, Commodity, Foreign exchange
For all risk factors inside a bucket:
RiskType | Notation | Lookup |
---|---|---|
Risk_Equity, Risk_EquityVol | $\rho_{k,l}$ | single value per Bucket |
Risk_Commodity, Risk_CommodityVol | $\rho_{k,l}$ | single value per Bucket |
Risk_FX, Risk_FXVol | $\rho_{k,l}$ | set per currency volatility group |
Credit spread
For all risk factors inside a bucket:
RiskType | Notation | Lookup |
---|---|---|
Risk_CreditQ, Risk_CreditVol | $\rho_{k,l}$ | Two correlation values, depending on whether Qualifiers are equal or not, are defined for any of the non-Residual buckets and for the Residual bucket. |
Risk_CreditNonQ, Risk_CreditVolNonQ | $\rho_{k,l}$ | Two correlation values, depending on whether Label2 are equal or not, are defined for any of the non-Residual buckets and for the Residual bucket. |
Risk_BaseCorr | $\rho_{k,l}$ | single value |
Inner correlation adjustment factor
For some of the risk types, the inner correlation adjustment factor $f_{k,l}$ plays a role, otherwise assume $f_{k,l}$ is set at 1.
Interest Rate
For the risk types: Risk_IRCurve, Risk_Inflation, Risk_XCcyBasis, Risk_IRVol, Risk_InflationVol parameters, $f_{k,l}$ is set at 1.
Non-Interest Rate
RiskType | $f_{kl}$ |
---|---|
Risk_IRCurve, Risk_Inflation, Risk_XCcyBasis | 1 |
Risk_IRVol, Risk_InflationVol | 1 |
Risk_CreditQ, Risk_CreditNonQ, Risk_Equity, Risk_FX, Risk_Commodity | $f_{kl} = \frac{min(CR_k,CR_l)}{max(CR_k,CR_L)}$ |
Risk_CreditVol, Risk_CreditVolNonQ, Risk_EquityVol, Risk_FXVol, Risk_CommodityVol | $f_{kl} = \frac{min(VCR_k,VCR_l)}{max(VCR_k,VCR_L)}$ |
Risk_BaseCorr | 1 |
Formula for the Bucket-Level Capital Charge
Risk factor level Weighted Sensitivities $WS_k$ and Curvature risk $CVR_k$, together with Risk Factors Correlations $\rho_{kl}$ feed the bucket-level margin formula, defined for interest rate as follows:
$$K_{b} = \sqrt{\sum_{k,i \in b} WS_{k,i}^{2} + \sum_{k,i} \sum_{(j,l) \neq (k,i)} \phi_{i,j} \cdot \rho_{kl} \cdot WS_{k,i} \cdot WS_{l,j} }$$
For the non-interest rate risk classes delta and vega, excluding base correlation:
$$K_{b} = \sqrt{\sum_{k \in b} WS_{k}^{2} + \sum_{k} \sum_{l \neq k} f_{k,l} \cdot \rho_{k,l} \cdot WS_{k} \cdot WS_{l} }$$
Base correlation:
$$K_{b} = \sqrt{\sum_{k \in b} WS_{k}^{2} + \sum_{k} \sum_{l \neq k} \rho_{k,l} \cdot WS_{k} \cdot WS_{l} }$$
Curvature chain:
$$K_{b} = \sqrt{\sum_{k \in b} CVR_{k}^{2} + \sum_{k} \sum_{l \neq k} \rho_{k,l}^2 \cdot CVR_{k} \cdot CVR_{l} }$$
Delta, Vega, BaseCorr, and Curvature margins
Bucket level Margin $K_b$ are rolled up into risk class/sensitivity type level Margin using a variance-covariance type formula.
Cross-Buckets Correlation
For the next aggregation step, we need to obtain cross-bucket correlations - denoted as $\gamma_{bc}$.
Risk Class | Delta and Vega |
---|---|
Interest Rate | single value |
Equity | Bucket Pairs (not defined for the residual bucket) |
Foreign Exchange | not defined |
Commodity | Bucket Pairs |
Credit qualifying | Bucket Pairs (not defined for the residual bucket) |
Credit non-qualifying | single value |
Capped Net Weighted Sensitivity
For each bucket, we also compute $S_b$:
$$S_b = max \left ( min \left ( K_b, \text{net } WS_b\right ), -K_b \right )$$
The $S_b$ for the Residual bucket will not contribute into the Margin.
Outer Correlation Adjustment Factor
This step is applicable only to the IR risk class.
Delta
The Delta margin calculation for interest rates uses this formula for the adjustment factor:
$$g_{b,c} = \frac{min(CR_b, CR_c)}{max(CR_b,CR_c)}$$
For all other risk classes, $g_{b,c} = 1$.
Vega
The Vega margin calculation uses this formula for the adjustment factor:
$$g_{b,c} = \frac{min(VCR_b, VCR_c)}{max(VCR_b,VCR_c)}$$
Curvature
This step is not applicable.
BaseCorr
This step is not applicable.
Formula for Delta, Vega, Curvature, and BaseCorr Margin
Delta, Vega, Curvature, and BaseCorr margins are computed for each ProductClass and RiskClass separately.
Delta and Vega
The general formula for the sensitivity type margin is as follows:
$$Margin = \sqrt{\sum_{b}K_{b}^{2} + \sum_{b}{\sum_{c \neq b} \gamma_{b,c} \cdot g_{b,c} \cdot S_{b} \cdot S_{c}}} + K_{residual}$$
where $b$ - all buckets, excluding residual and $K_{residual}$ - bucket-level margin for the residual bucket (if exists).
Special cases
Please note that since all risk factors belong to a single bucket for these sensitivities, Margin is equal to bucket-level margin:
$$\text{Credit Qualifying BaseCorrMargin} = K_b$$
$$\text{FX DeltaMargin} = K_b$$
$$\text{FX VegaMargin} = K_b$$
Curvature
Theta
Compute theta and lambda: across non-residual buckets and for the residual bucket.
$$\theta = min\left ( \frac{\sum_{b,k} CVR_{b,k}}{\sum_{b,k}|CVR_{b,k}|} ,0\right )$$
The formula has the net CVR measure in nominator and gross CVR in denominator, where for the gross CVR the abs is taken at risk factor level. The formula is computed twice: first, it aggregates all buckets except residual, then it is applied to the residual bucket.
Lambda
Compute lambda using theta for the non-residual buckets and for the residual bucket:
$$\lambda =( \left ( \Phi_{99.5}^{-1} \right )^2-1)(1+\theta)-\theta$$
Curvature margin partials
Compute $S_b$ similar to the delta margin calculation for each bucket:
$$S_b = max \left ( min \left ( K_b, \text{net } CVR_b\right ), -K_b \right )$$
Compute Curvature Margin residual and Curvature margin non-res:
$$CurvatureMargin =max\left ( \sum_{b,k} CVR_{b,k} + \lambda \cdot \sqrt{\sum_{b}K_{b}^{2} + \sum_{b}{\sum_{c \neq b} \gamma_{b,c}^2 \cdot S_{b} \cdot S_{c}}} ,0 \right )$$
The formula is computed twice: first, it aggregates all buckets except residual, then it is applied to the residual bucket.
Curvature margins
Sum up the partials for the non-residual buckets and the residual bucket:
$$CurvatureMargin = CurvatureMargin_{non-residual} + CurvatureMargin_{residual}$$
Risk class level margin
Sum up Delta, Vega, BaseCorr, and Curvature margins to obtain risk class level margin.
$$IM_{RiskClass} = DeltaMargin_{RiskClass} + VegaMargin_{RiskClass}+ CurvatureMargin_{RiskClass}+ BaseCorrMargin_{RiskClass}$$
Product level margin
Roll up risk class margins using variance covariance formula to obtain product level margin:
$$SIMM_{product} = \sqrt{\sum_r IM_r^2+\sum_r \sum_{s \neq r} \psi_{r,s} IM_r IM_s}$$
where parameter $\psi$ is looked up based on a pair of risk classes.
Total SIMM margin
Finally, the SIMM margin for a netting set is computed as follows:
$$SIMM = SIMM_{RatesFX} + SIMM_{Credit} + SIMM_{Equity} + SIMM_{Commodity}$$
-
Licensed from International Swaps and Derivatives Association, Inc., All Rights Reserved. Please note that your use of this ISDA SIMM(tm) service or product for calculating your firm’s initial margin pursuant to applicable regulations requires a license from the International Swaps and Derivatives Association, Inc. (ISDA), which may be obtained by contacting isdalegal@isda.org. Licensing the ISDA SIMM provides documentation and support required to properly implement and maintain the ISDA SIMM(tm). ↩︎