Chapter 28 — Regulatory and Accounting Frameworks

"Regulation is the market's immune system — sometimes it overreacts, sometimes it's too slow."


After this chapter you will be able to:

  • Explain the Basel III capital framework: CET1 ratio, capital conservation buffer, leverage ratio, and liquidity requirements (LCR, NSFR)
  • Describe the FRTB's key changes from Basel 2.5: ES replacing VaR, asset-class-specific liquidity horizons, desk-level IMA approval, and P&L attribution tests
  • Implement the IFRS 9 three-stage ECL model and compute provisions for performing, underperforming, and impaired loans
  • Compute regulatory capital for standardised credit risk RWA
  • Understand the scope and purpose of DFAST/CCAR stress tests

The 2008 financial crisis exposed fundamental weaknesses in bank capital regulation. Under Basel II, banks had been permitted to use their own internal models to calculate risk-weighted assets (RWA) and therefore minimum capital requirements. The incentive to understate risk was structural, and the result was catastrophic undercapitalisation across the global banking system. Governments injected over $400 billion in bank bailout funds in the US alone (under TARP), and trillions more in guarantees and liquidity facilities. The regulatory response was the most sweeping reform of bank regulation since the Glass-Steagall Act.

Basel III (finalised 2010, implemented through the 2010s) fundamentally raised the quantity and quality of required bank capital. The minimum Tier 1 capital ratio increased from 4% to 6% of RWA, plus a new capital conservation buffer of 2.5% and a countercyclical buffer of 0-2.5%. The definition of capital was tightened so that only genuinely loss-absorbing equity-like instruments qualified. Two new liquidity requirements — the Liquidity Coverage Ratio and Net Stable Funding Ratio — addressed the short-term and medium-term funding vulnerabilities that had accelerated the 2008 crisis.

For trading desks, the Fundamental Review of the Trading Book (FRTB) overhauled how market risk capital is calculated, replacing Value at Risk with Expected Shortfall at longer liquidity horizons and requiring individual desk-level model approval. For accounting, IFRS 9 replaced the old "incurred loss" provisioning model with a forward-looking expected credit loss (ECL) approach. Both changes require significant computational infrastructure to implement correctly, and the OCaml type system provides exactly the correctness guarantees needed.


28.1 Basel III Capital Framework

Under Basel III, banks must hold capital against:

  • Credit Risk (SA or IRB approach)
  • Market Risk (SA-TB or IMA under FRTB)
  • Operational Risk (SMA)

The key metrics:

$$\text{RWA}_{\text{credit}} = \text{EAD} \times \text{RW}(\text{rating}) \times 12.5$$

$$\text{CET1 ratio} = \frac{\text{CET1 capital}}{\text{RWA}} \geq 4.5%$$

module Basel = struct

  (** Standard risk weights by credit quality step (SA approach) *)
  let corporate_risk_weight credit_quality_step =
    match credit_quality_step with
    | 1 -> 0.20   (* AAA-AA: 20% *)
    | 2 -> 0.50   (* A: 50% *)
    | 3 -> 1.00   (* BBB: 100% *)
    | 4 | 5 -> 1.50  (* BB-B: 150% *)
    | _ -> 1.50   (* unrated or below B *)

  let sovereign_risk_weight cqs =
    match cqs with
    | 1 -> 0.00   (* AAA: 0% *)
    | 2 -> 0.20
    | 3 -> 0.50
    | 4 | 5 -> 1.00
    | _ -> 1.50

  (** IRB: Internal Ratings-Based approach *)
  let irb_rw ~pd ~lgd ~maturity ~correlation () =
    (* Basel II IRB corporate formula *)
    let _ph = correlation in
    let inv_pd = Numerics.norm_ppf pd in
    let inv_999 = Numerics.norm_ppf 0.999 in
    let rho = 0.12 *. (1.0 -. exp (-50.0 *. pd)) /. (1.0 -. exp (-50.0))
              +. 0.24 *. (1.0 -. (1.0 -. exp (-50.0 *. pd)) /. (1.0 -. exp (-50.0))) in
    let cond_pd = Numerics.norm_cdf
                    ((inv_pd +. sqrt rho *. inv_999) /. sqrt (1.0 -. rho)) in
    (* Maturity adjustment *)
    let b = (0.11852 -. 0.05478 *. log pd) *. (0.11852 -. 0.05478 *. log pd) in
    let ma = (1.0 +. (maturity -. 2.5) *. b) /. (1.0 -. 1.5 *. b) in
    12.5 *. lgd *. cond_pd *. ma

  (** Simplified SA-CCR for derivatives *)
  let sa_ccr_ead ~rc ~pfe_multiplier ~add_on =
    let alpha = 1.4 in  (* regulatory multiplier *)
    alpha *. (rc +. pfe_multiplier *. add_on)

  let cet1_ratio ~cet1_capital ~rwa = cet1_capital /. rwa

