risk-backtest · git:20261106.6f9670c · 2026-11-06 · sha256 922b22eee8e421e5

risk-backtest git:20261106.6f9670cA

Immutable. This exact content never changes and is served at /api/v1/blob/922b22eee8e421e5.

---
name: risk-backtest
description: Backtest a supplied VaR series, and optionally an Expected Shortfall series, against realised P&L over the hosted Risk Desk MCP. Use to judge a forecast record with exception counts, Kupiec, Christoffersen, the Basel traffic light and the Acerbi-Szekely ES test, not to compute VaR.
---

# Risk Backtest, hosted

Call `risk_desk_status` first to check availability, input limits and
reporting conventions. Then use `risk_backtest` on the connected hosted
Risk Desk MCP. Discover its input schema instead of guessing field names.
No local runtime or market-data feed is needed.

For a requested demonstration, omit `request` to use the shipped synthetic
example. Label the result as synthetic; its `data_origin` is
`synthetic_demo`. For the user's own record, pass it in `request`; never
substitute the demo when input is missing or invalid. Ask only for
missing required fields.

Report degraded status, its reason, currency, horizon, confidence and sign
convention before the figures. Preserve source and as-of information.
If the service is unavailable, report the failure without inventing results.

For supplied data, require realised P&L in time order (positive is
profit) and, for each row, the VaR forecast made before that P&L was known
(positive is a loss), with confidence and horizon. An ES test also needs
an ES forecast per row, each above its VaR, and the null family (normal,
or Student-t with its degrees of freedom).

Report, in order: exceptions against expected exceptions; the Basel zone,
or the reason it is unavailable; Kupiec, Christoffersen independence and
conditional coverage, each with statistic and p-value; then the ES test
with its null, simulations, seed and Monte Carlo standard error.

An exception is a realised loss strictly greater than VaR. The Basel zone
is given only for one-day 99% VaR and is not a capital figure; no
multiplier is reported. Z2 is zero in expectation when forecasts are
right; negative values mean risk was understated, and its p-value is the
left tail under the stated null, not under the forecaster's own model.
Kupiec and Christoffersen p-values are asymptotic chi-square.

A test that does not reject has not validated the model. With few
expected exceptions the tests have little power; say how many were
expected. This is a research calculation, not a regulatory submission and
not investment advice.

Before sending user data, establish that the user is permitted to share
it with a hosted service. Existing permission in the conversation is
sufficient. `data_mode` records their declaration; it is not a rights
certificate and the service does not check it.

Producing the VaR forecasts is not available here: this tool tests a
record, it does not build one. Use `risk_tail` for a VaR figure.
Counterparty XVA is also not available here; it needs a local ORE project
and the local `risk-desk` plugin.

## Data and result limits

For every calculation with a supplied `request`, set the separate boolean
`rights_confirmed=true` only after the user confirms permission for hosted
processing and output delivery. Existing explicit permission is sufficient.
Never infer permission from an attachment or `data_mode`. No-input synthetic
demonstrations need no confirmation. Confirmation does not verify a licence.

Keep model and data limitations visible. Results can be wrong; reproducibility
does not establish fitness or regulatory approval. Do not present a ranking or
comparison as a personal recommendation, executable quote or guaranteed loss
limit. Independently verify material results before use.

[Terms](https://riskdesk.avidquant.com/terms) and
[privacy](https://riskdesk.avidquant.com/privacy) explain data handling and legal limits.