Compute Capital Risk Charge Using FRTB-SA Framework
This example creates a frtbsa
object and uses the ISDA® FRTB-SA framework to support the workflows for calculating capital market risk charge. FRTB-SA (Standardized Approach for Fundamental Review of Trading Book) is a Basel Committee on Banking Supervision framework for calculating market capital risk requirements that is based on a set of standardized risk factors. To calculate the total market risk charge, you need to use only the charge
method. However, for the purpose of illustration, this example also demonstrates the frtbsa
component methods (sbm
, drc
, rrao
).
Create frtbsa Object
Use bank format to display numeric data using two decimal places.
format bank
Define the ISDA® FRTB-SA CRIF file.
FRTBSACRIF = "FRTBSA_CRIF.csv";
Define the DRC reference date.
DrcRefCOBDate = datetime(2023,9,21);
Use frtbsa
to create the FRTB-SA object.
myFRTBSA = frtbsa(FRTBSACRIF,DRCValuationDate=DrcRefCOBDate)
myFRTBSA = frtbsa with properties: CRIF: [159×18 table] NumPortfolios: 2.00 PortfolioIDs: [2×1 string] Portfolios: [2×1 frtbsa.Portfolio] Regulation: "Basel_d491" DomesticCurrency: "USD" DRCValuationDate: 21-Sep-2023 NumDaysYear: 365.00
Examine Output
Display the contents of the ISDA FRTB-SA CRIF file.
myFRTBSA.CRIF
ans=159×18 table
PortfolioID TradeID Variant SensitivityID RiskType Qualifier Bucket Label1 Label2 Amount AmountCurrency AmountUSD Label3 EndDate CreditQuality LongShortInd CoveredBondInd TrancheThickness
___________ ________ ____________ _____________ ____________ __________ ______ _________ ___________ _________ ______________ _________ ______ _______ _____________ ____________ ______________ ________________
"P1" "EQD_a1" <missing> "P1_EQD_a1" "EQ_DELTA" "ISSUER A" "1" <missing> "SPOT" 8250.00 "USD" 8250.00 NaN NaT <missing> <missing> <missing> NaN
"P1" "EQD_a2" <missing> "P1_EQD_a2" "EQ_DELTA" "ISSUER A" "1" <missing> "REPO" 8333.33 "USD" 8333.33 NaN NaT <missing> <missing> <missing> NaN
"P1" "EQD_b1" <missing> "P1_EQD_b1" "EQ_DELTA" "ISSUER B" "2" <missing> "SPOT" 22000.00 "USD" 22000.00 NaN NaT <missing> <missing> <missing> NaN
"P1" "EQV_a1" "Variant 1" "P1_EQV_a1" "EQ_VEGA" "ISSUER A" "1" "0.5" <missing> -50.00 "USD" -50.00 NaN NaT <missing> <missing> <missing> NaN
"P1" "EQV_a2" "Variant 1" "P1_EQV_a2" "EQ_VEGA" "ISSUER A" "1" "1" <missing> 200.00 "USD" 200.00 NaN NaT <missing> <missing> <missing> NaN
"P1" "EQV_b1" "Variant 1" "P1_EQV_b1" "EQ_VEGA" "ISSUER B" "2" "0.5" <missing> -166.67 "USD" -166.67 NaN NaT <missing> <missing> <missing> NaN
"P1" "EQC_a1" "Variant 1a" "P1_EQC_a1" "EQ_CURV" "ISSUER A" "1" "0.5" <missing> -18910.00 "USD" -18910.00 NaN NaT <missing> <missing> <missing> NaN
"P1" "EQC_a1" "Variant 1a" "P1_EQC_a1" "EQ_CURV" "ISSUER A" "1" "-0.5" <missing> 6526.25 "USD" 6526.25 NaN NaT <missing> <missing> <missing> NaN
"P1" "EQC_b1" "Variant 1a" "P1_EQC_b1" "EQ_CURV" "ISSUER B" "2" "0.5" <missing> -6288.00 "USD" -6288.00 NaN NaT <missing> <missing> <missing> NaN
"P1" "EQC_b1" "Variant 1a" "P1_EQC_b1" "EQ_CURV" "ISSUER B" "2" "-0.5" <missing> 6120.00 "USD" 6120.00 NaN NaT <missing> <missing> <missing> NaN
"P1" "CMD_a1" <missing> "P1_CMD_a1" "COMM_DELTA" "COAL" "1" "0" "NEWCASTLE" 2000.00 "USD" 2000.00 NaN NaT <missing> <missing> <missing> NaN
"P1" "CMD_a2" <missing> "P1_CMD_a2" "COMM_DELTA" "COAL" "1" "0" "LONDON" -500.00 "USD" -500.00 NaN NaT <missing> <missing> <missing> NaN
"P1" "CMD_b1" <missing> "P1_CMD_b1" "COMM_DELTA" "BRENT" "2" "0" "LE HAVRE" 666.67 "USD" 666.67 NaN NaT <missing> <missing> <missing> NaN
"P1" "CMD_c1" <missing> "P1_CMD_c1" "COMM_DELTA" "WTI" "2" "2" "OKLAHOMA" -875.00 "USD" -875.00 NaN NaT <missing> <missing> <missing> NaN
"P1" "CMV_a1" "Variant 1" "P1_CMV_a1" "COMM_VEGA" "COAL" "1" "0.5" <missing> 333.33 "USD" 333.33 NaN NaT <missing> <missing> <missing> NaN
"P1" "CMV_a2" "Variant 1" "P1_CMV_a2" "COMM_VEGA" "COAL" "1" "1" <missing> -100.00 "USD" -100.00 NaN NaT <missing> <missing> <missing> NaN
⋮
Display the number of portfolios and their IDs.
myFRTBSA.NumPortfolios
ans = 2.00
myFRTBSA.PortfolioIDs
ans = 2×1 string
"P1"
"P2"
Display the properties of the first Portfolio
object.
myFRTBSA.Portfolios(1)
ans = Portfolio with properties: PortfolioID: "P1" Trades: [69×1 frtbsa.Trade] RiskTypes: [69×1 string]
Display risk types of the portfolio.
myFRTBSA.Portfolios(1).RiskTypes
ans = 69×1 string
"EQ_DELTA"
"EQ_DELTA"
"EQ_DELTA"
"EQ_VEGA"
"EQ_VEGA"
"EQ_VEGA"
"EQ_CURV"
"EQ_CURV"
"COMM_DELTA"
"COMM_DELTA"
"COMM_DELTA"
"COMM_DELTA"
"COMM_VEGA"
"COMM_VEGA"
"COMM_VEGA"
"COMM_VEGA"
"COMM_CURV"
"COMM_CURV"
"COMM_CURV"
"GIRR_DELTA"
"GIRR_DELTA"
"GIRR_DELTA"
"GIRR_VEGA"
"GIRR_VEGA"
"GIRR_VEGA"
"GIRR_CURV"
"GIRR_CURV"
"FX_DELTA"
"FX_DELTA"
"FX_VEGA"
⋮
Display some of the trades of the portfolio.
myFRTBSA.Portfolios(1).Trades(1)
ans = Trade with properties: TradeID: "EQD_a1" Variant: <missing> SensitivityID: "P1_EQD_a1" RiskType: "EQ_DELTA" Qualifier: "ISSUER A" Bucket: "1" Label1: <missing> Label2: "SPOT" Amount: 8250.00 AmountCurrency: "USD" AmountUSD: 8250.00 Label3: NaN EndDate: NaT CreditQuality: <missing> LongShortInd: <missing> CoveredBondInd: <missing> TrancheThickness: NaN
myFRTBSA.Portfolios(1).Trades(30)
ans = Trade with properties: TradeID: "FXV_b1" Variant: "Variant 1" SensitivityID: "P1_FXV_b1" RiskType: "FX_VEGA" Qualifier: "EURCLP" Bucket: <missing> Label1: "0.5" Label2: <missing> Amount: 175.00 AmountCurrency: "USD" AmountUSD: 175.00 Label3: NaN EndDate: NaT CreditQuality: <missing> LongShortInd: <missing> CoveredBondInd: <missing> TrancheThickness: NaN
myFRTBSA.Portfolios(1).Trades(60)
ans = Trade with properties: TradeID: "RRAO_a2" Variant: <missing> SensitivityID: "P1_RRAO_a2" RiskType: "RRAO_01_PERCENT" Qualifier: <missing> Bucket: <missing> Label1: <missing> Label2: <missing> Amount: 300000.00 AmountCurrency: "USD" AmountUSD: 300000.00 Label3: NaN EndDate: NaT CreditQuality: <missing> LongShortInd: <missing> CoveredBondInd: <missing> TrancheThickness: NaN
Compute DRC Charge
The default risk capital (DRC) charge captures the risk of default of issuers of debt and equity instruments in the trading book. Use drc
to compute the DRC charge for each portfolio using the previously created frtbsa
object.
DRCResults = drc(myFRTBSA)
DRCResults = drcResults with properties: NumPortfolios: 2.00 PortfolioIDs: [2×1 string] Regulation: "Basel_d491" DomesticCurrency: "USD" Charges: [2×1 double] ComponentResults: [2×1 frtbsa.drcPortfolioResults] ResultsTable: [2×4 table]
The Charges
output contains the DRC risk charge of the portfolios.
DRCResults.Charges
ans = 2×1
177008.51
51024.29
The ResultsTable
output contains the high-level risk DRC charge calculations of the portfolios.
DRCResults.ResultsTable
ans=2×4 table
PortfolioIDs Total NS SNC
____________ _________ ________ _________
"P1" 177008.51 20750.00 156258.51
"P2" 51024.29 20750.00 30274.29
The
ComponentResults
output contains the detailed DRC risk charge information for a given portfolio.
Examine the DRC risk charge for the first portfolio.
DRCResults.ComponentResults(1)
ans = drcPortfolioResults with properties: PortfolioID: "P1" Charge: 177008.51 ChargeByCreditClass: [2×2 table] IntrabucketCharges: [1×1 struct]
Display charges by credit class. Portfolio P1
has non-securitization and securitization non-correlation trading portfolio (non-CTP) trades.
DRCResults.ComponentResults(1).ChargeByCreditClass
ans=2×2 table
CreditClass Charge
___________ _________
"NS" 20750.00
"SNC" 156258.51
Display the intrabucket charges for the non-securitization trades.
DRCResults.ComponentResults(1).IntrabucketCharges.NS
ans=2×4 table
Bucket NetLongJtd NetShortJdt Charge
____________ __________ ___________ ________
"CORPORATES" 12750.00 0.00 12750.00
"SOVEREIGNS" 8000.00 0.00 8000.00
Display the intrabucket charges for the securitization non-CTP trades.
DRCResults.ComponentResults(1).IntrabucketCharges.SNC
ans=1×9 table
Bucket NonSeniorLongJtd NonSeniorShortJtd SeniorLongJtd SeniorShortJtd NetLongJtd NetShortJtd HBR Charge
____________ ________________ _________________ _____________ ______________ __________ ___________ ____ _________
"CORPORATES" 0.00 0.00 746666.67 -300000.00 746666.67 300000.00 0.71 156258.51
Compute RRAO Capital Charge
The residual risk add-on (RRAO) charge covers risks that are not fully captured by the other components of the FRTB capital charges, particularly those arising from positions with exotic or nonlinear payoffs, as well as other risks that are deemed to be residual in nature. Use rrao
to compute the RRAO charge results for each portfolio using the previously created frtbsa
object.
RRAOResults = rrao(myFRTBSA)
RRAOResults = rraoResults with properties: NumPortfolios: 2.00 PortfolioIDs: [2×1 string] Regulation: "Basel_d491" DomesticCurrency: "USD" Charges: [2×1 double] ComponentResults: [2×1 frtbsa.rraoPortfolioResults] ResultsTable: [2×4 table]
The Charges
output contains the RRAO risk charge of the portfolio.
RRAOResults.Charges
ans = 2×1
3310.00
2800.00
The ResultsTable
output contains the high-level risk RRAO charge calculations of the portfolios.
RRAOResults.ResultsTable
ans=2×4 table
PortfolioIDs Total Exotic ORR
____________ _______ _______ ______
"P1" 3310.00 3000.00 310.00
"P2" 2800.00 2500.00 300.00
The ComponentResults
output contains detailed RRAO risk charge information for a given portfolio.
Examine the RRAO risk charge for the first portfolio.
RRAOResults.ComponentResults(1)
ans = rraoPortfolioResults with properties: PortfolioID: "P1" Charge: 3310.00 ChargeBySensitivityID: [4×5 table] ChargeByInstrumentType: [2×2 table]
Display charges by instrument type. Portfolio P1
has both exotic underlying instruments and other residual risk instruments.
RRAOResults.ComponentResults(1).ChargeByInstrumentType
ans=2×2 table
InstrumentType Charge
______________ _______
"Exotic" 3000.00
"ORR" 310.00
Compute SBM Risk Capital Charge
Under the sensitivity-based market (SBM), banks calculate capital charges based on the sensitivities of their trading book positions to various risk factors. Use sbm
to compute the SBM charge results for each portfolio using the previously created frtbsa
object.
SBMResults = sbm(myFRTBSA)
SBMResults = sbmResults with properties: NumPortfolios: 2.00 PortfolioIDs: [2×1 string] Regulation: "Basel_d491" DomesticCurrency: "USD" Charges: [2×1 double] ComponentResults: [2×1 frtbsa.sbmPortfolioResults] ResultsTable: [2×10 table]
The Charges
output contains the SBM risk charge of the portfolios.
SBMResults.Charges
ans = 2×1
124519.56
122514.96
The ResultsTable
output contains the high-level risk SBM charge calculations of the portfolio.
SBMResults.ResultsTable
ans=2×10 table
PortfolioID Correlation Total GIRR CSR_NS CSR_SC CSR_SNC FX EQ COMM
___________ ___________ _________ ________ ______ ________ ________ ________ ________ _______
"P1" "Low" 124519.56 10183.45 815.24 40425.33 20169.47 21532.62 23991.46 7401.98
"P2" "Low" 122514.96 9941.02 503.07 40425.33 20169.47 21532.62 23954.45 5988.99
The ComponentResults
output contains detailed SBM risk charge information for a given portfolio.
Examine the SBM risk charge for the first portfolio.
SBMResults.ComponentResults(1)
ans = sbmPortfolioResults with properties: PortfolioID: "P1" Charge: 124519.56 ChargeByCorrelation: [1×1 struct] ChargeByRiskClass: [21×5 table] IntrabucketCharges: [1×1 struct]
Display the charges by risk class.
SBMResults.ComponentResults(1).ChargeByRiskClass
ans=21×5 table
RiskClass RiskMeasure LowCorrelation MediumCorrelation HighCorrelation
_________ ___________ ______________ _________________ _______________
"GIRR" "Delta" 342.95 334.39 338.69
"GIRR" "Vega" 516.67 514.22 515.45
"GIRR" "Curvature" 9323.83 9323.83 9323.83
"CSR_NS" "Delta" 265.17 262.20 263.68
"CSR_NS" "Vega" 130.96 129.28 130.12
"CSR_NS" "Curvature" 419.11 418.46 418.79
"CSR_SC" "Delta" 590.07 575.70 582.93
"CSR_SC" "Vega" 198.82 195.75 197.29
"CSR_SC" "Curvature" 39636.44 39634.87 39635.66
"CSR_SNC" "Delta" 456.21 455.99 456.10
"CSR_SNC" "Vega" 506.86 489.20 498.11
"CSR_SNC" "Curvature" 19206.41 19206.41 19206.41
"FX" "Delta" 8.84 8.84 8.84
"FX" "Vega" 150.00 150.00 150.00
"FX" "Curvature" 21373.78 21373.78 21373.78
"EQ" "Delta" 14762.60 14451.94 14608.10
⋮
Display the low correlation scenario charges.
SBMResults.ComponentResults(1).ChargeByCorrelation.Low
ans=8×4 table
Delta Vega Curvature Charge
________ _______ _________ _________
GIRR 342.95 516.67 9323.83 10183.45
CSR_NS 265.17 130.96 419.11 815.24
CSR_SC 590.07 198.82 39636.44 40425.33
CSR_SNC 456.21 506.86 19206.41 20169.47
FX 8.84 150.00 21373.78 21532.62
EQ 14762.60 157.31 9071.55 23991.46
COMM 437.51 234.97 6729.51 7401.98
Total 16863.33 1895.59 105760.63 124519.56
Display the intrabucket charges for this portfolio for the equity class and the delta risk sensitivity.
SBMResults.ComponentResults(1).IntrabucketCharges.EQ.Delta
ans=2×5 table
Bucket Sb LowCorrelation MediumCorrelation HighCorrelation
______ ________ ______________ _________________ _______________
1.00 4583.33 4583.24 4583.29 4583.33
2.00 13200.00 13200.00 13200.00 13200.00
Display the intrabucket charges for this portfolio for the GIRR
class and the vega risk sensitivity.
SBMResults.ComponentResults(1).IntrabucketCharges.GIRR.Vega
ans=1×5 table
Bucket Sb LowCorrelation MediumCorrelation HighCorrelation
______ ______ ______________ _________________ _______________
"USD" 516.67 514.22 515.45 516.67
Compute Market Risk Capital Charge
The charge is the sum of the capital charges for all risk factor categories, plus any applicable add-ons. Use charge
to compute the capital market risk charge for all portfolios in the frtbsa
object.
ChargeResults = charge(myFRTBSA)
ChargeResults = chargeResults with properties: NumPortfolios: 2.00 PortfolioIDs: [2×1 string] Regulation: "Basel_d491" DomesticCurrency: "USD" Charges: [2×1 double] ComponentResults: [2×1 frtbsa.chargePortfolioResults] ResultsTable: [2×5 table]
The Charges
output contains the capital risk charge of the portfolios.
ChargeResults.Charges
ans = 2×1
304838.07
176339.24
The ResultsTable
output contains the high-level risk charge calculations of the portfolios and includes the total portfolio charge, RRAO charge, DRC charge, and SBM charge.
ChargeResults.ResultsTable
ans=2×5 table
PortfolioID Total RRAO DRC SBM
___________ _________ _______ _________ _________
"P1" 304838.07 3310.00 177008.51 124519.56
"P2" 176339.24 2800.00 51024.29 122514.96
The ComponentResults
output contains detailed capital risk charge information for a given portfolio.
Examine the market risk capital charge for the second portfolio.
ChargeResults.ComponentResults(2)
ans = chargePortfolioResults with properties: PortfolioID: "P2" Charge: 176339.24 SBM: [1×1 frtbsa.sbmPortfolioResults] DRC: [1×1 frtbsa.drcPortfolioResults] RRAO: [1×1 frtbsa.rraoPortfolioResults]
Examine the SBM
component of this portfolio.
ChargeResults.ComponentResults(2).SBM
ans = sbmPortfolioResults with properties: PortfolioID: "P2" Charge: 122514.96 ChargeByCorrelation: [1×1 struct] ChargeByRiskClass: [21×5 table] IntrabucketCharges: [1×1 struct]
Display charges by risk class.
ChargeResults.ComponentResults(2).SBM.ChargeByRiskClass
ans=21×5 table
RiskClass RiskMeasure LowCorrelation MediumCorrelation HighCorrelation
_________ ___________ ______________ _________________ _______________
"GIRR" "Delta" 300.52 296.23 298.38
"GIRR" "Vega" 316.67 316.67 316.67
"GIRR" "Curvature" 9323.83 9323.83 9323.83
"CSR_NS" "Delta" 62.50 62.47 62.48
"CSR_NS" "Vega" 46.67 47.79 47.24
"CSR_NS" "Curvature" 393.90 393.90 393.90
"CSR_SC" "Delta" 590.07 575.70 582.93
"CSR_SC" "Vega" 198.82 195.75 197.29
"CSR_SC" "Curvature" 39636.44 39634.87 39635.66
"CSR_SNC" "Delta" 456.21 455.99 456.10
"CSR_SNC" "Vega" 506.86 489.20 498.11
"CSR_SNC" "Curvature" 19206.41 19206.41 19206.41
"FX" "Delta" 8.84 8.84 8.84
"FX" "Vega" 150.00 150.00 150.00
"FX" "Curvature" 21373.78 21373.78 21373.78
"EQ" "Delta" 14740.74 14432.78 14587.58
⋮
Examine the DRC
component of this portfolio.
ChargeResults.ComponentResults(2).DRC
ans = drcPortfolioResults with properties: PortfolioID: "P2" Charge: 51024.29 ChargeByCreditClass: [2×2 table] IntrabucketCharges: [1×1 struct]
Display charges by credit class.
ChargeResults.ComponentResults(2).DRC.ChargeByCreditClass
ans=2×2 table
CreditClass Charge
___________ ________
"NS" 20750.00
"SNC" 30274.29
Examine the RRAO
component of this portfolio.
ChargeResults.ComponentResults(2).RRAO
ans = rraoPortfolioResults with properties: PortfolioID: "P2" Charge: 2800.00 ChargeBySensitivityID: [2×5 table] ChargeByInstrumentType: [2×2 table]
Display charges by instrument type.
ChargeResults.ComponentResults(2).RRAO.ChargeByInstrumentType
ans=2×2 table
InstrumentType Charge
______________ _______
"Exotic" 2500.00
"ORR" 300.00
See Also
frtbsa
| charge
| sbm
| drc
| rrao
| saccr