end

28.2 FRTB — Fundamental Review of the Trading Book

The Fundamental Review of the Trading Book (FRTB) is the Basel Committee's overhaul of market risk capital requirements, finalised in 2019 and implemented by major jurisdictions from 2025. It represents the most fundamental change to how banks calculate trading book capital since Basel II, and it is motivated by two clear failures of the Basel 2.5 regime.

Why VaR was replaced with ES. Value at Risk at 99% tells you the loss you will not exceed in 99% of scenarios — it says nothing about how badly you lose in the other 1%. During the 2008 crisis, losses in the 1% tail were far larger than expected because VaR is not a coherent risk measure: it is not subadditive (two portfolios with VaR = \$X each can combine to give VaR > \$2X). It also created incentives for VaR games — structuring positions to have small but frequent losses (all within VaR) while taking on severe tail exposure. Expected Shortfall at 97.5% (the expected loss given that you are in the tail) is subadditive and directly measures average tail loss. The FRTB's choice of 97.5% (vs 99% for VaR) is calibrated to produce broadly similar capital levels while switching to a better risk measure.

Liquidity horizons. Under Basel 2.5, all positions were assumed to be liquidable in 10 days. This was manifestly unrealistic: a large corporate bond position might take 60 days to exit without moving the market; structured credit products might take months. FRTB assigns different liquidity horizons to different risk factor classes, and the ES is scaled accordingly by $\sqrt{\text{LH}/10}$ to translate from the base 10-day horizon:

Risk FactorLiquidity Horizon
Equity large-cap10 days
Equity small-cap20 days
IG credit spread40 days
HY credit spread60 days
Structured credit120 days
FX G1010 days
FX other20 days

IMA vs Standardised Approach (SA). FRTB allows banks to use either the Internal Models Approach (IMA, using their own ES models with regulatory approval) or the Standardised Approach (SA, a prescribed formula based on sensitivities). IMA requires approval at the desk level (not just the firm level), with each trading desk proving separately that its model passes P&L attribution and backtesting tests. A desk that fails these tests loses IMA approval and must use SA — which is deliberately calibrated to produce higher capital requirements as a penalty.

P&L Attribution test. The FRTB requires each IMA desk to demonstrate that the risk model's hypothetical P&L (HPL, using the risk model to reprice the portfolio with actual market moves) closely matches the actual P&L (RTPL, risk-theoretical P&L). Two statistical tests are required: (1) the ratio of means $\bar{\text{RTPL}}/\bar{\text{HPL}}$ must be between 0.8 and 1.2, and (2) the ratio of variances must be similar (tested via Spearman correlation). Desks with poor P&L attribution signals that the risk model is missing important risk factors — perhaps the model does not capture FX gamma exposure, or the desk has structured credit not in the model.

Non-modellable risk factors (NMRFs). FRTB distinguishes between modellable risk factors (where sufficient market data exists) and NMRFs (where fewer than 24 real price observations per year are available). NMRFs attract Stressed Expected Shortfall (SES) capital, which must be computed as the 97.5th percentile of daily P&L from stress scenarios. For illiquid products, NMRFs can dominate the capital calculation.

FRTB (effective 2025) replaces VaR with Expected Shortfall and introduces a stricter P&L attribution test.

Key changes:

  • ES at 97.5% replaces VaR at 99%
  • Moving from 10-day to liquidity-adjusted horizons
  • Desk-level IMA approval with P&L attribution and backtesting tests
