Quant Memo
Advanced

Filtered Historical Simulation

Keep the real shape of historical shocks, but rescale each one to reflect today's volatility instead of the volatility on the day it happened. It fixes historical simulation's biggest flaw, that it treats a calm year and a crisis year the same.

Prerequisites: Historical Simulation VaR, GARCH Volatility Models

Plain historical simulation replays the actual returns from the last one or two years, unweighted, unscaled, exactly as they happened. That works fine when volatility has been roughly stable. It works badly the moment volatility has changed: a calm return from a quiet stretch is treated as equally informative as a calm return would be today, even during a period when volatility has doubled, and a crash return from a stressed period gets treated as no more or less likely to repeat than it should be right now. Filtered historical simulation fixes the mismatch by rescaling every historical return to today's volatility before replaying it.

The analogy before any symbols

A tailor altering an old suit for a client does not just hand over the suit as it was cut for someone else's body; she takes the suit's pattern, its shape and proportions, and rescales it to today's measurements. The pattern (where the shoulders taper, how the waist narrows) is preserved; only the scale changes. Filtered historical simulation does this to each day's historical return: it keeps the shape of the shock (was it in the tail, was it mild, which direction) but rescales its size to fit today's volatility "measurements" instead of the volatility on the day it actually happened.

The mechanics

Step 1, standardize. Fit a volatility model, typically GARCH or EWMA, to the historical return series, producing a volatility estimate σ^t\hat\sigma_t for every past day tt. Divide out each day's actual return rtr_t by the volatility that prevailed on that day:

zt=rtσ^t.z_t = \frac{r_t}{\hat\sigma_t}.

In words: ztz_t is the return measured in "units of that day's own volatility," a standardized shock stripped of its historical scale, so a zt=3z_t = -3 means "a three-sigma bad day relative to conditions at the time," whether that day happened during a calm year or a turbulent one.

Step 2, rescale to today. Multiply every standardized shock by today's volatility forecast σ^t+1\hat\sigma_{t+1}:

r~j=σ^t+1×zj,j=1,,N.\tilde r_j = \hat\sigma_{t+1} \times z_j, \qquad j = 1, \ldots, N.

In words: take the shape of each historical shock, expressed as a multiple of the volatility at the time, and rebuild it at today's scale. A day that was a mild −0.5% move during a low-volatility year might become a −1.1% move once rescaled to a higher-volatility today.

Step 3, run historical simulation as usual on the rescaled series r~j\tilde r_j: sort, and take the appropriate quantile for VaR, exactly as in plain historical simulation. The empirical shape, skew, fat tails, clustering of extreme values, is entirely preserved from the real data; only the overall scale has been updated to match current conditions.

Path explorer
13055time →
end (bold path) 100.38spread of ends 58.966 independent paths, same settings

Notice how these simulated paths wander with a constant volatility throughout; real markets do not, they alternate between calm and turbulent stretches, which is exactly the feature filtered historical simulation is built to track, by rescaling old shocks to today's regime rather than assuming one constant volatility across the whole history.

volatility over time day t: calm, r_t small standardize by σ_t rescale by today's σ
The same historical shock gets a small or large dollar impact depending only on which volatility it is rescaled to, not on any change to the underlying pattern of the shock itself.

Worked example: rescaling one bad day

Two years ago, a stock fell 2.1% on a day when its GARCH-estimated volatility was σ^t=1.0%\hat\sigma_t = 1.0\% daily. Standardized: zt=2.1%/1.0%=2.1z_t = -2.1\% / 1.0\% = -2.1. Today's GARCH volatility forecast is σ^t+1=1.8%\hat\sigma_{t+1} = 1.8\%, since the stock has become more volatile recently. Rescaled: r~=1.8%×(2.1)=3.78%\tilde r = 1.8\% \times (-2.1) = -3.78\%. Plain historical simulation would still be replaying the original −2.1% move; filtered historical simulation replays a −3.78% move instead, because the shock's relative severity (2.1 standard deviations) is what gets preserved, not its raw historical size.

Worked example: VaR before and after filtering

A $20m position, 500-day lookback, 99% confidence (5th worst day). Plain historical simulation's five worst raw returns are −3.5%, −3.1%, −2.8%, −2.6%, −2.4%, none rescaled, giving VaR of 0.035×20,000,000=700,0000.035 \times 20{,}000{,}000 = 700{,}000, i.e. $700,000. Suppose those five worst days mostly occurred 300 to 450 days ago when volatility averaged 1.1% daily, while today's GARCH forecast is 1.6% daily, a ratio of about 1.45. Filtered historical simulation rescales each of those five days by roughly that ratio (day by day, using each day's own estimated σ^t\hat\sigma_t, not just the average), pushing the worst five rescaled returns to roughly −5.1%, −4.5%, −4.1%, −3.8%, −3.5%. The new 99% VaR is 0.051×20,000,000=1,020,0000.051 \times 20{,}000{,}000 = 1{,}020{,}000, i.e. $1,020,000, about 46% higher, entirely because current volatility is higher than it was when those historical shocks originally occurred.

What this means in practice

Filtered historical simulation is the standard "serious upgrade" from plain historical simulation, because it responds to today's volatility regime the way Variance-Covariance VaR does, while keeping the real, non-normal, fat-tailed shape of shocks that variance-covariance VaR assumes away. It requires an extra moving part, a volatility model, whose own estimation error becomes part of the VaR's error, and it needs a joint (multivariate) volatility model for multi-asset books so that correlations get rescaled consistently, not just individual asset volatilities in isolation.

Filtered historical simulation standardizes each historical shock by the volatility prevailing when it happened, then rescales it to today's volatility, keeping the empirical shape of tails while making the level of risk responsive to current conditions, unlike plain historical simulation, which is stuck reporting whatever volatility regime happened to be in the lookback window.

The method's accuracy rests entirely on the quality of the volatility model used to standardize and rescale. If the GARCH or EWMA forecast for today is itself wrong, badly lagging a sudden volatility spike, then every rescaled historical shock inherits that error, and the whole VaR number is wrong in the same direction. It is also easy to forget that rescaling changes magnitude, not probability: a day that was a 1-in-500 event in the original sample is still treated as a 1-in-500 event after rescaling, filtered historical simulation does not claim tail events have become more or less frequent, only that a given event, if it recurred, would now be bigger or smaller.

Related concepts

Practice in interviews

Further reading

  • Barone-Adesi, Giannopoulos & Vosper (1999), VaR without Correlations for Portfolios of Derivative Securities
  • Christoffersen, Elements of Financial Risk Management (Ch. 4)
ShareTwitterLinkedIn