Market risk · Forecast calibrationEmpirical finding
Historical VaR under coverage and independence tests
Breaches arrived too often and in clusters; the forecast failed its calibration tests.
A historical 95% VaR forecast produced too many breaches. The breaches also clustered instead of arriving independently.
Commit 4806df9Evidence ad24c49Data – · 2,892 rowsUniverse 15 instrumentsTests 239 / 239 passed
- 135breaches at 95% VaR
- 107expected breaches at 5%
- 6.31%observed breach rate
- 2,140one-step forecasts
- 2,640net daily returns after warm-up
- 0.0075Kupiec unconditional-coverage p-value
The historical VaR forecast failed on both breach frequency and breach timing.
The rolling 500-observation historical 95% VaR model made 2,140 one-step forecasts. It recorded 135 breaches against 107 expected, a 6.31% breach rate. Kupiec coverage, Christoffersen independence, and conditional-coverage tests all rejected calibration at the 5% level. The misses came too often, and they came together.
Growth of $1 after modeled transaction costs
$ · daily · 2016-01-04 to 2026-07-06 · notebook 06
Drawdown from the running peak
% · daily · notebook 06
Rolling 63-day annualised volatility
% · daily, 63-observation window · notebook 06
Daily return distribution with a matched Gaussian
count · daily return (%) · 56 bins · notebook 06
| daily return (%) | observed | Gaussian, same mean and variance |
|---|---|---|
| -6.96191 | 1 | 1.80868e-18 |
| -6.72532 | 0 | 4.02217e-17 |
| -6.48873 | 0 | 8.04016e-16 |
| -6.25214 | 1 | 1.44469e-14 |
| -6.01555 | 0 | 2.33342e-13 |
| -5.77896 | 0 | 3.3878e-12 |
| -5.54237 | 0 | 4.42129e-11 |
| -5.30578 | 0 | 5.18664e-10 |
| -5.06919 | 0 | 5.46928e-9 |
| -4.8326 | 1 | 5.18418e-8 |
| -4.59601 | 1 | 4.4171e-7 |
| -4.35942 | 0 | 0.00000338299 |
| -4.12283 | 0 | 0.0000232901 |
| -3.88624 | 1 | 0.000144128 |
| -3.64965 | 2 | 0.000801737 |
| -3.41306 | 1 | 0.00400887 |
| -3.17647 | 0 | 0.0180185 |
| -2.93988 | 2 | 0.0727984 |
| -2.70329 | 2 | 0.264382 |
| -2.4667 | 4 | 0.863074 |
| -2.23011 | 5 | 2.53262 |
| -1.99352 | 7 | 6.68037 |
| -1.75693 | 15 | 15.8393 |
| -1.52034 | 26 | 33.7582 |
| -1.28375 | 44 | 64.6738 |
| -1.04716 | 58 | 111.374 |
| -0.810565 | 122 | 172.404 |
| -0.573974 | 157 | 239.892 |
| -0.337384 | 296 | 300.048 |
| -0.100793 | 442 | 337.344 |
| 0.135797 | 560 | 340.927 |
| 0.372387 | 371 | 309.711 |
| 0.608978 | 214 | 252.906 |
| 0.845568 | 136 | 185.638 |
| 1.08216 | 80 | 122.485 |
| 1.31875 | 39 | 72.6447 |
| 1.55534 | 17 | 38.7286 |
| 1.79193 | 16 | 18.5595 |
| 2.02852 | 7 | 7.99481 |
| 2.26511 | 5 | 3.09568 |
| 2.5017 | 1 | 1.07748 |
| 2.73829 | 0 | 0.33711 |
| 2.97488 | 0 | 0.0948067 |
| 3.21147 | 0 | 0.023967 |
| 3.44806 | 1 | 0.00544621 |
| 3.68465 | 0 | 0.00111245 |
| 3.92124 | 0 | 0.000204256 |
| 4.15783 | 0 | 0.0000337113 |
| 4.39442 | 1 | 0.0000050013 |
| 4.63101 | 1 | 6.66955e-7 |
| 4.8676 | 1 | 7.99497e-8 |
| 5.1042 | 0 | 8.61477e-9 |
| 5.34079 | 1 | 8.34405e-10 |
| 5.57738 | 0 | 7.26469e-11 |
| 5.81397 | 0 | 5.68543e-12 |
| 6.05056 | 1 | 3.9996e-13 |
Exception record · one mark per day beyond forecast VaR
1 = breach · 2,140 forecast days · notebook 06
| Date | Return (%) | VaR 95 forecast (%) |
|---|---|---|
| 2018-01-29 | -0.614937 | 0.570531 |
| 2018-01-30 | -0.707487 | 0.57505 |
| 2018-02-02 | -1.46777 | 0.570531 |
| 2018-02-05 | -2.27799 | 0.57505 |
| 2018-02-07 | -0.598115 | 0.594871 |
| 2018-02-08 | -2.17456 | 0.597847 |
| 2018-02-27 | -1.02679 | 0.598137 |
| 2018-03-01 | -0.704989 | 0.599059 |
| 2018-03-19 | -0.853699 | 0.608902 |
| 2018-03-22 | -1.22812 | 0.615557 |
| 2018-03-23 | -1.15297 | 0.627784 |
| 2018-03-27 | -0.846128 | 0.636859 |
| 2018-04-02 | -1.21073 | 0.642594 |
| 2018-04-06 | -0.959561 | 0.644716 |
| 2018-04-20 | -0.732958 | 0.664067 |
| 2018-04-24 | -0.69947 | 0.677527 |
| 2018-05-15 | -0.833666 | 0.677527 |
| 2018-06-25 | -0.898544 | 0.645417 |
| 2018-10-04 | -0.79958 | 0.636859 |
| 2018-10-10 | -1.86348 | 0.636859 |
| 2018-10-11 | -0.836788 | 0.642594 |
| 2018-10-18 | -0.928277 | 0.645417 |
| 2018-10-24 | -1.56835 | 0.678491 |
| 2018-10-26 | -0.927747 | 0.699746 |
| 2018-11-12 | -1.07452 | 0.705114 |
| 2018-11-19 | -0.975872 | 0.70876 |
| 2018-11-20 | -1.07642 | 0.733338 |
| 2018-12-04 | -1.6804 | 0.74157 |
| 2018-12-07 | -1.20955 | 0.761585 |
| 2018-12-14 | -0.992347 | 0.761585 |
| 2018-12-17 | -1.10871 | 0.777232 |
| 2018-12-19 | -0.826757 | 0.800103 |
| 2018-12-21 | -1.31215 | 0.810881 |
| 2018-12-24 | -1.27479 | 0.827103 |
| 2019-01-03 | -0.908535 | 0.833822 |
| 2019-03-22 | -0.957713 | 0.837255 |
| 2019-05-07 | -0.979154 | 0.846507 |
| 2019-05-13 | -1.29299 | 0.855941 |
| 2019-08-05 | -1.40628 | 0.899044 |
| 2019-08-14 | -1.31769 | 0.909495 |
| 2019-08-23 | -1.02056 | 0.927774 |
| 2020-02-24 | -1.76902 | 0.899044 |
| 2020-02-25 | -1.76887 | 0.899044 |
| 2020-02-27 | -2.56051 | 0.909495 |
| 2020-03-05 | -1.45486 | 0.927774 |
| 2020-03-09 | -4.53857 | 0.929749 |
| 2020-03-11 | -3.81738 | 0.957806 |
| 2020-03-12 | -7.08021 | 0.960377 |
| 2020-03-16 | -6.33209 | 0.976036 |
| 2020-03-18 | -4.87613 | 0.979814 |
| 2020-03-27 | -1.27802 | 0.974693 |
| 2020-03-31 | -1.18967 | 0.976036 |
| 2020-04-01 | -2.91268 | 0.979814 |
| 2020-04-15 | -1.31214 | 0.993758 |
| 2020-04-20 | -1.05801 | 1.02326 |
| 2020-04-21 | -1.68938 | 1.05884 |
| 2020-04-30 | -1.0788 | 1.07461 |
| 2020-05-01 | -1.61431 | 1.07654 |
| 2020-05-12 | -1.27654 | 1.0803 |
| 2020-06-11 | -3.60557 | 1.11276 |
| 2020-06-24 | -1.54991 | 1.19066 |
| 2020-06-26 | -1.21873 | 1.21281 |
| 2020-09-03 | -2.0431 | 1.22153 |
| 2020-09-08 | -1.52274 | 1.27487 |
| 2020-09-23 | -1.61982 | 1.27661 |
| 2020-10-28 | -2.19865 | 1.27487 |
| 2021-01-27 | -1.51161 | 1.19112 |
| 2021-01-29 | -1.27774 | 1.22162 |
| 2021-02-25 | -2.08047 | 1.2766 |
| 2021-03-18 | -1.29656 | 1.27775 |
| 2021-05-12 | -1.64868 | 1.27775 |
| 2021-09-28 | -1.58253 | 1.2766 |
| 2022-01-05 | -1.4986 | 1.27775 |
| 2022-01-18 | -1.42664 | 1.27894 |
| 2022-02-03 | -1.61862 | 1.29734 |
| 2022-02-10 | -1.51983 | 1.31786 |
| 2022-03-07 | -1.89972 | 1.26015 |
| 2022-04-05 | -1.3674 | 1.11278 |
| 2022-04-11 | -1.17163 | 1.11278 |
| 2022-04-21 | -1.13477 | 1.11278 |
| 2022-04-22 | -1.66583 | 1.117 |
| 2022-04-26 | -1.61968 | 1.13588 |
| 2022-04-29 | -2.40446 | 1.13588 |
| 2022-05-05 | -2.81981 | 1.1577 |
| 2022-05-09 | -2.12397 | 1.1577 |
| 2022-05-18 | -2.04347 | 1.17399 |
| 2022-06-09 | -1.48758 | 1.17815 |
| 2022-06-10 | -1.86863 | 1.22075 |
| 2022-06-13 | -3.36532 | 1.26021 |
| 2022-06-16 | -1.78329 | 1.27868 |
| 2022-08-19 | -1.28452 | 1.27868 |
| 2022-08-22 | -1.51076 | 1.28512 |
| 2022-08-26 | -2.12418 | 1.3001 |
| 2022-09-13 | -2.91735 | 1.28512 |
| 2022-09-23 | -1.35008 | 1.28512 |
| 2022-09-29 | -1.50911 | 1.30093 |
| 2022-10-07 | -2.00744 | 1.35094 |
| 2022-10-14 | -1.7487 | 1.37036 |
| 2022-11-02 | -1.73716 | 1.37036 |
| 2022-12-05 | -1.53692 | 1.42968 |
| 2022-12-15 | -1.57867 | 1.48813 |
| 2023-02-21 | -1.66497 | 1.48813 |
| 2023-09-21 | -1.62171 | 1.42968 |
| 2024-02-13 | -1.54857 | 1.31861 |
| 2024-04-10 | -1.4866 | 1.29934 |
| 2024-04-30 | -1.33784 | 1.28495 |
| 2024-07-24 | -1.57716 | 1.08616 |
| 2024-08-05 | -1.78695 | 1.09381 |
| 2024-10-31 | -1.23826 | 0.944043 |
| 2024-12-18 | -2.45511 | 0.929984 |
| 2025-01-10 | -1.16536 | 0.927022 |
| 2025-02-27 | -1.11865 | 0.886173 |
| 2025-03-06 | -1.26668 | 0.886173 |
| 2025-03-10 | -1.47601 | 0.886173 |
| 2025-04-03 | -2.70355 | 0.888084 |
| 2025-04-04 | -3.57615 | 0.912106 |
| 2025-04-07 | -1.2623 | 0.915113 |
| 2025-04-08 | -1.25378 | 0.931241 |
| 2025-04-10 | -2.56193 | 0.956226 |
| 2025-04-21 | -1.28473 | 0.97381 |
| 2025-05-21 | -1.30294 | 0.986209 |
| 2025-10-10 | -1.27137 | 0.888084 |
| 2025-11-13 | -1.23966 | 0.855362 |
| 2025-11-20 | -0.879954 | 0.876526 |
| 2026-01-20 | -1.08407 | 0.880298 |
| 2026-01-30 | -1.35269 | 0.888084 |
| 2026-02-12 | -0.893709 | 0.888084 |
| 2026-03-03 | -1.18655 | 0.894623 |
| 2026-03-12 | -1.18529 | 0.912888 |
| 2026-03-18 | -1.29076 | 0.9345 |
| 2026-03-20 | -1.82729 | 1.02322 |
| 2026-03-26 | -1.53826 | 1.07502 |
| 2026-05-15 | -1.36096 | 1.02322 |
| 2026-06-05 | -2.05967 | 1.07502 |
| 2026-06-10 | -1.18456 | 1.0858 |
Rolling 500-observation historical VaR 95 forecast
% loss · one-day · notebook 06
The same portfolio, six risk numbers per confidence level
% of NAV · one day · notebook 06
| estimator | α = 95% | α = 99% |
|---|---|---|
| historical VaR | 1.07906 | 1.91245 |
| parametric (normal) VaR | 1.15099 | 1.64484 |
| Cornish-Fisher VaR | 1.0694 | 4.04734 |
| Monte Carlo VaR | 1.16561 | 1.65666 |
| historical ES | 1.71784 | 3.02151 |
| parametric ES | 1.4538 | 1.8904 |
Diversification decay under correlation stress
% annualised · λ from 0 (observed) to 1 (all correlations → 1) · notebook 06
| λ | portfolio volatility |
|---|---|
| 0 | 11.6441 |
| 0.05 | 11.8839 |
| 0.1 | 12.119 |
| 0.15 | 12.3496 |
| 0.2 | 12.576 |
| 0.25 | 12.7984 |
| 0.3 | 13.017 |
| 0.35 | 13.232 |
| 0.4 | 13.4435 |
| 0.45 | 13.6518 |
| 0.5 | 13.8569 |
| 0.55 | 14.0591 |
| 0.6 | 14.2584 |
| 0.65 | 14.4549 |
| 0.7 | 14.6488 |
| 0.75 | 14.8402 |
| 0.8 | 15.0291 |
| 0.85 | 15.2157 |
| 0.9 | 15.4 |
| 0.95 | 15.5821 |
| 1 | 15.7622 |
Coverage and independence tests · rolling 500-observation historical VaR 95
| Test | Statistic | p-value | Verdict |
|---|---|---|---|
| Kupiec unconditional coverage | 7.14782 | 0.0075055 | Reject at 5% |
| Christoffersen independence | 13.3917 | 0.00025274 | Reject at 5% |
| Conditional coverage | 20.5395 | 0.00003467 | Reject at 5% |
135 breaches over 2,140 forecasts against 107 expected; likelihood-ratio statistics.
Breach transition counts
| n00 | n01 | n10 | n11 | Expected n11 under independence |
|---|---|---|---|---|
| 1,889 | 115 | 115 | 20 | 8.51636 |
Exception run lengths
| Run length (days) | Runs |
|---|---|
| 1 | 98 |
| 2 | 15 |
| 3 | 1 |
| 4 | 1 |
VaR and ES by estimator (% of NAV, one day)
| Estimator | α = 95% | α = 99% |
|---|---|---|
| historical VaR | 1.07906 | 1.91245 |
| parametric (normal) VaR | 1.15099 | 1.64484 |
| Cornish-Fisher VaR | 1.0694 | 4.04734 |
| Monte Carlo VaR | 1.16561 | 1.65666 |
| historical ES | 1.71784 | 3.02151 |
| parametric ES | 1.4538 | 1.8904 |
Moving-block bootstrap uncertainty · 2,000 replications, 21-day blocks, seed 20260803
| Measure | Point estimate (%) | Bootstrap 95% lower (%) | Bootstrap 95% upper (%) |
|---|---|---|---|
| Historical VaR 95 | 1.07906 | 0.930196 | 1.21882 |
| Historical ES 95 | 1.71784 | 1.42121 | 2.12557 |
Fixed historical stress windows within the frozen sample
| Window | Start | End | Cumulative return | Max drawdown | Worst day | VaR breaches |
|---|---|---|---|---|---|---|
| Volatility shock of Q4 2018 | 2018-09-20 | 2018-12-24 | -0.102264 | -0.108447 | -0.0186348 | 16 |
| COVID-19 selloff | 2020-02-19 | 2020-03-23 | -0.212531 | -0.217114 | -0.0708021 | 9 |
| 2022 inflation and rate shock | 2022-01-03 | 2022-10-14 | -0.241591 | -0.240258 | -0.0336532 | 26 |
Five deepest drawdown episodes
| Depth | Start | Trough | Recovery | Duration (days) |
|---|---|---|---|---|
| 0.243305 | 2021-12-27 | 2022-10-14 | 2024-03-21 | 561 |
| 0.217114 | 2020-02-19 | 2020-03-18 | 2020-07-10 | 99 |
| 0.112688 | 2018-08-29 | 2018-12-24 | 2019-03-15 | 135 |
| 0.109504 | 2025-02-19 | 2025-04-08 | 2025-05-16 | 61 |
| 0.0720142 | 2026-02-25 | 2026-03-27 | 2026-04-17 | 36 |
Replaying four historical episodes against today's weights
| Scenario | Portfolio P&L | Assets shocked |
|---|---|---|
| GFC-2008 | -0.305 | 8 |
| Covid-2020 | -0.206 | 8 |
| RateShock-2022 | -0.247 | 8 |
| DotCom-2000 | -0.23925 | 8 |
Target weights
| ETF | Weight |
|---|---|
| SPY | 0.3 |
| QQQ | 0.1 |
| IWM | 0.05 |
| EFA | 0.1 |
| AGG | 0.2 |
| TLT | 0.1 |
| GLD | 0.075 |
| VNQ | 0.075 |
Summary card (rf 2%)
| Metric | Value |
|---|---|
| annualized_return | 0.101367 |
| annualized_vol | 0.115035 |
| sharpe_ratio | 0.723273 |
| sortino_ratio | 1.00797 |
| calmar_ratio | 0.416624 |
| hit_rate | 0.568561 |
| max_drawdown | 0.243305 |
| skew | -0.542907 |
| kurtosis | 12.9753 |
| VaR95 | 0.0107906 |
| ES95 | 0.0171784 |
| Sharpe (rf 3%) | 0.636342 |
| Total cost (fraction of NAV) | 0.00182581 |
Audience and decision
Research significance
Risk owners, model validators, and control functions
Risk managers, treasury teams, model validators, and governance committees setting limits, capital buffers, or escalation thresholds require evidence that exceptions match the model's stated confidence level and arrive independently.
Decision context
Whether VaR is fit to govern the portfolio by itself
This evidence says no for this portfolio, model, and sample. VaR can remain one lens, but it needs recalibration or redesign and must sit beside expected shortfall, drawdown, scenario analysis, and correlation stress.
Three tests separate frequency error from clustered failure
The evidence comes from one forecast record. The portfolio was a strategic ETF book, rebalanced monthly and built without look-ahead. It paid 10 basis points of proportional turnover cost. After warm-up it produced 2,640 net daily returns and 2,140 forecasts. Each VaR estimate used only the preceding 500 observations.
The unconditional-coverage test rejected the stated 5% breach probability (Kupiec p = 0.0075). The independence test rejected non-clustered arrivals (Christoffersen p = 0.00025). The combined conditional-coverage test also rejected (p = 0.000035). All three belong in the report. The model missed too often, and its misses ran back to back.
The full-sample historical VaR95 point estimate was 1.079%. Its 95% moving-block bootstrap interval ran 0.930%–1.219%. ES95 was 1.718%, with an interval of 1.421%–2.126%. Those intervals measure estimator uncertainty. They do not rescue a rejected forecast process.
Backtest the forecast process, not just the latest risk number
- Test unconditional coverage and exception independence separately. A correct average rate can hide clustering.
- Treat an exception cluster as information about regime adaptation, not as unrelated surprises.
- Report expected shortfall beside VaR so the severity beyond the threshold stays visible.
- Add date-fixed scenarios and correlation stresses for risks a rolling empirical quantile may adapt to slowly.
- Keep costs, timing, and no-look-ahead controls inside the backtest that produces the evidence.
Inspect the forecasts, tests, data version, and code
Clustered breaches establish calibration failure, not its cause
Lab measurement The rolling historical 95% VaR model produced 135 breaches against 107 expected across 2,140 forecasts. Coverage, independence, and conditional-coverage tests all rejected calibration. Its 500-observation window changes only as new returns enter it.
Institutional record The sample spans a period when inflation, policy rates, Treasury yields, equity valuations, and cross-asset correlation all changed together.
Interpretive synthesis An exception cluster should prompt a review of the return distribution, dependence structure, and volatility process. It should also prompt scenarios drawn from outside the window. Regime change is one possible explanation, not a state the backtest measures.
Causal boundary: the backtests identify frequency error and dependence among exceptions. They do not identify inflation, monetary policy, correlation reversal, or another macro factor as the cause.
Numbers
| Statement | Value | As stated | Note |
|---|---|---|---|
| breaches at 95% VaR | 135 | 135 | |
| expected breaches at 5% | 107 | 107 | |
| observed breach rate | 6.31% | 6.31% | |
| one-step forecasts | 2,140 | 2,140 | |
| net daily returns after warm-up | 2,640 | 2,640 | |
| Kupiec unconditional-coverage p-value | 0.0075 | 0.0075 | |
| Christoffersen independence p-value | 0.00025 | 0.00025 | |
| Conditional-coverage p-value | 0.000035 | 0.000035 | |
| Historical VaR 95 (one day) | 1.079% | 1.079% | |
| VaR 95 bootstrap interval · lower | 0.930% | 0.930% | |
| VaR 95 bootstrap interval · upper | 1.219% | 1.219% | |
| Historical ES 95 (one day) | 1.718% | 1.718% | |
| ES 95 bootstrap interval · lower | 1.421% | 1.421% | |
| ES 95 bootstrap interval · upper | 2.126% | 2.126% | |
| breach-follows-breach days observed | 20 | 20 | |
| breach-follows-breach days expected under independence | ≈8.5 | ≈8.5 | |
| isolated single-day exception runs (from the breach dates) | 98 | 99 unverified | The page's run structure was derived from the transition counts alone; the recorded breach dates give 98 run(s) of 1 day(s), 15 run(s) of 2 day(s), 1 run(s) of 3 day(s), 1 run(s) of 4 day(s). |
| two-day exception runs (from the breach dates) | 15 | 12 unverified | The page's run structure was derived from the transition counts alone; the recorded breach dates give 98 run(s) of 1 day(s), 15 run(s) of 2 day(s), 1 run(s) of 3 day(s), 1 run(s) of 4 day(s). |
| three-day exception runs (from the breach dates) | 1 | 4 unverified | The page's run structure was derived from the transition counts alone; the recorded breach dates give 98 run(s) of 1 day(s), 15 run(s) of 2 day(s), 1 run(s) of 3 day(s), 1 run(s) of 4 day(s). |
| four-day exception runs (from the breach dates) | 1 | ||
| Annualised return | 10.14% | 10.14% | |
| Annualised volatility | 11.50% | 11.50% | |
| Sharpe (rf 3%) | 0.64 | 0.64 | |
| Sharpe (rf 2%) | 0.72 | ≈0.72 | |
| Maximum drawdown | −24.3% | -24.3% | |
| Skewness of daily returns | −0.54 | -0.54 | |
| Excess kurtosis of daily returns | 12.98 | 12.98 | |
| Ending value of $1 | $2.750 | $2.750 | |
| Total modeled costs (% of NAV) | 0.183% | 0.183% | |
| Hit rate (days with positive return) | 57% | 57% | |
| Monthly rebalances | 127 | 127 | |
| First net return | 2016-01-04 | 2016-01-04 | |
| Last net return | 2026-07-06 | 2026-07-06 |
3 statements the exporter could not reproduce to printed precision; each note says why.
Notes
Fat tails and the failure of normal VaR
5 min · Prerequisites: quantiles, moments, and basic risk metrics
Parametric-normal VaR takes a mean and standard deviation and reads the quantile off the Gaussian: $ \mathrm{VaR}\alpha = -( \mu + z{1-\alpha},\sigma )$. The procedure is exact when returns are normal and can materially underestimate tail risk when they are not, because the Gaussian density dies like while empirical return distributions die like a power law, with tail index around 3 to 4 for daily equity returns.1 Every moment of the comparison fails in the same direction:
The counting argument. Daily equity moves of five standard deviations should occur, under normality, about once per 14,000 years. The realized record produces them every few years; October 19, 1987 was, on a Gaussian yardstick, roughly a 20σ event — a probability so small it has no physical interpretation. The model is not slightly wrong in the tail; it is wrong by factors of to , depending on the tail threshold.
The moment argument. Excess kurtosis of daily index returns is far above the Gaussian's zero. Since sample variance is dominated by the very observations the Gaussian deems nearly impossible, is inflated by past crises while the normal quantile formula simultaneously understates how much worse than the next crisis will be. The errors do not cancel; at high confidence levels the understatement wins.
The structural argument. Volatility clustering means returns are a mixture of distributions — calm-regime and stress-regime — and mixtures of normals with different variances are themselves fat-tailed. So even if each day were conditionally Gaussian, unconditional normal VaR would still be miscalibrated. Worse, the stress regime arrives with correlations lurching toward one, so the portfolio-level tail is fatter than any asset-level analysis suggests.
Available responses include historical-simulation VaR, as used on the risk dashboard; Expected Shortfall, which averages the tail beyond a quantile; and extreme-value methods that fit an asymptotic tail family such as the GPD or GEV. Estimates at very high confidence levels remain extrapolations beyond limited observed data.
Footnotes
-
McNeil, A. J., R. Frey, and P. Embrechts (2015), Quantitative Risk Management: Concepts, Techniques and Tools , revised 2nd ed., Princeton University Press, chs. 2 and 5, ISBN 978-0-691-16627-8. publisher catalog ↩
Limitations
- The bootstrap conditions on one realized history, and the 21-day block length is judgmental.
- Historical quantiles can adapt slowly after regime changes. Other windows and weightings may behave differently.
- The portfolio holds fixed strategic weights and rebalances monthly. Dynamic de-risking was not modeled.
- Close-to-close ETF prices omit intraday liquidity and execution stress.
- Historical scenarios replay known crises and do not bound future loss paths.
Sources
- 1Kupiec, P. H. (1995), “Techniques for Verifying the Accuracy of Risk Measurement Models,” Journal of Derivatives 3(2), 73–84. doi:10.3905/jod.1995.407942
- 2Christoffersen, P. F. (1998), “Evaluating Interval Forecasts,” International Economic Review 39(4), 841–862. doi:10.2307/2527341
- 3Artzner, P., F. Delbaen, J.-M. Eber, and D. Heath (1999), “Coherent Measures of Risk,” Mathematical Finance 9(3), 203–228. doi:10.1111/1467-9965.00068
Cite this
Wisniewski, K. (2026, August 8). Historical VaR under coverage and independence tests. Quantitative Markets & Institutions Lab. https://www.kylewisniewski.com/lab/var-backtest
@misc{wisniewski2026var,
author = {Wisniewski, Kyle},
title = {Historical VaR under coverage and independence tests},
year = {2026},
month = {aug},
howpublished = {\url{https://www.kylewisniewski.com/lab/var-backtest}},
note = {Empirical finding · Quantitative Markets & Institutions Lab · commit 4806df9}
}