Financial returns exhibit volatility clustering — calm periods and turbulent periods tend to persist. GARCH(1,1) models the conditional variance as a function of past squared returns and past variance, capturing this self-exciting behaviour.
GARCH(1,1) with ω = 0.05, α = 0.10 and β = 0.85 has a long-run variance of ω/(1 − α − β) = 1, and a volatility shock halves in 13.5 days. Simulated returns are fat-tailed — kurtosis 3.58 against 3 for a normal — even though every day’s shock is normal. Clustering alone produces fat tails.
- GARCH(1,1) is hard to beat (Hansen & Lunde 2005), but it reacts to large moves after they happen; it does not foresee them.
- Persistence close to 1 may be an artefact of structural breaks in the data.
- Symmetric GARCH misses the leverage effect: falls raise volatility more than rises (EGARCH, GJR).
rng = np.random.default_rng(7)
omega, alpha, beta, n = 0.05, 0.10, 0.85, 20_000
long_run = omega / (1 - alpha - beta)
half_life = np.log(0.5) / np.log(alpha + beta) # days for a volatility shock to halve
r, s2 = np.zeros(n), np.full(n, long_run)
for t in range(1, n):
s2[t] = omega + alpha * r[t - 1] ** 2 + beta * s2[t - 1]
r[t] = np.sqrt(s2[t]) * rng.normal()
kurt = ((r - r.mean()) ** 4).mean() / r.var() ** 2 # normal = 3Assumes import numpy as np and import pandas as pd. Each snippet simulates or makes up its own series, as the comments say.
The same idea with a library
# Python — GARCH(1,1) from arch import arch_model model = arch_model(returns, vol='Garch', p=1, q=1) result = model.fit(disp='off') print(result.summary()) # Forecast next 5 periods of volatility fcast = result.forecast(horizon=5)
- R. F. Engle, “Autoregressive Conditional Heteroscedasticity with Estimates of the Variance of United Kingdom Inflation”, Econometrica 50(4), 1982
- T. Bollerslev, “Generalized Autoregressive Conditional Heteroskedasticity”, Journal of Econometrics 31(3), 1986
- P. R. Hansen & A. Lunde, “A Forecast Comparison of Volatility Models: Does Anything Beat a GARCH(1,1)?”, Journal of Applied Econometrics 20(7), 2005
Last reviewed October 2026 · How this site checks its content · Report a mistake
1. What does a GARCH model describe?
Show answer
C. GARCH captures volatility clustering: calm periods and turbulent periods each tend to persist.
2. In a GARCH(1,1), α + β is close to 1. What does that mean?
Show answer
C. α + β sets how fast a shock to variance decays back to its long-run level. Daily equity returns typically give values around 0.97–0.99.
3. Returns show no autocorrelation, but squared returns do. What does that say?
Show answer
B. This is the stylised fact GARCH was built for (Engle 1982, Bollerslev 1986).
- Pattern EssaysThe Coiled SpringQuiet gathers before loud. A narrowing range warns about size, not direction
- Risk & PortfolioCurrency HedgingNeutralize FX exposure in global portfolios
- Risk & PortfolioVolatility ModelingEstimate and forecast return variance with GARCH, EWMA, and realized measures
- The Toolkitscipy.stats & statsmodelsStatistical tests, regression diagnostics, time series — the Python stats foundation