Markets: A Rigorous Course

13.4 GARCH(1,1): forecasting volatility

Core about 35 min

Motivation

Volatility is the one return moment that is strongly forecastable. It sets position size (M03, M14), margin (M01), and the fair value of options (M08, M09). GARCH(1,1) is the workhorse: three parameters, closed-form forecasts, and a likelihood you can maximise in a few lines.

13.4.1Model and stationarity#

Let εt=rt−Et−1rt\varepsilon_t = r_t - \mathbb E_{t-1}r_t (in practice rtr_t minus a constant, or rtr_t itself for daily data). GARCH(1,1) (Bollerslev 1986, generalising Engle 1982) is

εt=σtzt,zt∼iid(0,1),σt2=ω+αεt−12+βσt−12,(13.13)\varepsilon_t = \sigma_t z_t, \quad z_t \overset{iid}{\sim} (0,1), \qquad \sigma_t^2 = \omega + \alpha\varepsilon_{t-1}^2 + \beta\sigma_{t-1}^2, \tag{13.13}

with ω>0\omega>0, α,β≥0\alpha,\beta\ge 0. σt2\sigma_t^2 is Ft−1\mathcal F_{t-1}-measurable. The persistence is p=α+βp = \alpha+\beta.

Proposition 13.10covariance stationarity

{εt}\{\varepsilon_t\} is covariance stationary iff α+β<1\alpha + \beta < 1, and then

σˉ2≡E[εt2]=E[σt2]=ω1−α−β.(13.14)\bar\sigma^2 \equiv \mathbb E[\varepsilon_t^2] = \mathbb E[\sigma_t^2] = \frac{\omega}{1-\alpha-\beta}. \tag{13.14}
Proof

E[εt2]=E[σt2 Et−1zt2]=Eσt2\mathbb E[\varepsilon_t^2] = \mathbb E[\sigma_t^2\,\mathbb E_{t-1}z_t^2] = \mathbb E\sigma_t^2. Taking expectations of (13.13), mt≡Eσt2m_t \equiv \mathbb E\sigma_t^2 satisfies mt=ω+(α+β)mt−1m_t = \omega + (\alpha+\beta)m_{t-1}. This linear recursion converges to a finite limit from any start iff ∣α+β∣<1|\alpha+\beta|<1, and its fixed point is ω/(1−α−β)\omega/(1-\alpha-\beta). If α+β≥1\alpha+\beta\ge 1, mt≥m0+tω→∞m_t \ge m_0 + t\omega \to\infty (for =1=1) or grows geometrically, so no finite stationary second moment exists. εt\varepsilon_t is an MDS, so it is uncorrelated at all non-zero lags.∎

Strict stationarity needs only Eln⁡(αzt2+β)<0\mathbb E\ln(\alpha z_t^2+\beta) < 0 (Nelson 1990), which holds even for α+β=1\alpha+\beta = 1 (IGARCH). An IGARCH process is strictly stationary with infinite variance: its variance forecasts never revert.

Proposition 13.11ARMA representation of εt2\varepsilon_t^2

Let ηt=εt2−σt2=σt2(zt2−1)\eta_t = \varepsilon_t^2 - \sigma_t^2 = \sigma_t^2(z_t^2 - 1). Then ηt\eta_t is an MDS and

εt2=ω+(α+β)εt−12+ηt−βηt−1.(13.15)\varepsilon_t^2 = \omega + (\alpha+\beta)\varepsilon_{t-1}^2 + \eta_t - \beta\eta_{t-1}. \tag{13.15}
Proof

Et−1ηt=σt2(Ezt2−1)=0\mathbb E_{t-1}\eta_t = \sigma_t^2(\mathbb E z_t^2 - 1) = 0. Substitute σt2=εt2−ηt\sigma_t^2 = \varepsilon_t^2 - \eta_t and σt−12=εt−12−ηt−1\sigma_{t-1}^2 = \varepsilon_{t-1}^2 - \eta_{t-1} in (13.13): εt2−ηt=ω+αεt−12+βεt−12−βηt−1\varepsilon_t^2 - \eta_t = \omega + \alpha\varepsilon_{t-1}^2 + \beta\varepsilon_{t-1}^2 - \beta\eta_{t-1}.∎

So squared returns follow an ARMA(1,1) with AR coefficient α+β\alpha+\beta. This is why the autocorrelations of rt2r_t^2 in M02 decay slowly: with α+β\alpha+\beta near 0.98 the decay rate is 2% a day.

13.4.2Filtering and forecasting#

Given data r1,…,rnr_1,\dots,r_n, the variance path is computed recursively. The pre-sample values ε02\varepsilon_0^2 and σ02\sigma_0^2 are unobserved; a standard choice (the arch package's "backcast") sets both equal to a number bb, an exponentially weighted average of early squared returns. Then

σ12=ω+(α+β)b,σt2=ω+αεt−12+βσt−12, t≥2.(13.16)\sigma_1^2 = \omega + (\alpha+\beta)b, \qquad \sigma_t^2 = \omega + \alpha\varepsilon_{t-1}^2 + \beta\sigma_{t-1}^2, \ t\ge 2. \tag{13.16}

The effect of bb decays like βt\beta^t and is negligible after a few hundred observations.

Proposition 13.12multi-step forecasts

For α+β<1\alpha+\beta<1 and k≥1k\ge1,

ET[σT+k2]=ET[εT+k2]=σˉ2+(α+β)k−1(σT+12−σˉ2).(13.17)\mathbb E_T[\sigma_{T+k}^2] = \mathbb E_T[\varepsilon_{T+k}^2] = \bar\sigma^2 + (\alpha+\beta)^{k-1}\left(\sigma_{T+1}^2 - \bar\sigma^2\right). \tag{13.17}

The half-life of a variance shock is

h1/2=ln⁡0.5ln⁡(α+β).(13.18)h_{1/2} = \frac{\ln 0.5}{\ln(\alpha+\beta)}. \tag{13.18}
Proof

σT+12\sigma_{T+1}^2 is known at TT, so the claim holds for k=1k=1. For k≥2k\ge2, by the tower property ET[εT+k−12]=ET[σT+k−12 ET+k−2z2]=ET[σT+k−12]\mathbb E_T[\varepsilon_{T+k-1}^2] = \mathbb E_T[\sigma_{T+k-1}^2\,\mathbb E_{T+k-2}z^2] = \mathbb E_T[\sigma_{T+k-1}^2]. Taking ET\mathbb E_T of (13.13) at T+kT+k: ETσT+k2=ω+(α+β)ETσT+k−12\mathbb E_T\sigma_{T+k}^2 = \omega + (\alpha+\beta)\mathbb E_T\sigma_{T+k-1}^2. Subtract σˉ2=ω+(α+β)σˉ2\bar\sigma^2 = \omega + (\alpha+\beta)\bar\sigma^2: the deviation dk=ETσT+k2−σˉ2d_k = \mathbb E_T\sigma_{T+k}^2 - \bar\sigma^2 satisfies dk=(α+β)dk−1d_k = (\alpha+\beta)d_{k-1}, so dk=(α+β)k−1d1d_k = (\alpha+\beta)^{k-1}d_1. The half-life solves (α+β)h=1/2(\alpha+\beta)^h = 1/2.∎

The variance of the HH-day return ∑k=1HεT+k\sum_{k=1}^H \varepsilon_{T+k} is the sum of the forecasts (the ε\varepsilon are uncorrelated), so the average variance per day over the next HH days is

σˉT,H2=σˉ2+(σT+12−σˉ2)1−(α+β)HH (1−α−β).(13.19)\bar\sigma^2_{T,H} = \bar\sigma^2 + \left(\sigma_{T+1}^2 - \bar\sigma^2\right)\frac{1-(\alpha+\beta)^H}{H\,(1-\alpha-\beta)}. \tag{13.19}

This is the GARCH term structure of volatility, the object to compare with option-implied volatility of the same maturity (M09).

13.4.3Likelihood and maximum-likelihood estimation#

Proposition 13.13Gaussian log-likelihood and score

With zt∼N(0,1)z_t \sim N(0,1) and θ=(ω,α,β)\theta = (\omega,\alpha,\beta), the log-likelihood of ε1,…,εn\varepsilon_1,\dots,\varepsilon_n conditional on the backcast is

ℓ(θ)=−12∑t=1n[ln⁡2π+ln⁡σt2(θ)+εt2σt2(θ)],(13.20)\ell(\theta) = -\frac12\sum_{t=1}^n\left[\ln 2\pi + \ln\sigma_t^2(\theta) + \frac{\varepsilon_t^2}{\sigma_t^2(\theta)}\right], \tag{13.20}

and its gradient is

∂ℓ∂θ=12∑t=1n(εt2σt2−1)1σt2∂σt2∂θ,∂σt2∂θ=(1εt−12σt−12)+β ∂σt−12∂θ.(13.21)\frac{\partial\ell}{\partial\theta} = \frac12\sum_{t=1}^n\left(\frac{\varepsilon_t^2}{\sigma_t^2} - 1\right)\frac{1}{\sigma_t^2}\frac{\partial\sigma_t^2}{\partial\theta}, \qquad \frac{\partial\sigma_t^2}{\partial\theta} = \begin{pmatrix}1\\ \varepsilon_{t-1}^2\\ \sigma_{t-1}^2\end{pmatrix} + \beta\,\frac{\partial\sigma_{t-1}^2}{\partial\theta}. \tag{13.21}
Proof

By the prediction-error decomposition, f(ε1,…,εn)=∏tf(εt∣Ft−1)f(\varepsilon_1,\dots,\varepsilon_n) = \prod_t f(\varepsilon_t\mid\mathcal F_{t-1}), and given Ft−1\mathcal F_{t-1}, εt∼N(0,σt2)\varepsilon_t \sim N(0,\sigma_t^2) with density (2πσt2)−1/2exp⁡(−εt2/(2σt2))(2\pi\sigma_t^2)^{-1/2}\exp(-\varepsilon_t^2/(2\sigma_t^2)). Take logs and sum. For the gradient, ∂θ[ln⁡σt2+εt2/σt2]=(1/σt2−εt2/σt4) ∂θσt2\partial_\theta[\ln\sigma_t^2 + \varepsilon_t^2/\sigma_t^2] = (1/\sigma_t^2 - \varepsilon_t^2/\sigma_t^4)\,\partial_\theta\sigma_t^2; multiply by −12-\frac12. Differentiating (13.13) with the chain rule gives the recursion for ∂θσt2\partial_\theta\sigma_t^2 (the αεt−12\alpha\varepsilon_{t-1}^2 term does not depend on θ\theta through ε\varepsilon, since ε\varepsilon is data).∎

At the true θ\theta, each score term has conditional mean 12Et−1(zt2−1)⋅(…)=0\frac12\mathbb E_{t-1}(z_t^2-1)\cdot(\ldots) = 0 whatever the distribution of ztz_t, provided Ezt2=1\mathbb E z_t^2 = 1. So maximising (13.20) is consistent even when returns are fat-tailed: this is quasi-maximum likelihood (QMLE). The standard errors must then use the sandwich form A−1BA−1A^{-1}BA^{-1} (Hessian AA, outer product of scores BB), as in Bollerslev and Wooldridge (1992). Fat-tailed ztz_t make A−1A^{-1} alone too small.

Implementation details that matter (all in exercises/modules/M13-forecasting/solutions/m13_garch.py):

  • Enforce ω>0\omega>0, α,β≥0\alpha,\beta\ge0, α+β<1\alpha+\beta<1 by reparametrising: ω=s eϑ0\omega = s\,e^{\vartheta_0} (ss the sample variance of the returns, a scale), α+β=logistic⁡(ϑ1)\alpha+\beta = \operatorname{logistic}(\vartheta_1), α/(α+β)=logistic⁡(ϑ2)\alpha/(\alpha+\beta) = \operatorname{logistic}(\vartheta_2), and optimise freely over ϑ\vartheta.
  • Scale returns to percent. The likelihood surface in ω\omega is badly conditioned when ω∼10−6\omega \sim 10^{-6}.
  • Start from several points; the likelihood is flat along the ridge α+β≈\alpha+\beta \approx const.

The test suite simulates 10,000 days from (ω,α,β)=(10−6,0.08,0.90)(\omega,\alpha,\beta) = (10^{-6}, 0.08, 0.90), recovers α,β\alpha,\beta within 0.03, matches the arch package's log-likelihood to 10−810^{-8} relative at fixed parameters, and checks (13.17) against a 400,000-path Monte Carlo.

13.4.4Kurtosis implied by GARCH#

Proposition 13.14

If zt∼N(0,1)z_t\sim N(0,1) and 1−(α+β)2−2α2>01 - (\alpha+\beta)^2 - 2\alpha^2 > 0, the unconditional kurtosis of εt\varepsilon_t is

κ=Eεt4(Eεt2)2=3 [1−(α+β)2]1−(α+β)2−2α2>3.(13.22)\kappa = \frac{\mathbb E\varepsilon_t^4}{(\mathbb E\varepsilon_t^2)^2} = \frac{3\,[1-(\alpha+\beta)^2]}{1-(\alpha+\beta)^2-2\alpha^2} > 3. \tag{13.22}
Proof

Write σt2=ω+σt−12(αzt−12+β)\sigma_t^2 = \omega + \sigma_{t-1}^2(\alpha z_{t-1}^2 + \beta). Square and take expectations, using independence of zt−1z_{t-1} and σt−1\sigma_{t-1} and stationarity (Eσ4≡m4\mathbb E\sigma^4 \equiv m_4, Eσ2=σˉ2\mathbb E\sigma^2 = \bar\sigma^2): m4=ω2+2ωσˉ2(α+β)+m4 E(αz2+β)2m_4 = \omega^2 + 2\omega\bar\sigma^2(\alpha+\beta) + m_4\,\mathbb E(\alpha z^2+\beta)^2. Now E(αz2+β)2=3α2+2αβ+β2=(α+β)2+2α2\mathbb E(\alpha z^2+\beta)^2 = 3\alpha^2 + 2\alpha\beta + \beta^2 = (\alpha+\beta)^2 + 2\alpha^2. With p=α+βp = \alpha+\beta and ω=σˉ2(1−p)\omega = \bar\sigma^2(1-p), the numerator is σˉ4[(1−p)2+2p(1−p)]=σˉ4(1−p2)\bar\sigma^4[(1-p)^2 + 2p(1-p)] = \bar\sigma^4(1-p^2). Hence m4=σˉ4(1−p2)/(1−p2−2α2)m_4 = \bar\sigma^4(1-p^2)/(1-p^2-2\alpha^2), and Eε4=3m4\mathbb E\varepsilon^4 = 3m_4.∎

With (α,β)=(0.09,0.89)(\alpha,\beta) = (0.09, 0.89), κ=3×0.0396/0.0234=5.08\kappa = 3\times0.0396/0.0234 = 5.08; with (0.08,0.90)(0.08, 0.90), κ=4.43\kappa = 4.43. Conditionally Gaussian shocks with GARCH variance already produce fat unconditional tails. Index returns usually show more (M02), which is why Student-tt innovations and jump terms are common.

Worked example: a Nifty-like GARCH forecast#

Take illustrative parameters α=0.09\alpha = 0.09, β=0.89\beta = 0.89 (persistence 0.98, inside the 0.95–0.99 range typically reported for equity indices) and a long-run volatility of 15% a year. Daily long-run variance is σˉ2=0.152/252=8.93×10−5\bar\sigma^2 = 0.15^2/252 = 8.93\times10^{-5}, so ω=σˉ2(1−0.98)=1.786×10−6\omega = \bar\sigma^2(1-0.98) = 1.786\times10^{-6}. The half-life (13.18) is ln⁡0.5/ln⁡0.98=34.3\ln0.5/\ln0.98 = 34.3 trading days.

One-step update. Today's conditional volatility was 18% annualised (σT2=0.182/252=1.286×10−4\sigma_T^2 = 0.18^2/252 = 1.286\times10^{-4}) and the index fell 3% (εT=−0.03\varepsilon_T = -0.03). Then σT+12=1.786×10−6+0.09×0.0009+0.89×1.286×10−4=1.972×10−4\sigma_{T+1}^2 = 1.786\times10^{-6} + 0.09\times0.0009 + 0.89\times1.286\times10^{-4} = 1.972\times10^{-4}, or 1.972×10−4×252=22.3%\sqrt{1.972\times10^{-4}\times252} = 22.3\% annualised.

Term structure. Suppose instead σT+1\sigma_{T+1} is 25% annualised. By (13.17) the forecast for day 5 is 24.4% and for day 21 is 22.2% (annualised). By (13.19) the average over the next 21 trading days is 252 [8.93×10−5+(2.480×10−4−8.93×10−5)(1−0.9821)/(21×0.02)]=23.5%\sqrt{252\,[8.93\times10^{-5} + (2.480\times10^{-4} - 8.93\times10^{-5})(1-0.98^{21})/(21\times0.02)]} = 23.5\%. A one-month implied volatility well above 23.5% says the options market prices more risk than this model; whether that gap is a variance risk premium or information the model lacks (an election, a budget) is the M09 question.

Evaluating volatility forecasts#

True variance is unobserved. If you evaluate a variance forecast hth_t against a noisy unbiased proxy σ^t2\hat\sigma_t^2 (squared return, or intraday realised variance), only some loss functions rank forecasts the same way as they would against the true variance. Patton (2011) shows that MSE, (σ^t2−ht)2(\hat\sigma_t^2 - h_t)^2, and QLIKE, σ^t2/ht−ln⁡(σ^t2/ht)−1\hat\sigma_t^2/h_t - \ln(\hat\sigma_t^2/h_t) - 1, are robust in this sense; MSE on volatilities (square roots) is not. QLIKE is the negative Gaussian log-likelihood up to constants, so (13.20) is a QLIKE fit.

Indian evidence (as reported in abstracts; read the papers before relying on details) Pandey (2003, IIM Ahmedabad working paper) compared GARCH and EGARCH with unconditional estimators against realised volatility on Nifty and reported that conditional models forecast five-day and monthly realised volatility poorly. Rajvanshi, Santra and Basu (IIM Calcutta WPS 797) report that GARCH models augmented with India VIX outperform both plain GARCH and implied volatility alone for Nifty 50, using five-minute realised variance as the target. The two are consistent with a common pattern: implied volatility contains information GARCH lacks (scheduled events), and GARCH's edge is at short horizons.

Practitioner notes

  • GARCH reacts to a shock one day late and symmetrically. Equity indices show the leverage effect (falls raise volatility more than rises), which GJR-GARCH and EGARCH capture.
  • RiskMetrics EWMA, σt2=λσt−12+(1−λ)εt−12\sigma_t^2 = \lambda\sigma_{t-1}^2 + (1-\lambda)\varepsilon_{t-1}^2 with λ=0.94\lambda = 0.94, is GARCH with ω=0\omega = 0 and α+β=1\alpha+\beta = 1. It never mean-reverts, so its multi-step forecasts are flat. That is a real flaw for 1-month horizons after a spike.
  • Jumps on scheduled days (results, budget, elections, RBI policy) are better handled by adding a known event variance than by hoping GARCH learns them.
  • Volatility targeting (scaling a position by σ\*/σ^t+1\sigma^\*/\hat\sigma_{t+1}, as in time-series momentum, M04 · 4.3) must use σ^t+1\hat\sigma_{t+1} computed from data up to tt. Using σt+1\sigma_{t+1} from a full-sample fit is a look-ahead (13.6).

Data lab Open on OI Charts (opens in a new tab)

GARCH(1,1) on the Nifty: fit, conditional volatility and forecast cone

The lab fits GARCH(1,1) to Nifty 50 daily log returns from 2010 by Gaussian quasi-maximum likelihood (13.20), with the reparametrisation of 13.4.3 that keeps ω>0\omega > 0 and α+β<1\alpha + \beta < 1. The first chart compares the fitted conditional volatility σt\sigma_t with the volatility actually realised over the following 21 sessions. The second shows the forecast term structure from the last date, (13.17) and (13.19), and a cone from simulated paths that resample the fitted standardised residuals, so the cone keeps their fat tails.

What to look at The persistence α+β\alpha + \beta and the half-life (13.18); how far the next-day volatility is from the long-run level; the gap between the kurtosis implied by (13.22) and the sample kurtosis.

Questions

  1. Is the fitted persistence inside the 0.95–0.99 range quoted in 13.4? Convert it to a half-life in calendar weeks.
  2. The implied kurtosis (13.22) assumes Gaussian shocks. Is it below the sample kurtosis? What does Cont's fact (7) in M02 · 2.5 say about the gap?
  3. Compare the 21-day average forecast with today's India VIX (M09). Which is higher, and is the difference a variance risk premium or information the model lacks?
  4. The parameters are estimated on the whole sample, including the data you are now forecasting from. Which look-ahead problem of 13.6 does that create for a backtest of volatility targeting, and how would you remove it?

Create a free account

Reading is open to everyone. An account keeps your progress, answers, notes and code drafts, and gives you the study plan, the journals and the simulator. Running code needs an account approved for it.