GARCH Models for Volatility Forecasting
Volatility is the options trader's raw material, and GARCH - Generalized Autoregressive Conditional Heteroskedasticity - is the workhorse of volatility econometrics. GARCH models capture the market's most famous empirical fact: volatility clusters (calm begets calm, storms beget storms). This guide explains what GARCH does, how to fit it on NIFTY data, how to read its forecasts, and where it complements (and limits) option pricing Greeks.
The Stylised Facts GARCH Captures
Daily return series of indices and stocks exhibit: volatility clustering (large moves follow large moves), fat tails (more extreme days than a normal curve predicts), and mean reversion of vol (extreme vol decays toward a long-run average). GARCH is built precisely to describe these - modelling today's variance as a function of yesterday's squared shock and yesterday's variance.
The GARCH(1,1) Model in One Equation
- r_t = mu + epsilon_t (returns with noise)
- sigma_t^2 = omega + alpha * epsilon_{t-1}^2 + beta * sigma_{t-1}^2
Here omega sets the long-run baseline variance, alpha is the shock sensitivity (news term), and beta is the persistence (how long a shock lingers). The sum alpha+beta measures persistence; near 1 means shocks fade slowly - exactly the clustering behaviour you see in markets. In practice, fitting GARCH(1,1) on NIFTY daily returns yields high beta realism and a stable long-run variance the VIX regime echoes.
Fitting GARCH in Python
import yfinance as yf, numpy as np
from arch import arch_model
df = yf.download("^NSEI", start="2018-01-01")["Close"]
ret = 100 * df.pct_change().dropna()
model = arch_model(ret, vol="Garch", p=1, q=1, mean="AR")
res = model.fit(disp="off")
print(res.summary())
print("omega/alpha/beta:", res.params[["omega","alpha[1]","beta[1]"]])
fcast = res.forecast(horizon=21, reindex=False)
print("21-day annualized vol:", float(np.sqrt(fcast.variance.iloc[-1])).round(2))
The `arch` library (or `arch for statsmodels-era Python`) fits standard GARCH quickly. Compare GARCH(1,1) against GARCH(2,1) and GJR-GARCH (asymmetric vol - down days raise vol more than up days) using AIC to pick the model family.
Interpreting the Forecast Correctly
GARCH forecasts are not point predictions of next day's noise. They output a distribution-tightened prediction of variance: a conditional sigma_t that says "given the recent shock, here's the likely risk level over the next 5/10/21 days." Use:
- GARCH one-day vol vs India VIX as the regime check
- Short-horizon forecasts (5-10d) for expiry-week range sizing
- Long-run omega for the normal-case vol floor
Convert variance to expected daily range: expected high-low ≈ 2 × sigma × sqrt(days). If you're sizing an iron condor, the GARCH-implied range is the honest budget for strike distance.
GARCH and Option Volatility
GARCH models realised (historical) volatility; option markets price implied volatility. The gap between the two is your candidate premia: when IV stands high above GARCH's forecast, option sellers are selling rich premium; when IV stacks below GARCH, buyers get cheap options. Pair GARCH with the option chain's IV to identify the imbalance, and with the VIX term structure for the market's own stress forecast. GARCH is not a substitute for Black-Scholes greeks; it is the vol forecaster feeding the pricing inputs.
Limitations Without Cheerleading
- Standard GARCH assumes symmetric shocks; GJR/EGARCH handle the leverage effect better and usually fit Indian indices best
- Regimes: GARCH assumes one persistence regime; Markov-switching variants capture crashes better but are harder to fit
- Distributional: t-distributed innovations match the fat tails far better than normal—always fit student-t
- It forecasts vol, not direction; combining a good vol forecast with a no-directional structure (iron condor) is the coherent use
Practical Rules for the Options Trader
- Fit on multi-year daily data, EWMA clean pre-2020 shocks
- Refit weekly; forecast 5/21-day ranges
- Size short-vol structures to the GARCH-implied range plus a risk cushion
- When GARCH's forecast and India VIX disagree sharply, investigate why before acting
Bottom Line
GARCH gives a statistical, calibrated view of volatility - clustering, persistence, and forecast range - that improves strike selection, sizing, and regime judgement. Combined with the IV surface and VIX, it is one of the few quantitative edges any retail options trader can actually wield. Not a crystal ball - a weather model for risk.
SEBI Disclaimer
Options trading involves substantial risk. This article is educational and is not investment advice; GARCH estimates are model outputs, not guarantees.
The Stylised Facts GARCH Exists to Capture
Volatility in real financial series is not constant; it clusters. Calm follows calm and storms follow storms, and the distribution's tails are fat - large moves appear far more often than a normal curve would count. Three observations define the target: volatility clusters, its shocks decay gradually rather than instantly, and negative shocks often raise volatility more than positive ones of equal size. GARCH exists to describe exactly this shape: the model reads the recent squared returns and the recent variance to forecast tomorrow's variance, making it the statistical translation of the trader's gut that "the market is tense right now".
The GARCH(1,1) Model in One Equation
Tomorrow's variance forecasts as a weighted sum of three inputs: a long-run base level, today's shock (the squared return), and today's variance. Typical fitted coefficients on Indian index returns land with the persistence parameter near 0.90 and the shock parameter around 0.05 to 0.10, which together imply a half-life of the volatility shock of about two to three weeks - the memory the market actually carries. The sum of the two coefficients near 0.95-plus signals strong persistence, and a sum near one signals integration, where shocks never fully die and the process drifts through regimes rather than returning to a base.
Fitting GARCH in Python and Reading the Output
A half-dozen lines with the arch library fits the model to the index's daily returns and prints a clean forecast: specify the mean as a constant, the volatility as GARCH(1,1), and look at the fitted omega, alpha, and beta. The fitted alpha and beta map directly to the reaction-to-shock and persistence parameters, and the model's sigma forecast bridges into the annualised volatility number the option trader actually uses. The honest read requires the diagnostic step - check the standardised residuals for remaining autocorrelation and excess kurtosis - because a GARCH that leaves structure in its errors is a GARCH leaving money on the table.
GARCH vs India VIX: The Two Forecasters
The India VIX is the market's own forecast, priced from option premiums; GARCH is an econometric forecast, priced from the index's own history. The two disagree predictably: VIX leads when news is pending (events nobody has priced into history yet) and GARCH catches up only as the event actually prints volatility. A workable synthesis treats VIX as the forward-looking fear gauge and GARCH as the as-if-no-news baseline, and trades rich when the two diverge more than their normal band - buying volatility cheap between forecasters and respecting the gap when it widens toward an event. The two forecasters are different assets, and both belong on the desk.
GARCH as a Feature, Not an Override
For a model-driven trader, the GARCH forecast is a feature, not a verdict: feed the one-step-ahead sigma into the gradient-boosted classifier alongside the price and open-interest features, and let the tree decide how much the volatility forecast moves each prediction. A forecast-heavy regime with a rising sigma feature earns the model's caution, and the inclusion forces the volatility risk into the trade's anatomy rather than into the post-hoc explanation. The two-layer stack - GARCH on the risk side, the classifier on the direction side - produces the book that survives the weeks the direction model is wrong.
- Confirm the stylised facts - clustering, fat tails, leverage - in your own sample.
- Read alpha, beta, and the half-life from the fitted GARCH(1,1).
- Check the standardised residuals before trusting the forecast.
- Pair GARCH against India VIX as two forecasters, not rivals.
- Feed the sigma into the direction model as one disciplined feature.
Persistence, Re-Estimation, and Parameter Drift
The GARCH persistence parameter - the sum of the model's own coefficients - is the number that governs the forecast's memory: a persistence near one means today's shock echoes for weeks, and near zero means the surface forgets by next session. Financial reality drifts underneath the static parameter, so re-estimate the model on a rolling window and plot the fitted persistence month by month, because an estimate fitted on a calm year will mis-sell the spike forecast it is asked to produce. The honest GARCH report quotes the standard error on persistence and the difference between the fitted and the realised variance over the last quarter in the volatility units the position trades. Cuttoff discipline ends the study: when the model's volatility forecast and the market's implied volatility disagree by more than the model's own error band, trust the market's surface and mark the model for retraining.