Skip to content

Implement SA-CCR credit asset-class add-on with rating-based supervisory factors - #352

Open
adaminoff wants to merge 1 commit into
OpenSourceRisk:masterfrom
adaminoff:feature/saccr-credit-addon
Open

Implement SA-CCR credit asset-class add-on with rating-based supervisory factors#352
adaminoff wants to merge 1 commit into
OpenSourceRisk:masterfrom
adaminoff:feature/saccr-credit-addon

Conversation

@adaminoff

Copy link
Copy Markdown

Summary

The Credit branch of SaccrCalculator's add-on aggregation and the credit sub-asset-class classification in SaccrTradeData::Impl::getBucket were both left as // TODO. As a result, credit trades that SA-CCR does support at the trade-data level (e.g. BondTRS, BondRepo) produced a zero credit add-on, so the credit asset class never contributed to PFE/EAD.

This PR implements the Basel CRE52 credit add-on.

Changes

  • SaccrCalculator (saccrcalculator.cpp/.hpp) — implement the credit hedging-set add-on via the systematic/idiosyncratic decomposition:

    AddOn = sqrt( (Σ_k ρ_k·SF_k·EN_k)² + Σ_k (1-ρ_k²)·(SF_k·EN_k)² )
    

    with correlation ρ = 0.50 (single name) / 0.80 (index). The supervisory factor SF is looked up by the reference-entity rating (new creditQuality_ map populated from the CRIF records) using a CRE52.44 table: AAA/AA 0.38%, A 0.42%, BBB 0.54%, BB 1.06%, B 1.60%, CCC 6.00%; Index-IG 0.38%, Index-SG 1.06%; investment-grade default.

  • getBucket (saccrtradedata.cpp) — derive the credit rating sub-asset class from the SIMM bucket mapper (RiskType::CreditQ) when a mapping is configured for the reference-entity qualifier, falling back to IG / Index-IG.

  • SimmBucketMapperBase::fromXML (simmbucketmapperbase.cpp) — SA-CCR credit rating buckets are non-numeric labels (e.g. AA), whereas SIMM buckets are positive integers. Relax the bucket validation so the >= 1 integer check applies only to numeric buckets and rating labels are accepted as-is.

Testing

Verified end-to-end on a BondTRS referencing a single-name reference entity. Before this change the netting set's credit add-on was 0; after it, the add-on is non-zero and scales with the reference-entity rating (e.g. an AA name uses SF 0.38%, giving a credit add-on ~0.70× the previous IG-flat 0.54% assumption), flowing through to PFE and EAD as expected.

Notes

  • The single-name supervisory factors follow CRE52.44; where a per-entity rating is not available the investment-grade default is used, matching the prior placeholder behaviour but now overridable via the bucket mapper.
  • No change to IR/FX/Equity/Commodity add-ons.

🤖 Generated with Claude Code

…ory factors

The Credit branch of SaccrCalculator's add-on aggregation and the credit
sub-asset-class classification in SaccrTradeData::Impl::getBucket were both
left as `// TODO`, so any credit trade (e.g. BondTRS/BondRepo) produced a
zero credit add-on and therefore did not contribute to EAD.

This implements the Basel CRE52 credit add-on:

* SaccrCalculator: aggregate reference-entity effective notionals within the
  credit hedging set via the systematic/idiosyncratic decomposition
    AddOn = sqrt( (sum_k rho_k SF_k EN_k)^2 + sum_k (1-rho_k^2)(SF_k EN_k)^2 )
  with correlation rho = 0.50 (single name) / 0.80 (index). The supervisory
  factor SF is keyed by the reference-entity rating via a CRE52.44 lookup
  table (AAA/AA 0.38%, A 0.42%, BBB 0.54%, BB 1.06%, B 1.60%, CCC 6.00%;
  Index-IG 0.38%, Index-SG 1.06%), with an investment-grade default.

* getBucket: derive the credit rating sub-asset class from the SIMM bucket
  mapper (RiskType CreditQ) when a mapping is configured for the reference
  entity, falling back to IG / Index-IG.

* SimmBucketMapperBase::fromXML: SA-CCR credit rating buckets are non-numeric
  labels (e.g. "AA"); relax the positive-integer bucket validation so it
  applies only to numeric SIMM buckets and accepts rating labels as-is.

Verified end-to-end on a BondTRS: the credit add-on now scales with the
reference-entity rating (AA -> 0.38%) and flows through to PFE and EAD.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@pcaspers

Copy link
Copy Markdown
Collaborator

thanks, we will review this, internal reference 14391

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants