Derek
All notes

Filtered historical simulation

Sep 20, 2026, filed under risk, time series · part of VaR/ES risk engine

Plain historical simulation treats every day in the sample window as equally informative about tomorrow. That’s the part filtering fixes: yesterday’s volatility regime should count for more than a quiet stretch from six months ago.

Let zt=rt/σtz_t = r_t / \sigma_t, where σt\sigma_t is the GARCH(1,1) conditional volatility. Under a correctly specified model, {zt}\{z_t\} is approximately i.i.d.\text{i.i.d.} with unit variance.

Proof. Dividing rtr_t by its fitted conditional standard deviation removes the time-varying scale by construction: Var(zt)=Var(rt)/σt2=1\mathrm{Var}(z_t) = \mathrm{Var}(r_t)/\sigma_t^2 = 1. What’s left is the standardized shape of the shock, which GARCH assumes is drawn independently each day. ◻

Filtered historical simulation rescales each historical standardized residual ztz_t by today’s forecast σt+1\sigma_{t+1} before reading VaR and ES off the resulting sample.

That’s the whole trick: keep the empirical shape of the tail from history, but let today’s volatility regime set its scale.