Products Market risk and margin

FRTB-SA

Fundamental Review of the Trading Book, standardised approach

Market risk capital with a derivation attached to every figure.

FRTB-SA sets bank capital for trading book market risk from sensitivities, default risk and residual risk add-ons. GraphAtlas runs the full sensitivities-based method, shows which correlation scenario binds, and allocates the charge to desks, risk factors and trades.

Try the calculation Request a walkthrough

Regime
Basel Framework, MAR21 to MAR23
Set by
  • Basel Committee on Banking Supervision
  • European Commission and the European Supervisory Authorities
Built for
  • Market risk and regulatory reporting
  • Desk heads and capital management
  • Model validation
Version
5.1
The delta sensitivities of an example book to the ten tenors of a rate curve, and its capital under the three correlation scenariosThe USD sensitivities of the example book to the ten tenors of its curve, from 3 months to 30 years, the largest gain being +289.5K and the largest loss -213.6K. Under it are the capital of the whole book under the three scenarios of the correlation between tenors, high 32.15M, medium 34.44M and low 36.58M dollars, of which the low scenario binds, so that the capital is 36,584,378 dollars. A tag says that the parameters are prescribed.USD DELTA BY TENOR0.25Y0.5Y1Y2Y3Y5Y+289.5K10Y-213.6K15Y20Y30YCAPITAL BY SCENARIOHIGH32.15MMEDIUM34.44MLOW36.58MBINDSCAPITAL36,584,378PRESCRIBEDENGINEFRTB-SA V5.1SET BYBCBS, EUDATASAMPLERECEIPTdeab796a The delta sensitivities of an example book to the ten tenors of a rate curve, and its capital under the three correlation scenariosThe USD sensitivities of the example book to the ten tenors of its curve, from 3 months to 30 years, the largest gain being +289.5K and the largest loss -213.6K. Under it are the capital of the whole book under the three scenarios of the correlation between tenors, high 32.15M, medium 34.44M and low 36.58M dollars, of which the low scenario binds, so that the capital is 36,584,378 dollars. A tag says that the parameters are prescribed.USD DELTA0.25Y0.5Y1Y2Y3Y5Y+289.5K10Y-213.6K15Y20Y30YCAPITAL BY SCENARIOHIGH32.15MMEDIUM34.44MLOW36.58MBINDSCAPITAL36,584,378PRESCRIBEDENGINEV5.1DATASAMPLERECEIPTdeab796a

Try it

Run it on sample data

Edit any sensitivity and watch the charge, the binding scenario and each risk factor’s share move. Then see why the correlation tables need a floor.

Fig. 1 GIRR delta capital for an illustrative two-currency book

Verifying receipt

Capital charge, USD

36,584,378 US dollars

The charge is the highest of three correlation scenarios. Low correlation binds.

Correlations cut to 2ρ − 1 or 75% of ρ, whichever is larger.

Share of the Low scenario charge, by currency bucket and risk factor
Bucket and tenorPV01WeightedShareShare, drawn to scale
K 34.32m33,903,114
918,000637,702
2,142,0001,867,707
5,952,0005,776,397
12,402,00011,610,487
8,136,0006,981,665
31,845,00023,907,478
−23,496,000−12,325,828
−8,019,000−3,227,700
−6,237,000−1,998,301
3,201,000673,507
K 5.98m2,681,264
Charge, low scenario36,584,378Shares sum exactly
Shares sum exactly

Receiptdeab796a 4e2b81f9 … 231025e7

Edit any PV01. The engine runs in this page and nothing leaves it.

Fig. 2 Are the prescribed GIRR correlations a valid correlation matrix?

Verifying receipt

The prescribed correlations, used as they are.

Correlation between tenors, medium scenario

Tenor3m6m1y2y3y5y10y15y20y30y
3m100979181725740404040
6m971009791867657424040
1y919710097948976665742
2y819197100999689827666
3y728694991009893898476
5y577689969810097949186
10y405776899397100999794
15y404266828994991009997
20y404057768491979910099
30y404042667686949799100