module Frtb = struct

  (** ES 97.5% × sqrt(liquidity horizon / base horizon) *)
  let liquidity_adjusted_es ~es_1d ~liquidity_horizon_days =
    es_1d *. sqrt (float_of_int liquidity_horizon_days)

  (** Liquidity horizons vary by asset class *)
  let liquidity_horizon = function
    | `Equity_large_cap        -> 10
    | `Equity_small_cap        -> 20
    | `Credit_ig_bond          -> 40
    | `Credit_hy_bond          -> 60
    | `Interest_rate_g10       -> 10
    | `Interest_rate_other     -> 20
    | `Fx_g10                  -> 10
    | `Fx_other                -> 20
    | `Commodity               -> 20

  (** P&L attribution test: hypothesis test that RTPL ≈ HPL *)
  let pnl_attribution_test ~rtpl_series ~hpl_series =
    let n    = float_of_int (Array.length rtpl_series) in
    let mean_diff = Array.fold_left2 (fun a r h -> a +. (r -. h)) 0.0 rtpl_series hpl_series /. n in
    let var_diff  = Array.fold_left2 (fun a r h ->
                      let d = r -. h -. mean_diff in a +. d *. d
                    ) 0.0 rtpl_series hpl_series /. (n -. 1.0) in
    (* Spearman rank correlation: ρ_s = 1 - 6·Σd²/(n(n²-1)) *)
    let rank arr =
      let n = Array.length arr in
      let indexed = Array.init n (fun i -> (arr.(i), i)) in
      Array.sort (fun (a, _) (b, _) -> compare a b) indexed;
      let ranks = Array.make n 0.0 in
      let i = ref 0 in
      while !i < n do
        let j = ref !i in
        while !j < n - 1 && fst indexed.(!j + 1) = fst indexed.(!j) do incr j done;
        let avg_rank = (float_of_int !i +. float_of_int !j) /. 2.0 +. 1.0 in
        for k = !i to !j do ranks.(snd indexed.(k)) <- avg_rank done;
        i := !j + 1
      done;
      ranks
    in
    let r_rtpl = rank rtpl_series and r_hpl = rank hpl_series in
    let spearman =
      let sum_d2 = Array.fold_left2 (fun acc ri hi ->
        let d = ri -. hi in acc +. d *. d) 0.0 r_rtpl r_hpl in
      1.0 -. 6.0 *. sum_d2 /. (n *. (n *. n -. 1.0))
    in
    let test_result = {|
      mean_unexplained = mean_diff;
      var_unexplained  = var_diff;
      spearman_corr    = spearman;
      passes = Float.abs mean_diff < 10.0 && var_diff < 20.0 (* illustrative thresholds *)
    |} in
    test_result

end

28.3 IFRS 9 — Financial Instruments

IFRS 9 requires Expected Credit Loss (ECL) provisioning in three stages:

  • Stage 1: Performing — 12-month ECL
  • Stage 2: Significant credit deterioration — Lifetime ECL
  • Stage 3: Credit-impaired — Lifetime ECL

$$\text{ECL} = \text{PD} \times \text{LGD} \times \text{EAD} \times \text{DF}$$

module Ifrs9 = struct

  type stage = Stage1 | Stage2 | Stage3

  type ecl_result = {
    stage    : stage;
    pd_12m   : float;
    pd_lifetime : float;
    lgd      : float;
    ead      : float;
    ecl_12m  : float;
    ecl_lifetime : float;
    provision: float;
  }

  let compute_ecl ~pd_curve ~lgd ~ead ~discount_curve ~stage =
    let ecl_12m = pd_curve.(0) *. lgd *. ead
                  *. Interpolation.discount_factor discount_curve 1.0 in
    let ecl_lifetime = Array.fold_left (fun acc (t, pd) ->
      acc +. pd *. lgd *. ead *. Interpolation.discount_factor discount_curve t
    ) 0.0 (Array.mapi (fun i p -> (float_of_int (i + 1), p)) pd_curve)
    in
    let provision = match stage with
      | Stage1 -> ecl_12m
      | Stage2 | Stage3 -> ecl_lifetime
    in
    { stage; pd_12m = pd_curve.(0); pd_lifetime = Array.fold_left (+.) 0.0 pd_curve;
      lgd; ead; ecl_12m; ecl_lifetime; provision }

end

28.4 CVA Capital Charge

The CVA (Credit Valuation Adjustment) capital charge, introduced in Basel III and significantly revised in Basel IV (effective 2025), requires banks to hold capital against the volatility of CVA — not just against the risk of default itself. The 2008 crisis showed that roughly two-thirds of credit-crisis losses came not from outright defaults but from the mark-to-market widening of CVA as counterparty spreads exploded.

Basel IV provides two approaches:

BA-CVA (Basic Approach): A simplified calculation using supervisory-specified aggregation formulas with regulatory correlation parameters. No internal model is required, but the capital charge is conservatively calibrated and typically higher than the SA-CVA for comparable books.

SA-CVA (Standardised Approach): A sensitivity-based approach that requires computing CVA sensitivities to each risk factor (credit spreads, interest rates, FX, equity, commodity prices) and aggregating using Basel correlation parameters. Mathematically equivalent to a simplified version of the FRTB sensitivity-based approach applied to the CVA portfolio.

$$K_{\text{BA-CVA}} = \sqrt{ \left(\rho \sum_c \text{SCVAD}_c\right)^2 + (1-\rho^2) \sum_c \text{SCVAD}_c^2 }$$

where $\text{SCVAD}_c$ is the supervisory CVA discounted exposure for counterparty $c$, and $\rho = 0.5$ is a prescribed supervisory correlation. The BA-CVA charge connects directly to the exposure calculations in Chapter 20: the same EPE profiles feed both the accounting CVA (IFRS 13) and the regulatory BA-CVA.

Under SA-CVA, a bank's CVA hedging (e.g., CDS protection on counterparties, interest rate swaps backing IRS exposures) is recognised if the desk can demonstrate that the hedges reduce CVA sensitivities. This creates a direct incentive for banks to hedge CVA risk rather than carry it naked.

module Cva_capital = struct

  (** BA-CVA capital charge for a set of counterparties.
      scvad: array of supervisory CVA discounted exposures by counterparty.
      rho: supervisory correlation parameter (default 0.5 per Basel). *)
  let ba_cva ~scvad ?(rho = 0.5) () =
    let systematic = rho *. Array.fold_left (+.) 0.0 scvad in
    let idio_sq = (1.0 -. rho *. rho)
                  *. Array.fold_left (fun a x -> a +. x *. x) 0.0 scvad in
    sqrt (systematic *. systematic +. idio_sq)

  (** Supervisory CVA discounted exposure for a single counterparty.
      ead: exposure at default; maturity: effective maturity in years;
      rw: supervisory risk weight by rating (0.7% IG, 2.0% HY). *)
  let supervisory_cvad ~ead ~maturity ~rw ~risk_free_rate =
    let df = exp (-. risk_free_rate *. maturity) in
    rw *. ead *. (1.0 -. exp (-. 0.05 *. maturity)) /. (0.05 *. maturity) *. df
    (* 0.05 = supervisory LGD for CVA purposes per Basel *)

end

28.5 Regulatory Stress Testing

Beyond day-to-day capital requirements, banks are subject to annual supervisory stress testing programs that project capital ratios under adverse macroeconomic scenarios. These programs replaced the ad-hoc recapitalisations of 2008–2009 with a systematic, forward-looking assessment.

United States — CCAR and DFAST. The Federal Reserve's Comprehensive Capital Analysis and Review (CCAR) and Dodd-Frank Act Stress Test (DFAST) require large banks to model nine-quarter forward capital ratios under a severely adverse scenario specified by the Fed (unemployment rising to ~10%, GDP contracting ~8%, equity markets falling ~60%). Results are published annually. Failure to maintain CET1 above 4.5% in the adverse scenario triggers dividend and buyback restrictions.

Europe — EBA EU-wide stress test. The European Banking Authority coordinates a biennial stress test across 50–70 large EU banks using a common adverse scenario, with individual results published. The 2023 exercise used a scenario of +6% inflation, −6% GDP, property price falls of 30–50%.

United Kingdom — Bank of England ACS. The Annual Cyclical Scenario is a dual-sided test: a "severe but plausible" cyclical downturn plus a counter-cyclical test that is more severe in years of high credit growth.

From a modelling perspective, stress tests require the same machinery as IFRS 9 ECL: scenario-conditioned credit models, stressed revenue projections, and static balance sheet assumptions. The main additional complexity is projecting Risk-Weighted Asset (RWA) migration as loans deteriorate or markets move under stress — each scenario produces a different RWA trajectory, which determines how quickly capital buffers are consumed.


28.6 Chapter Summary

Regulatory capital frameworks are the translation of political decisions about financial system stability into mathematical formulas that banks must implement in software. Getting these calculations right is both legally required and financially significant: errors can trigger supervisory action, and inaccurate provisions affect reported earnings under IFRS 9.

The Basel III capital framework rests on the concept of Risk-Weighted Assets (RWA): the denominator of the capital ratio. Different asset classes receive different risk weights based on their credit quality, and under the Internal Ratings-Based (IRB) approach, banks may use their own PD, LGD, and EAD estimates to compute RWA through the Basel II IRB formula: $K = \text{LGD} \cdot N\left(\frac{N^{-1}(\text{PD}) + \sqrt{R} N^{-1}(0.999)}{\sqrt{1-R}}\right) - \text{PD} \cdot \text{LGD}$, where $R$ is the asset correlation. This formula is the Vasicek one-factor model from Chapter 16 recast as a capital formula.

FRTB's shift from VaR to Expected Shortfall (ES) at horizons of 10-120 days (depending on asset liquidity) addresses the fundamental failure of VaR: that it says nothing about the severity of losses beyond the confidence threshold. The liquidity horizon adjustment ensures that capital reflects the time required to unwind positions under stressed conditions — 10 days for liquid equity futures, 120 days for illiquid credit instruments.

IFRS 9's three-stage ECL model classifies loans by delinquency: performing loans (Stage 1) provision for expected losses in the next 12 months; underperforming loans (Stage 2, where credit risk has significantly increased) provision for lifetime expected losses; non-performing loans (Stage 3) are specifically provisioned. The transition between stages based on forward-looking macroeconomic scenarios requires scenario-conditioned PD models — a direct application of the credit risk models from Chapters 15 and 16.

The CVA capital charge (BA-CVA and SA-CVA) ensures that banks hold capital not just against counterparty defaults, but against the market-driven volatility of CVA itself. This directly links Chapter 20's XVA framework to the regulatory balance sheet: the same EPE profiles produce both the accounting CVA adjustment and the regulatory capital requirement.

Regulatory stress testing (CCAR/DFAST in the US, EBA stress tests in Europe) projects capital ratios under adverse macroeconomic scenarios over a nine-quarter horizon. These exercises require the same scenario-conditioned credit models as IFRS 9 ECL, plus RWA migration models that track how the risk profile of the balance sheet evolves as the economy deteriorates.


Exercises

28.1 ★ Compute IRB risk-weighted assets for a corporate loan portfolio with 100 names spread across grades AAA, A, BBB, BB, B. Compare with SA risk weights. How large is the difference for each rating category?

28.2 ★★ Implement the IFRS 9 ECL calculation for a 5-year loan portfolio with 200 loans. Apply the SICR test (PD doubling or 30 days past due) to classify each loan into Stage 1/2/3. Compute the aggregate provision under a base case and an adverse scenario (PDs multiply by 2× across all loans), and display the provision ratio by stage.

28.3 ★★ Implement the FRTB liquidity-adjusted ES for a trading desk with positions in five asset classes (equity large-cap, equity small-cap, IG credit, FX G10, and energy commodities). Given daily 1-day ES of $1M for each class, compute the total capital charge assuming the Basel prescribed inter-bucket correlations.

28.4 ★★ Use the BA-CVA formula to compute the CVA capital charge for a portfolio of 10 counterparties with varying EAD, maturity, and credit rating. Compare the result to a simplified SA-CVA calculation using only credit-spread sensitivities.

28.5 ★★★ Build a simple stress testing engine: given a loan book with PDs, LGDs, and EADs, apply a macroeconomic stress that multiplies all PDs by a stress multiplier (ranging 1× to 5×) and compute the nine-quarter forward capital trajectory assuming 20% dividend retention. At what stress multiplier does the bank breach the CET1 trigger of 4.5%?


Next: Chapter 29 — Systems Design for Quant Finance