9.2 Measuring realised volatility
Motivation
Every trade in this module compares implied volatility with a realised-vol estimate. A noisy estimate gives a noisy edge. Range-based estimators extract several times more information per day from the high and low than the close alone, which means a usable vol estimate from 10 days instead of 50.
9.2.1Close-to-close#
Let , with daily returns. The estimator
is unbiased for the daily variance if returns are i.i.d. Under Gaussian returns with known zero mean, the single-day estimator has
So the relative standard error of from days is , and that of is about (delta method). With that is 16% of the volatility itself: a measured 12% vol is consistent with anything from about 10% to 14%. This is the baseline against which efficiency is measured:
An efficiency of 5 means one day of estimator carries as much information as five days of closes.
9.2.2The range of Brownian motion and Parkinson's estimator#
Notation
For day with open , high , low , close and previous close , write
is the overnight return, the open-to-close return, , and the log range is .
Assumption During the session, is a driftless Brownian motion with variance per day, observed continuously. No overnight gap for now.
Proposition 9.1moments of the Brownian range
Let for a standard Brownian motion on . Then for
with (Abel sum) and . In particular , , . For Brownian motion with volatility over time , multiply by .
Proof
Step 1 (the density, cited). For , the probability that stays in on is given by the method of images: reflect the Gaussian kernel repeatedly in the two barriers, with alternating signs (Feller, An Introduction to Probability Theory and Its Applications, Vol. II, §X.5). Differentiating in and gives the joint density of , and integrating along gives the density of the range. Feller (1951) carried this out and obtained
where is the standard normal density.
Step 2 (moments). For each , substitute :
Hence . For the series converges absolutely and the interchange of sum and integral is justified by dominated convergence. For the series is conditionally convergent (or Abel-summable at ); the identity still holds by Abel's theorem applied to as , which is the route Feller takes.
Step 3 (special values). , , ; , , . So , , . Brownian scaling gives the factor.∎
The code (range_moment_exact) evaluates (9.5) and the tests compare it with simulated ranges.
Proposition 9.2Parkinson 1980
Under the assumption above, the per-day estimator
is unbiased for , and its efficiency relative to is
Proof
is the range of the intraday log path, which has the law of . Unbiasedness: by Proposition 9.1. Variance: . Numerically and , so the bracket is . Divide (9.2) by .∎
You will see "about 5" quoted for Parkinson's efficiency. The exact continuous-monitoring value is 4.91.
9.2.3Garman–Klass, Rogers–Satchell, Yang–Zhang#
Garman–Klass (1980) combine the range with the open-to-close return. The practical form is
Unbiasedness is one line: and , so . Garman and Klass derive the weights by minimising variance within a class of quadratic estimators; they report efficiency of about 7.4 for this family.
Rogers–Satchell (1991) remove the zero-drift assumption:
Rogers and Satchell prove it is unbiased for any constant drift. For zero drift you can check it yourself (Problem 3): reflection maps , so both terms have the same mean, and Lévy's theorem () gives , hence .
Yang–Zhang (2000) handle the overnight gap. Over a window of days,
where and are the sample variances of and and is the mean of (9.8). The overnight term carries the gap variance that every range estimator misses; the weights and minimise the estimator's variance, with the constant 0.34 chosen by Yang and Zhang from their variance calculation. It is unbiased for drift and gaps, and among their class it has the smallest variance.
9.2.4Efficiencies and what breaks them#
| Estimator | Uses | Unbiased under | Efficiency vs close-to-close | Breaks when |
|---|---|---|---|---|
| Close-to-close (9.1) | C | anything i.i.d. | 1 | never biased; just noisy |
| Parkinson (9.6) | H, L | zero drift, no gaps, continuous monitoring | 4.91 (exact) | overnight gaps, trends, discrete ticks |
| Garman–Klass (9.7) | O, H, L, C | zero drift, no gaps | ≈ 7.4 | gaps, drift |
| Rogers–Satchell (9.8) | O, H, L, C | any drift, no gaps | ≈ 6 (simulation) | gaps |
| Yang–Zhang (9.9) | O, H, L, C, prev C | drift and gaps | highest of the five (≈ 7.6–8.1 in our 20-day, 20%-gap simulation; see below) | jumps inside the session, microstructure |
Numerical check (Exercise m09_realised_vol) The simulations below draw driftless Brownian intraday paths with NumPy's default_rng(seed); we report seed 0 and, in brackets, the range over seeds 0–4, so that you can see how much is Monte Carlo noise. On 40,000 simulated days with 20,000 intraday steps per day, the per-day estimators had sample variances (in units of ) of 1.98 (close-to-close), 0.400 (Parkinson), 0.263 (Garman–Klass) and 0.326 (Rogers–Satchell): efficiencies 1.0, 4.93 [4.92–5.00], 7.51 [7.46–7.71] and 6.06 [6.00–6.19]. The Parkinson value converges to 4.91 as the sampling becomes continuous. With 2,000 steps per day, the range estimators were biased low, because a discretely sampled path misses the true extremes: Parkinson by 2.7–3.2% and Garman–Klass and Rogers–Satchell by 3.9–4.5% across the five seeds (even at 20,000 steps a bias of about 1% remains). With 30% of the variance arriving overnight (2,000 steps), Parkinson captured only 68% of the true variance (67.7–68.1%), while Yang–Zhang captured 97–98% (97.4% for seed 0). For the table's Yang–Zhang entry: on 20,000 windows of 20 days, with 20% of the variance overnight and 390 intraday steps (simulate_ohlc, seed 0), the variance of the zero-mean close-to-close window estimator was 7.86 times that of Yang–Zhang (7.64–8.05 over seeds 0–4).
9.2.5Practitioner notes#
- Gaps. Nifty's overnight move reflects global news (US close, SGX/GIFT Nifty trading, Asian open). Range estimators computed only on the 09:15–15:30 session miss it. Use Yang–Zhang, or add explicitly.
- Discrete sampling bias. The recorded high and low come from discrete trades, so the observed range is smaller than the continuous range; the bias is of order per extreme. With 1-minute data it is small; with 15-minute bars it is not.
- Microstructure. A single bad print sets the high. Use exchange OHLC, not a vendor's tick-filtered series of unknown provenance, and look at outliers.
- Which window? A shorter window tracks regime changes but is noisier. Desks plot several windows together ("volatility cones": the distribution of realised vol by window length over history) and compare the current implied vol with that distribution.
- Range estimators sit closer to implied vol than you expect. Because they are more efficient, a range-based 10-day realised vol is a reasonable input to a short-horizon forecast. GARCH (M13) gives a model-based alternative.
Worked exampleillustrative numbers
Suppose Nifty's previous close was 24,800, and today O = 24,850, H = 25,050, L = 24,760, C = 25,000. Then , , , , .
- Close-to-close: ; annualised .
- Parkinson: ; 11.10%.
- Garman–Klass: ; 11.64%.
- Rogers–Satchell: ; 11.34%.
One day proves nothing; the point is the mechanics. Over many days the range-based numbers have roughly a fifth of the variance of close-to-close (efficiency about 5), so their standard deviation is a little under half as large.