Marks an entry held at the 40% floor, in the medium scenario.

5y against 10y
exp(−3% × |5 − 10| ÷ 5) = 97.04%. That is above the 40% floor, so it stands.
Rule
Basel Framework, MAR21.46 and Table 2, MAR21.6. January 2019 text.

Value in the grid: 97.04%.

Eigenvalues, smallest first

of 10 below zero

A real correlation matrix has none, because no mix of risks can have a negative variance. The eigenvalues are computed here in floating point. The check further down is what carries the claim.

The ten eigenvalues of the matrix, smallest first
#ValueDrawn to scale
1−0.1650
2−0.1063
30.0002
40.0068
50.0079
60.0114
70.0914
80.3000
91.7676
108.0859

A book that shows it

These ten weighted sensitivities, in currency units, give a quadratic form wTRw below zero. A matrix with no negative eigenvalue can never do that.

3m
761,242
6m
−82,082
1y
−1,000,000
2y
−340,798
3y
73,905
5y
586,548
10y
753,976
15y
237,253
20y
−166,172
30y
−829,740

wTRw in floating point−559,882,732,895

The sum above is rounded at every step. The check below does it again in exact fractions, on the matrix as it is stored.

Charge of the book above under each scenario
What the rule does with this bookBucket charge KCapital
High scenariofloored at 00
Medium scenario the one this book breaksfloored at 00
Low scenario83,24783,247

The rule floors the quantity under the root at zero (MAR21.4(4)), so a bucket charge never turns imaginary. The capital is the largest of the three scenarios, so a scenario that floors to zero does not decide the result.

Receiptc6d9f8fd 15375b5b … a8e5ff75

The matrices and the check run in this page. Nothing leaves it.

Inputs and outputs

What goes in. What comes out

The plate runs a slice of the engine. This is the whole shape of it.

What goes in

PV01 by tenor
The change in present value for a one basis point rise in the zero rate at each of the ten prescribed tenors, per currency.
Reporting currency
The currency the charge is stated in. Each currency bucket is converted before it is combined.

What comes out

Capital charge
The largest of the charges under the high, medium and low correlation scenarios, with the binding scenario named.
Attribution
Each risk factor’s exact share of the charge, in every scenario. The shares add up to the charge.
Correlation certificate
A check that the prescribed correlation matrices are, or are not, positive semidefinite, with a witness anyone can recompute.
Derivation
Every figure as a tree of steps, each with the paragraph it applies.
Receipt
A hash of the rule parameters, the inputs and the result. Anyone can recompute it.

What the plate covers

In the plate above

  • GIRR delta, the sensitivities-based method for interest rate risk, in all three correlation scenarios.
  • The exact share of the charge that belongs to each risk factor.
  • A check, in exact arithmetic, of whether the prescribed correlation matrices are valid correlation matrices.

In the licensed engine, not the plate

  • The other risk classes, and vega and curvature, which the licensed engine runs from your sensitivities.
  • The default risk charge and the residual risk add-on.
  • Aggregation by desk and by trade, and the reporting templates.
  • Amendments and consolidations after the January 2019 text.

Clause map

Every rule has an address

Each row names the clause, the function that carries it and the statements that check it. A test opens each file and confirms the function exists.

Rules of the regulation, the code that carries each one and the statements that check it
Reference Rule Carried by Checked by
MAR21.42, Table 1 Risk weights by tenor, in basis points. GIRR_RISK_WEIGHT_BP src/kernel/frtb.ts Tested FR-04
MAR21.46, Table 2 Correlation between two tenors, from a decay formula with a floor of 40 per cent. baseTenorCorrelation src/kernel/frtb.ts Tested FR-04
MAR21.6 The high and low correlation scenarios, and the same rule across currencies. scenarioCorrelation src/kernel/frtb.ts Tested FR-04
MAR21.4(4) The bucket charge is the root of the weighted sensitivities combined through the correlations, with the quantity under the root floored at zero. evaluateScenario src/kernel/frtb.ts Tested FR-05 Certified FR-03
MAR21.4(5) and MAR21.50 Buckets combine through the cross-currency correlation, with a clipped fallback when the quantity under the root is negative. girrDelta src/kernel/frtb.ts Tested FR-05
MAR21.7 The capital requirement is the largest of the charges under the three scenarios. girrDelta src/kernel/frtb.ts Tested FR-06 Tested FR-01 Tested FR-02

