Free lesson · Time series
GARCH: volatility clusters, and you can model the cluster
Open interactive lessonPractice calculationsExplore labs
Start with the idea
GARCH treats yesterday’s squared surprise and variance forecast as information about tomorrow’s dispersion. It models volatility, not the sign of the next return. Nonnegative parameters help keep variance forecasts nonnegative.
Symbols, units & horizon
- σₜ²: conditional variance for period t
- εₜ₋₁: previous period innovation in return units
- ω: nonnegative variance intercept
- α: coefficient on the previous squared innovation
- β: coefficient on previous conditional variance
- α+β: persistence, below 1 for the finite stationary variance used here
- v̄: long-run variance, not volatility
When and why to use this
Use a variance forecast to scale risk, stress option assumptions and evaluate whether residuals are still clustered after a model is fitted.
Every trader knows that after a big move, more big moves follow. GARCH(1,1) turns the folk knowledge into an equation with three parameters:
Update GARCH and solve its long-run variance
- Insert the last squared innovation and forecast into . All terms have squared-return units.
- If an unconditional variance exists, . Thus ; rearrange to .
- Forecast deviations decay approximately by ; a persistence half-life uses ln(.5)/ln(α+β) when the sum lies between 0 and 1.
ω=.000002, α=.10, β=.85, last shock=.02, last variance=.0001 gives next variance=.000127 and volatility≈1.127%. Long-run variance=.00004.
- : how much yesterday's surprise () raises today's variance. Typical equity value ≈ 0.05–0.10.
- : how much of yesterday's variance carries over. Typical ≈ 0.85–0.92.
- : persistence. Near 1 means shocks decay slowly; the half-life of a vol shock is .
- : the long-run variance the process reverts to.
Uses on the desk: forecast tomorrow's vol to size positions (vol targeting), price options with a term structure, set stops that widen after shocks instead of getting run over by them.
GARCH fit: , . Half-life of a volatility shock, in days?
Persistence is 0.98. days. A vol spike takes over a month to decay halfway — which is why the VIX falls slowly and rises fast.
Python implementation
Self-contained teaching example. Python 3.10+; dependencies and input conventions are shown in the code and notation. Run in your own Python environment.
def garch_next(previous_variance, previous_innovation, omega, alpha, beta):
if min(previous_variance,omega,alpha,beta) < 0:
raise ValueError("Variances and coefficients must be nonnegative")
return omega+alpha*previous_innovation**2+beta*previous_variance
def garch_long_run(omega, alpha, beta):
if min(omega,alpha,beta) < 0 or alpha+beta >= 1:
raise ValueError("Require nonnegative parameters and alpha+beta < 1")
return omega/(1-alpha-beta)
print(garch_next(.0001, -.02, .000002, .08, .90))Continue learning
Time Series Analysis — all lessons- Start with time order, lags and differences
- Before GARCH: mean, shocks and changing variance
- Stationarity: the assumption every test makes and every market breaks
- Autocorrelation: momentum, mean reversion, or coin flips
- GARCH: volatility clusters, and you can model the cluster
- Cointegration: a stationary relationship to test
- Forecast horizons, EWMA, and model diagnostics
- Markov chains: a two-state model you can calculate by hand
- Hidden Markov models: predict, observe, update
Quantitative finance and development glossary · Python resources and libraries · Research sources and limitations