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
- Verification
- 6 statements. 0 proved, 1 certified, 5 tested.
- 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
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.
| Bucket and tenor | PV01 | Weighted | Share | Share, drawn to scale |
|---|---|---|---|---|
| K 34.32m | 33,903,114 | |||
| 918,000 | 637,702 | |||
| 2,142,000 | 1,867,707 | |||
| 5,952,000 | 5,776,397 | |||
| 12,402,000 | 11,610,487 | |||
| 8,136,000 | 6,981,665 | |||
| 31,845,000 | 23,907,478 | |||
| −23,496,000 | −12,325,828 | |||
| −8,019,000 | −3,227,700 | |||
| −6,237,000 | −1,998,301 | |||
| 3,201,000 | 673,507 | |||
| K 5.98m | 2,681,264 | |||
| Charge, low scenario | 36,584,378 | Shares sum exactly | ||
| Shares sum exactly | ||||
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
| Tenor | 3m | 6m | 1y | 2y | 3y | 5y | 10y | 15y | 20y | 30y |
|---|---|---|---|---|---|---|---|---|---|---|
| 3m | 100 | 97 | 91 | 81 | 72 | 57 | 40 | 40 | 40 | 40 |
| 6m | 97 | 100 | 97 | 91 | 86 | 76 | 57 | 42 | 40 | 40 |
| 1y | 91 | 97 | 100 | 97 | 94 | 89 | 76 | 66 | 57 | 42 |
| 2y | 81 | 91 | 97 | 100 | 99 | 96 | 89 | 82 | 76 | 66 |
| 3y | 72 | 86 | 94 | 99 | 100 | 98 | 93 | 89 | 84 | 76 |
| 5y | 57 | 76 | 89 | 96 | 98 | 100 | 97 | 94 | 91 | 86 |
| 10y | 40 | 57 | 76 | 89 | 93 | 97 | 100 | 99 | 97 | 94 |
| 15y | 40 | 42 | 66 | 82 | 89 | 94 | 99 | 100 | 99 | 97 |
| 20y | 40 | 40 | 57 | 76 | 84 | 91 | 97 | 99 | 100 | 99 |
| 30y | 40 | 40 | 42 | 66 | 76 | 86 | 94 | 97 | 99 | 100 |
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.
| # | Value | Drawn to scale |
|---|---|---|
| 1 | −0.1650 | |
| 2 | −0.1063 | |
| 3 | 0.0002 | |
| 4 | 0.0068 | |
| 5 | 0.0079 | |
| 6 | 0.0114 | |
| 7 | 0.0914 | |
| 8 | 0.3000 | |
| 9 | 1.7676 | |
| 10 | 8.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.
| What the rule does with this book | Bucket charge K | Capital |
|---|---|---|
| High scenario | floored at 0 | 0 |
| Medium scenario the one this book breaks | floored at 0 | 0 |
| Low scenario | 83,247 | 83,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.
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.
| Reference | Rule | Carried by | Checked by |
|---|---|---|---|
| MAR21.42, Table 1 | Risk weights by tenor, in basis points. | GIRR_ src/ | Tested FR-04 |
| MAR21.46, Table 2 | Correlation between two tenors, from a decay formula with a floor of 40 per cent. | base src/ | Tested FR-04 |
| MAR21.6 | The high and low correlation scenarios, and the same rule across currencies. | scenario src/ | 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. | evaluate src/ | 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. | girr src/ | Tested FR-05 |
| MAR21.7 | The capital requirement is the largest of the charges under the three scenarios. | girr src/ | 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
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.
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)); 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.
-
Reporting standards for market risk under the standardised approach
Shipped as FRTB-SA 5.1, 9 days later
-
Clarification on curvature risk for index options
Shipped as FRTB-SA 5.0, 8 days later