Verification

What we claim, and how it is checked

Every statement is registered, and each says which level of assurance it has earned. The ladder is explained on the verification page.

Certified

True for the case in hand, with evidence anyone can recheck.

  • FR-03

    Each prescribed GIRR delta correlation matrix is indefinite, shown by an integer witness vector whose quadratic form, summed in exact arithmetic on the stored matrix, is negative by far more than rounding in the entries could explain.

    tests/kernel/frtb.test.tssrc/kernel/frtb.tssrc/kernel/rational.ts

Tested

True on every input we tried.

  • FR-01

    Risk factor shares add up to the capital charge in every correlation scenario, and each matches a numerical derivative of the charge.

    tests/kernel/frtb.test.ts

  • FR-02

    The capital charge is positively homogeneous of degree one and unchanged when every position flips sign.

    tests/kernel/frtb.test.ts

  • FR-04

    The risk weights, the decay parameter, the floor and the scenario rules reproduce every entry of the published correlation table and the worked example in the January 2019 text of MAR21.

    tests/kernel/frtb.test.ts

Show the other 2 Show fewer
  • FR-05

    A bucket whose quadratic form is negative is floored at zero, and the clipped fallback applies when the cross-bucket quantity under the root is negative.

    tests/kernel/frtb.test.ts

  • FR-06

    The capital charge is never negative and equals the largest of the three scenario charges.

    tests/kernel/frtb.test.ts

Read the verification statement

Use it

The same call, anywhere

This sample is written from the input the plate starts with, so the code and the numbers cannot drift apart.

Call
import { girrDelta, girrReceiptPayload } from '@graphatlas/kernel/frtb-sa';
import { receipt } from '@graphatlas/kernel/receipt';

const book = {
  reportingCurrency: 'USD',
  buckets: [
    {
      currency: 'USD',
      pv01: {
        0.25: 5400, 0.5: 12600, 1: 37200, 2: 95400, 3: 67800, 5: 289500,
        10: -213600, 15: -72900, 20: -56700, 30: 29100,
      },
    },
    {
      currency: 'EUR',
      pv01: {
        0.25: -1800, 0.5: 8700, 1: 15300, 2: 28800, 3: -25200, 5: -115200,
        10: 158100, 15: -78300, 20: 42300, 30: 9900,
      },
    },
  ],
};

const result = girrDelta(book);
const hash = await receipt(girrReceiptPayload(book, result));
Returns
const out = {
  capital: 36584378.23,
  binding: 'low',
  charges: { high: 32150928.21, medium: 34439068.77, low: 36584378.23 },
  receipt: 'deab796a4e2b81f900a5e4b2f9113cd77ec62a794257f6b64dac904f231025e7',
};

The call and the numbers come from the engine that built this page, run on the same input as the plate above. PV01 is in US dollars per basis point. Values are rounded to two places for display. The receipt hashes the unrounded numbers.

Runs on

  • Browser
  • Edge
  • Node.js
  • Python
  • JVM
  • .NET
  • Excel
  • Command line
  • Container

Green surfaces are measured on every build of this site. Each must return the same receipt, bit for bit. The others are packaged targets that the build does not measure. How the platform works

Changes

When the rule moves, so does the engine

Publications that touch this regime, and the release that answered each.

  1. EU Takes effect

    Reporting standards for market risk under the standardised approach

    Shipped as FRTB-SA 5.1, 9 days later

  2. BCBS Clarification

    Clarification on curvature risk for index options

    Shipped as FRTB-SA 5.0, 8 days later

Open the full feed

The next step

Bring us
one book

A scoping call, a sample book and a parallel run on your data. Most teams have the first reconciled number inside two weeks, and a receipt for it on the day.

Book a demo Work out a price