Quant Memo
Core

HAR-RV Model

The HAR-RV model forecasts tomorrow's volatility as a weighted blend of yesterday's, last week's average, and last month's average realized volatility — a simple regression that captures volatility's long memory without needing a complicated model.

Prerequisites: Realized Volatility Estimators, The HAR-RV Forecasting Model

A weather forecaster predicting tomorrow's temperature doesn't just look at yesterday's reading — they blend yesterday's number with this week's average and this month's trend, because temperature has memory at multiple time scales at once. Volatility behaves the same way: a single quiet or wild day doesn't reset the picture, but neither does a whole quiet month guarantee tomorrow is quiet if yesterday was suddenly wild. The HAR-RV model (Heterogeneous Autoregressive model of Realized Volatility) forecasts tomorrow's volatility by literally blending yesterday's, last week's average, and last month's average realized volatility.

The formula, defined

RVt+1=c+βdRVt+βwRVt(w)+βmRVt(m)+εt+1RV_{t+1} = c + \beta_d\, RV_t + \beta_w\, RV_t^{(w)} + \beta_m\, RV_t^{(m)} + \varepsilon_{t+1}

In words: RVt+1RV_{t+1} is the realized volatility being forecast for tomorrow. RVtRV_t is just today's realized volatility (the daily component). RVt(w)RV_t^{(w)} is the average realized volatility over the past 5 trading days (the weekly component), and RVt(m)RV_t^{(m)} the average over the past 22 trading days (the monthly component). cc is a constant, βd\beta_d, βw\beta_w, βm\beta_m are the weights the regression assigns to each horizon, fit by ordinary least squares on historical data, and εt+1\varepsilon_{t+1} is the forecast error. This is nothing more exotic than a linear regression with three specific, overlapping-average inputs — its power comes from those inputs approximating volatility's genuine long-memory behavior (today's shock still matters weeks later, just with decaying weight) using only three simple, easy-to-compute regressors instead of an explicit long-memory model.

Worked example 1 — computing the three inputs

Suppose today's RV is RVt=0.00090RV_t = 0.00090 (in daily variance units). The past 5 days' RVs were 0.00090, 0.00075, 0.00110, 0.00060, 0.00095, averaging to RVt(w)=(0.00090+0.00075+0.00110+0.00060+0.00095)/5=0.00086RV_t^{(w)} = (0.00090+0.00075+0.00110+0.00060+0.00095)/5 = 0.00086. The past 22 days average out to RVt(m)=0.00070RV_t^{(m)} = 0.00070. With fitted coefficients (typical magnitudes from real calibrations) c=0.00005c = 0.00005, βd=0.35\beta_d = 0.35, βw=0.40\beta_w = 0.40, βm=0.20\beta_m = 0.20: forecast RVt+1=0.00005+0.35(0.00090)+0.40(0.00086)+0.20(0.00070)=0.00005+0.000315+0.000344+0.000140=0.000849RV_{t+1} = 0.00005 + 0.35(0.00090) + 0.40(0.00086) + 0.20(0.00070) = 0.00005 + 0.000315 + 0.000344 + 0.000140 = 0.000849. Converting to annualized vol: 0.000849×2520.2139\sqrt{0.000849 \times 252} \approx \sqrt{0.2139} \approx 46.3%.

Worked example 2 — how a volatility shock decays through the forecast

Suppose instead today saw a large jump, so RVt=0.0030RV_t = 0.0030 (over three times normal) while the weekly and monthly averages are unchanged at 0.00086 and 0.00070 (yesterday's shock hasn't had time to move those slower averages much yet). New forecast: RVt+1=0.00005+0.35(0.0030)+0.40(0.00086)+0.20(0.00070)=0.00005+0.00105+0.000344+0.000140=0.001584RV_{t+1} = 0.00005 + 0.35(0.0030) + 0.40(0.00086) + 0.20(0.00070) = 0.00005 + 0.00105 + 0.000344 + 0.000140 = 0.001584 — roughly double the earlier forecast, but not three times higher even though today's RV itself was over three times higher, because the weekly and monthly terms pull the forecast back toward their own, still-normal levels. As the days pass and the shock rolls into the weekly and then monthly averages, its influence on the forecast fades gradually rather than dropping off a cliff — this gradual, multi-horizon decay is exactly the long-memory behavior HAR-RV is designed to approximate.

Regression explorer
amber = residuals
fitted slope 1.133true slope 1.00 0.642SSres 42.0

The explorer above fits a line through scattered points with visible residuals — HAR-RV is the same OLS machinery, just with three regressors (daily, weekly, monthly RV) instead of one, each contributing its own slope to the forecast.

daily (β_d) weekly avg (β_w) monthly avg (β_m) RV forecast
Three time-scales of past realized volatility, each weighted by its own regression coefficient, combine into a single next-day forecast — a simple regression standing in for genuine long-memory dynamics.

What this means in practice

HAR-RV is a standard benchmark in volatility forecasting because it's simple to estimate (ordinary linear regression), needs no distributional assumptions beyond what OLS requires, and empirically forecasts about as well as far more complicated long-memory models like fractionally integrated GARCH. Extensions add a jump component (using bipower variation, see bipower variation and jump detection, to separate continuous from jump variance and let them have different predictive weights) or asymmetric terms that let negative returns raise the forecast more than positive ones of the same size.

HAR-RV as written is a linear model in levels of RV, but RV is strictly non-negative and right-skewed (occasional huge spikes, never negative values) — fitting the regression in raw levels can produce a forecast that technically comes out negative in extreme cases, and residuals tend to violate the constant-variance assumption OLS relies on. In practice, most implementations fit the model to log(RV)\log(RV) instead, which keeps forecasts positive by construction and better matches the residuals' actual distribution — using the raw-levels version without checking this is a common rookie mistake.

HAR-RV forecasts volatility as a weighted blend of today's, this week's average, and this month's average realized volatility — three simple regressors that approximate genuine long-memory dynamics well enough to rival much more complex models.

Practice

  1. With c=0.0001c=0.0001, βd=0.3\beta_d=0.3, βw=0.45\beta_w=0.45, βm=0.25\beta_m=0.25, and inputs RVt=0.0012RV_t = 0.0012, RVt(w)=0.0009RV_t^{(w)}=0.0009, RVt(m)=0.0007RV_t^{(m)}=0.0007, compute the forecast RVt+1RV_{t+1}.
  2. Why does fitting HAR-RV to log(RV)\log(RV) rather than raw RV levels avoid the possibility of a negative volatility forecast?

Related concepts

Practice in interviews

Further reading

  • Corsi, A Simple Approximate Long-Memory Model of Realized Volatility (Journal of Financial Econometrics, 2009)
  • Andersen, Bollerslev, and Diebold, Roughing It Up: Including Jump Components (Review of Economics and Statistics, 2007)
ShareTwitterLinkedIn