Products Investor disclosure
PRIIPs
Packaged retail and insurance-based investment products
Key information documents with the risk class computed in the open.
PRIIPs requires a key information document with a summary risk indicator, performance scenarios and costs. GraphAtlas computes the market risk measure from the Cornish-Fisher value at risk, runs the performance scenarios, and shows the arithmetic behind every cell of the document.
Try the calculation Request a walkthrough
- Verification
- 3 statements. 1 proved, 0 certified, 2 tested.
- Regime
- Regulation (EU) No 1286/2014 and Delegated Regulation (EU) 2017/653
- Set by
-
- European Commission and the European Supervisory Authorities
- Built for
-
- Product governance
- Asset managers and insurers
- Distributors
- Version
- 3.2
Try it
Run it on sample data
Make the fund more volatile, or add a few bad days. Watch the class, the build-up of the VEV and how close the fund sits to the next class.
Fig. 1 Market risk class for an illustrative fund, from five years of daily returns
Verifying receipt
The fund
The holding period
The history is 1,280 daily returns made for this page. Each large fall replaces one ordinary day, and the same days fall every time, so adding one fall changes one day.
Summary risk indicator
- 1under 0.5%
- 20.5 to 5%
- 35 to 12%
- 412 to 20%
- 520 to 30%
- 630 to 80%
- 7over 80%
Class 4 of 7The VEV is 19.31%. That is 0.69 points under the limit of class 5. It is 7.31 points over the limit of class 3.
- Volatility
- 19.3% a year
- Skew, s
- −0.37
- Excess kurtosis, k
- 1.77
- Periods, N
- 1,280
| Step | Rule | Value |
|---|---|---|
| A normal returnσ √N × −1.96 | σ √N × −1.96 | −84.451% |
| Skewσ √N × 0.474 s ÷ √N | σ √N × 0.474 s ÷ √N | −0.209% |
| Fat tailsσ √N × −0.0687 k ÷ N | σ √N × −0.0687 k ÷ N | −0.004% |
| Skew squaredσ √N × 0.146 s² ÷ N | σ √N × 0.146 s² ÷ N | 0.001% |
| Drift of a log return−½ σ² N | −½ σ² N | −9.283% |
| Value at risk, VaRthe five parts added | the five parts added | −93.946% |
| Under the root3.842 − 2 × VaR | 3.842 − 2 × VaR | 5.7209 |
| Root less 1.96√(under the root) − 1.96 | √(under the root) − 1.96 | 0.4318 |
| VEV(root less 1.96) ÷ √T, T = 5 years | (root less 1.96) ÷ √T, T = 5 years | 19.31% |
The same returns over other holding periods
- 1 yearclass 419.4%
- 2 yearsclass 419.3%
- 3 yearsclass 419.3%
- 4 yearsclass 419.3%
- 5 yearsclass 419.3%
- 6 yearsclass 419.3%
- 7 yearsclass 419.3%
- 8 yearsclass 419.3%
- 9 yearsclass 419.3%
- 10 yearsclass 419.3%
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
- Price history
- The closing prices of the product over at least five years, or the log returns already taken from them.
- Recommended holding period
- In years. It sets the number of periods in the value at risk and the length in the VEV.
- Periods in a year
- How many observations make a year, which depends on how often you observe. The default is 256 trading days.
What comes out
- Moments
- The volatility, skew and excess kurtosis measured from the returns, as point 12 defines them.
- VaR and VEV
- The Cornish-Fisher value at risk and the VEV, with every term of the expansion shown on its own line.
- Market risk class
- A class from 1 to 7, and how far the VEV sits from the limits on either side.
- Derivation
- Every figure as a step, each with the point of the regulation it applies.
- Receipt
- A hash of the coefficients, the class table, the inputs and the result. Anyone can recompute it.
What the plate covers
In the plate above
- The market risk measure of a product with a return history, from the returns to the class.
- Each term of the Cornish-Fisher expansion, so the effect of skew and fat tails can be read off.
- The class the same returns would get over any holding period from one to ten years.
In the licensed engine, not the plate
- Products that are not in the category the plate covers, such as those whose returns are simulated.
- The credit risk measure, and the summary risk indicator that combines it with the market risk class.
- The performance scenarios, the costs and the layout of the key information document.
- Amendments after the text as made.
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 |
|---|---|---|---|
| Annex II, Part 1, point 11 | The return of a period is the natural logarithm of the closing price over the closing price before it. | log src/ | Tested PR-03 |
| Annex II, Part 1, point 12 | The volatility, skew and excess kurtosis come from the moments of the returns. | sample src/ | Tested PR-02 |
| Annex II, Part 1, point 12 | The value at risk is the Cornish-Fisher expansion over the periods in the holding period. | cornish src/ | Tested PR-03 Tested PR-02 |
| Annex II, Part 1, point 13 | The VEV is taken from the value at risk and the length of the holding period in years. | vev src/ | Tested PR-02 |
| Annex II, Part 1, point 2 | The VEV falls in one of seven classes. The text gives two classes to a value on an inner limit, and the engine takes the higher. | mrm src/ | Proved PR-01 |
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.
Proved
True for every input.
- PR-01
The MRM class is defined for every VEV, is between 1 and 7, never decreases as the VEV rises, and changes class exactly at the limits in the table.
8 checks, decided by Z3 5.3.3.0 (WebAssembly) and rerun from the emitted file by Z3 5.3.3 (native) and cvc5 1.4.2 (native, nl-cov). 2 broken variants are refuted. proofs/smt2/PR-01.smt2
Tested
True on every input we tried.
- PR-02
The VEV matches a case worked by hand, rises with negative skew and with fat tails, and tracks annualised volatility for normal returns.
tests/kernel/priips.test.ts
- PR-03
The parts of the Cornish-Fisher value at risk add up to the whole, and for a normal return they reduce to the normal value at risk less the drift. Returns are the logarithms of price ratios and add up to the logarithm of the whole move.
tests/kernel/priips.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 {
marketRiskFromMoments,
priipsReceiptPayload,
} from '@graphatlas/kernel/priips';
import { receipt } from '@graphatlas/kernel/receipt';
// Measured from 1280 daily log returns. marketRisk(returns, 5) reads them directly.
const moments = {
sigma: 0.012043264269511359,
skew: -0.3667442582418112,
exKurt: 1.7665637458599814,
};
const result = marketRiskFromMoments(moments, 5);
const input = { moments, rhpYears: 5, periodsPerYear: 256 };
const hash = await receipt(priipsReceiptPayload(input, result)); const out = {
mrm: 4,
vev: 0.1931,
var: -0.9395,
tradingDays: 1280,
receipt: '19f62c76a8054c2f6d5e0c553be3baa44945186032c2889060f0fae63d9c801b',
}; The call and the numbers come from the engine that built this page, run on the same input as the plate above. The VEV is a fraction, so 0.1946 is 19.46 per cent. Values are rounded to four 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.
-
Amendments to the presentation of performance scenarios in the key information document
Shipped as PRIIPs 3.2, 8 days later