Create saccr Object and Compute Regulatory Values for Multiple Asset Classes with Netting Set, Collateral Set, and Collateral Positions
This example shows how to create a saccr object for trades from multiple asset classes with a netting set, collateral set, and collateral positions. The trades are:
Tr001— Asset class (IR), 10 Year Interest Rate Swap in EURTr002— Asset class (FX), EUR/GBP Forward FX Swap (Trade Decomposition "1b")Tr003— Asset class (CR_SN), Single name CDS on Spain (Short Protection)Tr004— Asset class (CR_IX), CDS iTraxx Europe Crossover Index Receiver OptionTr005— Asset class (EQ_SN), Long Call Option on AAPLTr006— Asset class (EQ_IX), Long Put Option on S&P500 IndexTr007_SOpt— Asset class (CO), Long Put Option on CORN (sold option with premium paid)
These trades are in Portfolio 7. The portfolio uses the Standardized Approach for Counterparty Credit Risk (SA-CCR) framework and has one netting set (N001), one collateral set (CSA01), and three collateral positions (ColPos01, ColPos02, ColPos03).
Define Data
Define the foreign exchange (FX) spot currency exchange rate table.
format("default"); Base = ["EUR";"GBP";"GBP"]; Quote = ["USD";"USD";"EUR"]; SpotRate = [1.0543;1.2195;1.1567]; FXSpotTable = table(Base,Quote,SpotRate)
FXSpotTable=3×3 table
Base Quote SpotRate
_____ _____ ________
"EUR" "USD" 1.0543
"GBP" "USD" 1.2195
"GBP" "EUR" 1.1567
Define the SA-CCR CRIF file
SACCRCRIF = "SACCR_CRIF_Port_7.csv";Create saccr Object
Construct the saccr object from SACCRCRIF.
mySACCR = saccr(SACCRCRIF, DomesticCurrency="USD", FXSpot=FXSpotTable)mySACCR =
saccr with properties:
CRIF: [22×19 table]
NumPortfolios: 1
PortfolioIDs: "Port_007"
CounterpartyIDs: ""
Portfolios: [1×1 saccr.Portfolio]
Regulation: "Basel_CRE52"
DomesticCurrency: "USD"
Alpha: 1.4000
FXSpotRates: [3×3 table]
TradeDecompositions: [5×2 table]
CollateralHaircuts: [200×6 table]
SupervisoryParameters: [19×7 table]
MaturityBusinessDaysFloor: 10
NumBusinessDaysYear: 250
Display the contents of the SA-CCR CRIF file.
mySACCR.CRIF
ans=22×19 table
PortfolioID TradeID CounterpartyName CounterpartyID NettingSetNumber RiskType Category Qualifier Bucket Label1 Label2 Amount AmountCurrency AmountUSD Regulation Model ValuationDate EndDate Label3
___________ __________ ________________ ______________ ________________ ________ ___________ _____________________________ _________ _________ _________ __________ ______________ __________ ________________ ________ _____________ _______ ______
"Port_007" "ColPos01" <missing> <missing> "N001_CSA01" "COLL" "VM" <missing> <missing> <missing> "CASH" 2e+05 "USD" 2e+05 "Basel (CRE 52)" "SA-CCR" 2023-10-16 NaN NaN
"Port_007" "ColPos02" <missing> <missing> "N001_CSA01" "COLL" "VM" <missing> <missing> <missing> "CASH" 1.5e+05 "EUR" 1.5814e+05 "Basel (CRE 52)" "SA-CCR" 2023-10-16 NaN NaN
"Port_007" "ColPos03" <missing> <missing> "N001_CSA01" "COLL" "IM" "SOVEREIGN" "AAA" <missing> "BOND" 5e+05 "USD" 5e+05 "Basel (CRE 52)" "SA-CCR" 2023-10-16 1.5 NaN
"Port_007" "CSA01" <missing> <missing> "N001_CSA01" "COLL" "DIRECTION" <missing> <missing> "MUTUAL" <missing> NaN <missing> NaN "Basel (CRE 52)" "SA-CCR" 2023-10-16 NaN NaN
"Port_007" "CSA01" <missing> <missing> "N001_CSA01" "COLL" "MPOR" <missing> <missing> "10" <missing> NaN <missing> NaN "Basel (CRE 52)" "SA-CCR" 2023-10-16 NaN NaN
"Port_007" "CSA01" <missing> <missing> "N001_CSA01" "COLL" "MTA" <missing> <missing> <missing> <missing> 0 "USD" 0 "Basel (CRE 52)" "SA-CCR" 2023-10-16 NaN NaN
"Port_007" "CSA01" <missing> <missing> "N001_CSA01" "COLL" "TA" <missing> <missing> <missing> <missing> 0 "USD" 0 "Basel (CRE 52)" "SA-CCR" 2023-10-16 NaN NaN
"Port_007" "Tr001" <missing> <missing> "N001_CSA01" "IR" "EUR" "EUR" <missing> "0" "10" 3.1478e+07 "EUR" 3.3187e+07 "Basel (CRE 52)" "SA-CCR" 2023-10-16 10 1
"Port_007" "Tr001" <missing> <missing> "N001_CSA01" "PV" <missing> <missing> <missing> <missing> <missing> -5650.7 "EUR" -5957.5 "Basel (CRE 52)" "SA-CCR" 2023-10-16 NaN NaN
"Port_007" "Tr002_01" <missing> <missing> "N001_CSA01" "FX" "EURGBP" "EURGBP" <missing> "0.5" "0.5" 1e+06 "EUR" 1.0543e+06 "Basel (CRE 52)" "SA-CCR" 2023-10-16 0.5 -1
"Port_007" "Tr002_02" <missing> <missing> "N001_CSA01" "FX" "EURGBP" "EURGBP" <missing> "0.5" "1" 1e+06 "EUR" 1.0543e+06 "Basel (CRE 52)" "SA-CCR" 2023-10-16 1 1
"Port_007" "Tr002" <missing> <missing> "N001_CSA01" "PV" <missing> <missing> <missing> <missing> <missing> 1702.2 "GBP" 2075.9 "Basel (CRE 52)" "SA-CCR" 2023-10-16 NaN NaN
"Port_007" "Tr003" <missing> <missing> "N001_CSA01" "CR_SN" "CREDIT" "SPAIN" "A" "0" "5" 2.212e+07 "EUR" 2.3321e+07 "Basel (CRE 52)" "SA-CCR" 2023-10-16 5 -1
"Port_007" "Tr003" <missing> <missing> "N001_CSA01" "PV" <missing> <missing> <missing> <missing> <missing> -62783 "EUR" -66192 "Basel (CRE 52)" "SA-CCR" 2023-10-16 NaN NaN
"Port_007" "Tr004" <missing> <missing> "N001_CSA01" "CR_IX" "CREDIT" "CDS iTraxx Europe Crossover" "SG" "0.5" "4.5" 3.5359e+07 "EUR" 3.7279e+07 "Basel (CRE 52)" "SA-CCR" 2023-10-16 4.5 -0.4
"Port_007" "Tr004" <missing> <missing> "N001_CSA01" "PV" <missing> <missing> <missing> <missing> <missing> 5.2464e+05 "EUR" 5.5313e+05 "Basel (CRE 52)" "SA-CCR" 2023-10-16 NaN NaN
⋮
Display Portfolio
Display the Portfolio object for Port_007.
mySACCR.Portfolios
ans =
Portfolio with properties:
ID: "Port_007"
CounterpartyID: ""
Trades: [7×1 saccr.Trade]
NettingSets: [1×1 saccr.NettingSet]
AssetClasses: [7×1 string]
Display Netting Set
The NettingSet object for all trades is N001. Display the details for this netting set.
mySACCR.Portfolios(1).NettingSets
ans =
NettingSet with properties:
ID: "N001"
CollateralSets: [1×1 saccr.CollateralSet]
Display Collateral Set
The CollateralSet object for all trades is CSA01. Display the details for this collateral set.
mySACCR.Portfolios(1).NettingSets.CollateralSets
ans =
CollateralSet with properties:
ID: "CSA01"
NettingSetID: "N001"
Direction: "MUTUAL"
Threshold: 0
ThresholdCurrency: "USD"
MTA: 0
MTACurrency: "USD"
MPOR: 10
STM: 0
CollateralPositions: [3×1 saccr.CollateralPosition]
Display Collateral Positions
Display the CollateralPositions objects (ColPos01, ColPos02, ColPos03) for the collateral set (CSA01).
mySACCR.Portfolios(1).NettingSets.CollateralSets.CollateralPositions(1)
ans =
CollateralPosition with properties:
ID: "ColPos01"
NettingSetID: "N001"
CollateralSetID: "CSA01"
MarginType: "VM"
Currency: "USD"
Notional: 200000
NotionalUSD: 200000
MaturityTime: NaN
Segregated: 0
Rating: <missing>
AssetType: "CASH"
SubType: <missing>
ResidualMaturity: [0×0 string]
mySACCR.Portfolios(1).NettingSets.CollateralSets.CollateralPositions(2)
ans =
CollateralPosition with properties:
ID: "ColPos02"
NettingSetID: "N001"
CollateralSetID: "CSA01"
MarginType: "VM"
Currency: "EUR"
Notional: 150000
NotionalUSD: 158145
MaturityTime: NaN
Segregated: 0
Rating: <missing>
AssetType: "CASH"
SubType: <missing>
ResidualMaturity: [0×0 string]
mySACCR.Portfolios(1).NettingSets.CollateralSets.CollateralPositions(3)
ans =
CollateralPosition with properties:
ID: "ColPos03"
NettingSetID: "N001"
CollateralSetID: "CSA01"
MarginType: "IM"
Currency: "USD"
Notional: 500000
NotionalUSD: 500000
MaturityTime: 1.5000
Segregated: 0
Rating: "AAA"
AssetType: "BOND"
SubType: "SOVEREIGN"
ResidualMaturity: "> 1Y, <= 3Y"
Display Trades
Display the Trade objects for Tr001, Tr004, and Tr007_SOpt.
mySACCR.Portfolios.Trades(1)
ans =
Trade with properties:
ID: "Tr001"
NettingSetID: "N001"
CollateralSetID: "CSA01"
AssetClass: "IR"
SubClass: <missing>
HedgingSet: "EUR"
Qualifier: "EUR"
AdjustedNotional: 3.1478e+07
AdjustedNotionalCurrency: "EUR"
AdjustedNotionalUSD: 3.3187e+07
PV: -5.6507e+03
PVCurrency: "EUR"
PVUSD: -5.9575e+03
StartTime: 0
EndTime: 10
MaturityTime: 10
SupervisoryDelta: 1
InputVariant: "1a"
SoldOption: 0
MaturityFactorUncollateralized: 1
MaturityFactorCollateralized: 0.3000
MaturityBucket: "B3: > 5Y"
mySACCR.Portfolios.Trades(4)
ans =
Trade with properties:
ID: "Tr004"
NettingSetID: "N001"
CollateralSetID: "CSA01"
AssetClass: "CR_IX"
SubClass: "SG"
HedgingSet: "CREDIT"
Qualifier: "CDS iTraxx Europe Crossover"
AdjustedNotional: 3.5359e+07
AdjustedNotionalCurrency: "EUR"
AdjustedNotionalUSD: 3.7279e+07
PV: 5.2464e+05
PVCurrency: "EUR"
PVUSD: 5.5313e+05
StartTime: 0.5000
EndTime: 4.5000
MaturityTime: 4.5000
SupervisoryDelta: -0.4000
InputVariant: "1a"
SoldOption: 0
MaturityFactorUncollateralized: 1
MaturityFactorCollateralized: 0.3000
MaturityBucket: [0×1 string]
mySACCR.Portfolios.Trades(7)
ans =
Trade with properties:
ID: "Tr007_SOpt"
NettingSetID: "N001"
CollateralSetID: "CSA01"
AssetClass: "CO"
SubClass: "AGRICULTURAL"
HedgingSet: "AGRI"
Qualifier: "CORN"
AdjustedNotional: 1.0435e+05
AdjustedNotionalCurrency: "USD"
AdjustedNotionalUSD: 1.0435e+05
PV: -9.7215e+03
PVCurrency: "USD"
PVUSD: -9.7215e+03
StartTime: 0
EndTime: 0.5000
MaturityTime: 0.5000
SupervisoryDelta: -0.3600
InputVariant: "1a"
SoldOption: 1
MaturityFactorUncollateralized: 0.7071
MaturityFactorCollateralized: 0.3000
MaturityBucket: [0×1 string]
Compute Replacement Cost
Compute replacement cost (RC) component results using rc.
RCResults = rc(mySACCR)
RCResults =
RCResults with properties:
NumPortfolios: 1
PortfolioIDs: "Port_007"
CounterpartyIDs: ""
Regulation: "Basel_CRE52"
DomesticCurrency: "USD"
RCUncollateralized: 2.3972e+05
RCCollateralized: 0
Compute Add-On Component
Compute add-on component results using addOn.
AddOnResults = addOn(mySACCR)
AddOnResults =
AddOnResults with properties:
NumPortfolios: 1
PortfolioIDs: "Port_007"
CounterpartyIDs: ""
Regulation: "Basel_CRE52"
DomesticCurrency: "USD"
AddOnAggregateUncollateralized: 1.1177e+06
AddOnAggregateCollateralized: 3.3218e+05
AddOnAssetClassesUncollateralized: [1×1 saccr.AddOnAssetClassResults]
AddOnAssetClassesCollateralized: [1×1 saccr.AddOnAssetClassResults]
Compute PFE
Compute potential future exposure (PFE) component results using pfe.
PFEResults = pfe(mySACCR)
PFEResults =
PFEResults with properties:
NumPortfolios: 1
PortfolioIDs: "Port_007"
CounterpartyIDs: ""
Regulation: "Basel_CRE52"
DomesticCurrency: "USD"
PFEUncollateralized: 1.1177e+06
PFECollateralized: 2.6710e+05
MultiplierUncollateralized: 1
MultiplierCollateralized: 0.8041
AddOnResults: [1×1 saccr.AddOnResults]
Compute EAD and Display Results
Compute exposure at default (EAD) results using ead and show the results table.
EADResults = ead(mySACCR)
EADResults =
EADResults with properties:
NumPortfolios: 1
PortfolioIDs: "Port_007"
CounterpartyIDs: ""
Regulation: "Basel_CRE52"
DomesticCurrency: "USD"
EAD: 3.7394e+05
Alpha: 1.4000
RC: 0
PFE: 2.6710e+05
Multiplier: 0.8041
AddOnAggregate: 3.3218e+05
RCResults: [1×1 saccr.RCResults]
PFEResults: [1×1 saccr.PFEResults]
ResultsTable: [1×17 table]
EADResults.ResultsTable
ans=1×17 table
PortfolioIDs CounterpartyIDs Regulation DomesticCurrency EAD Alpha RC PFE Multiplier AddOnAggregate AddOnIR AddOnFX AddOnCR AddOnEQ AddOnCO Collateralized UsedCollateral
____________ _______________ _____________ ________________ __________ _____ __ _________ __________ ______________ _______ _______ _______ __________ _______ ______________ ______________
"Port_007" "" "Basel_CRE52" "USD" 3.7394e+05 1.4 0 2.671e+05 0.80408 3.3218e+05 49780 0 65013 2.1536e+05 2028.6 true true
See Also
rc | addOn | pfe | ead | addOnChart | eadChart | pfeChart | rcChart | frtbsa
Topics
- Framework for Standardized Approach to Calculating Counterparty Credit Risk: Introduction
- Create saccr Object and Compute Regulatory Values for Interest-Rate Swap
- Create saccr Object and Compute Regulatory Values for Forward FX Swap
- Create saccr Object and Compute Regulatory Values for Two CDS Trades
- Create saccr Object and Compute Regulatory Values for Multiple Asset Classes
- Create saccr Object and Compute Regulatory Values for Multiple Asset Classes with Netting Set
- Create saccr Object and Compute Regulatory Values for Multiple Asset Classes with Netting Set and Collateral Set
- Create saccr Object and Compute Regulatory Values for Multiple Portfolios Containing Multiple Asset Classes
- SA-CCR Transactional Elements
- ISDA SA-CCR CRIF File Specifications