Markets: A Rigorous Course

2.3 Horizon scaling and the variance ratio

Advanced about 30 min

Motivation

Traders quote annualised volatility by multiplying daily volatility by 252\sqrt{252} and option desks convert a 30-day implied volatility to a daily move by dividing by 365\sqrt{365} or 252\sqrt{252}. That rule assumes returns are uncorrelated. If returns trend (positive autocorrelation) or mean-revert (negative), long-horizon risk differs from the T\sqrt{T} extrapolation, and the variance ratio is the standard test.

Variance at long horizons#

Setup

Let {rt}\{r_t\} be covariance-stationary with mean μ\mu, variance σ2\sigma^2 and autocorrelations ρj=Corr⁡(rt,rt−j)\rho_j = \operatorname{Corr}(r_t, r_{t-j}). Let rt(k)=rt+rt−1+⋯+rt−k+1r_t(k) = r_t + r_{t-1} + \dots + r_{t-k+1} be the kk-period log return.

Proposition 2.5T\sqrt{T} rule

If the rtr_t are uncorrelated, Var⁡(rt(k))=kσ2\operatorname{Var}(r_t(k)) = k\sigma^2, so volatility scales as k\sqrt{k}, the mean as kk, and the Sharpe ratio μ/σ\mu/\sigma as k\sqrt{k}.

Proof

Variance of a sum of uncorrelated terms is the sum of variances.∎

Proposition 2.6kk-period variance under autocorrelation

In general,

Var⁡(rt(k))=σ2[k+2∑j=1k−1(k−j)ρj].(2.6)\operatorname{Var}(r_t(k)) = \sigma^2 \Big[ k + 2\sum_{j=1}^{k-1} (k - j)\rho_j \Big]. \tag{2.6}
Proof

Var⁡(∑i=0k−1rt−i)=∑i=0k−1∑l=0k−1Cov⁡(rt−i,rt−l)=σ2∑i,lρ∣i−l∣\operatorname{Var}(\sum_{i=0}^{k-1} r_{t-i}) = \sum_{i=0}^{k-1}\sum_{l=0}^{k-1} \operatorname{Cov}(r_{t-i}, r_{t-l}) = \sigma^2 \sum_{i,l} \rho_{|i-l|}. In the k×kk \times k matrix (ρ∣i−l∣)(\rho_{|i-l|}), the main diagonal has kk entries equal to ρ0=1\rho_0 = 1, and each of the two diagonals at distance j≥1j \ge 1 has k−jk - j entries equal to ρj\rho_j.∎

The variance ratio#

Define the variance ratio

VR(q)=Var⁡(rt(q))qVar⁡(rt)=1+2∑j=1q−1(1−jq)ρj.(2.7)VR(q) = \frac{\operatorname{Var}(r_t(q))}{q \operatorname{Var}(r_t)} = 1 + 2\sum_{j=1}^{q-1}\Big(1 - \frac{j}{q}\Big)\rho_j. \tag{2.7}

VR(q)=1VR(q) = 1 under uncorrelated returns, VR(q)>1VR(q) > 1 if returns are on balance positively autocorrelated (trending), and VR(q)<1VR(q) < 1 if negatively autocorrelated (mean-reverting). Equation (2.7) shows that VR(q)−1VR(q) - 1 is a weighted sum of the first q−1q-1 autocorrelations with linearly declining weights, which is why it has more power against small but persistent autocorrelation than any single ρj\rho_j.

Proposition 2.7AR(1) returns

Let rt−μ=ϕ(rt−1−μ)+εtr_t - \mu = \phi(r_{t-1} - \mu) + \varepsilon_t with ∣ϕ∣<1|\phi| < 1 and white-noise εt\varepsilon_t. Then ρj=ϕj\rho_j = \phi^j and

Var⁡(rt(k))=σ2[k+2ϕ (k(1−ϕ)−(1−ϕk))(1−ϕ)2],(2.8)\operatorname{Var}(r_t(k)) = \sigma^2\Big[k + \frac{2\phi\,(k(1-\phi) - (1 - \phi^k))}{(1-\phi)^2}\Big], \tag{2.8}
VR(q)=1+2ϕ (q(1−ϕ)−(1−ϕq))q(1−ϕ)2→q→∞1+ϕ1−ϕ.(2.9)VR(q) = 1 + \frac{2\phi\,(q(1-\phi) - (1-\phi^q))}{q(1-\phi)^2} \xrightarrow[q\to\infty]{} \frac{1+\phi}{1-\phi}. \tag{2.9}
Proof

Stationarity and Cov⁡(rt,rt−j)=ϕCov⁡(rt−1,rt−j)\operatorname{Cov}(r_t, r_{t-j}) = \phi \operatorname{Cov}(r_{t-1}, r_{t-j}) for j≥1j \ge 1 give ρj=ϕj\rho_j = \phi^j. Substitute in (2.6) and evaluate Sk=∑j=1k−1(k−j)ϕjS_k = \sum_{j=1}^{k-1}(k-j)\phi^j. Write Sk=k∑j=1k−1ϕj−∑j=1k−1jϕjS_k = k\sum_{j=1}^{k-1}\phi^j - \sum_{j=1}^{k-1} j\phi^j. With ∑j=1k−1ϕj=ϕ(1−ϕk−1)/(1−ϕ)\sum_{j=1}^{k-1}\phi^j = \phi(1-\phi^{k-1})/(1-\phi) and ∑j=1k−1jϕj=ϕ [1−kϕk−1+(k−1)ϕk]/(1−ϕ)2\sum_{j=1}^{k-1} j\phi^j = \phi\,[1 - k\phi^{k-1} + (k-1)\phi^k]/(1-\phi)^2,

Sk=ϕ [k(1−ϕ)(1−ϕk−1)−1+kϕk−1−(k−1)ϕk](1−ϕ)2=ϕ [k(1−ϕ)−1+ϕk](1−ϕ)2,S_k = \frac{\phi\,[k(1-\phi)(1-\phi^{k-1}) - 1 + k\phi^{k-1} - (k-1)\phi^k]}{(1-\phi)^2} = \frac{\phi\,[k(1-\phi) - 1 + \phi^k]}{(1-\phi)^2},

after expanding k(1−ϕ)(1−ϕk−1)=k−kϕ−kϕk−1+kϕkk(1-\phi)(1-\phi^{k-1}) = k - k\phi - k\phi^{k-1} + k\phi^k and collecting terms. Check k=2k = 2: S2=ϕ[2−2ϕ−1+ϕ2]/(1−ϕ)2=ϕS_2 = \phi[2 - 2\phi - 1 + \phi^2]/(1-\phi)^2 = \phi. Equation (2.9) is (2.8) divided by qσ2q\sigma^2; as q→∞q \to \infty the bracket is dominated by k+2ϕk/(1−ϕ)=k(1+ϕ)/(1−ϕ)k + 2\phi k/(1-\phi) = k(1+\phi)/(1-\phi).∎

So the long-horizon volatility multiplier relative to the T\sqrt{T} rule is (1+ϕ)/(1−ϕ)\sqrt{(1+\phi)/(1-\phi)}: 1.106 for ϕ=0.1\phi = 0.1 and 0.905 for ϕ=−0.1\phi = -0.1. A daily autocorrelation of 0.1, invisible to the eye, changes annual volatility by 10%. For ϕ=0.1\phi = 0.1: VR(5)=1.173VR(5) = 1.173 and VR(20)=1.210VR(20) = 1.210.

The Lo–MacKinlay test#

The estimator Lo and MacKinlay (1988) estimate (2.7) with overlapping qq-period returns and small-sample bias corrections. With TT returns and μ^=rˉ\hat\mu = \bar r,

σ^a2=1T−1∑t=1T(rt−μ^)2,σ^c2=1m∑t=qT(rt(q)−qμ^)2,m=q(T−q+1)(1−qT),VR^(q)=σ^c2σ^a2.(2.10)\begin{gathered} \hat\sigma_a^2 = \frac{1}{T-1}\sum_{t=1}^{T}(r_t - \hat\mu)^2, \qquad \hat\sigma_c^2 = \frac{1}{m}\sum_{t=q}^{T}\big(r_t(q) - q\hat\mu\big)^2, \\ m = q(T-q+1)\Big(1 - \frac{q}{T}\Big), \qquad \widehat{VR}(q) = \frac{\hat\sigma_c^2}{\hat\sigma_a^2}. \end{gathered} \tag{2.10}

Proposition 2.8asymptotic distribution

(a) If the rtr_t are iid with finite fourth moment,

T (VR^(q)−1)⇒N ⁣(0, 2(2q−1)(q−1)3q),z(q)=VR^(q)−12(2q−1)(q−1)/(3qT)⇒N(0,1).(2.11)\begin{gathered} \sqrt{T}\,\big(\widehat{VR}(q) - 1\big) \Rightarrow N\!\left(0,\ \frac{2(2q-1)(q-1)}{3q}\right), \\ z(q) = \frac{\widehat{VR}(q) - 1}{\sqrt{2(2q-1)(q-1)/(3qT)}} \Rightarrow N(0,1). \end{gathered} \tag{2.11}

(b) If the rtr_t are only martingale differences with conditional heteroskedasticity (satisfying the mixing and moment conditions of Lo–MacKinlay 1988, Assumption H), then

z∗(q)=T (VR^(q)−1)θ^(q)⇒N(0,1),θ^(q)=∑j=1q−1[2(q−j)q]2δ^j,δ^j=T∑t=j+1T(rt−μ^)2(rt−j−μ^)2[∑t=1T(rt−μ^)2]2.(2.12)\begin{gathered} z^*(q) = \frac{\sqrt{T}\,(\widehat{VR}(q) - 1)}{\sqrt{\hat\theta(q)}} \Rightarrow N(0,1), \qquad \hat\theta(q) = \sum_{j=1}^{q-1}\Big[\frac{2(q-j)}{q}\Big]^2\hat\delta_j, \\ \hat\delta_j = \frac{T\sum_{t=j+1}^{T}(r_t - \hat\mu)^2(r_{t-j} - \hat\mu)^2}{\big[\sum_{t=1}^{T}(r_t - \hat\mu)^2\big]^2}. \end{gathered} \tag{2.12}
Proofsketch; full proof in Lo & MacKinlay 1988, Theorems 1–3, or Campbell, Lo & MacKinlay 1997, 2.4

To first order, VR^(q)−1=2∑j=1q−1(1−j/q)ρ^j+op(T−1/2)\widehat{VR}(q) - 1 = 2\sum_{j=1}^{q-1}(1 - j/q)\hat\rho_j + o_p(T^{-1/2}), which is (2.7) with sample autocorrelations. (a) Under iid returns, T(ρ^1,…,ρ^q−1)\sqrt{T}(\hat\rho_1, \dots, \hat\rho_{q-1}) is asymptotically N(0,I)N(0, I) (Bartlett's formula with all ρj=0\rho_j = 0). Hence the asymptotic variance is

4∑j=1q−1(1−jq)2=4q2∑i=1q−1i2=4q2⋅(q−1)q(2q−1)6=2(2q−1)(q−1)3q.4\sum_{j=1}^{q-1}\Big(1 - \frac{j}{q}\Big)^2 = \frac{4}{q^2}\sum_{i=1}^{q-1} i^2 = \frac{4}{q^2}\cdot\frac{(q-1)q(2q-1)}{6} = \frac{2(2q-1)(q-1)}{3q}.

(b) Under martingale differences, Tρ^j\sqrt{T}\hat\rho_j is still asymptotically normal with mean 0, but its variance is δj=E[(rt−μ)2(rt−j−μ)2]/σ4\delta_j = E[(r_t-\mu)^2(r_{t-j}-\mu)^2]/\sigma^4, which exceeds 1 when volatility clusters (large ∣rt−j∣|r_{t-j}| predicts large ∣rt∣|r_t|). Under Assumption H the ρ^j\hat\rho_j are asymptotically uncorrelated across jj, so the variance becomes ∑j[2(1−j/q)]2δj=θ(q)\sum_j [2(1-j/q)]^2\delta_j = \theta(q), and δ^j\hat\delta_j in (2.12) is its sample analogue.∎

The practical difference is large. Under volatility clustering δj>1\delta_j > 1, so zz is too big and the homoskedastic test rejects a true random walk too often. In exercises/modules/M02-statistics-of-returns/tests/test_m02_variance_ratio.py the GARCH-simulated returns of toolkit.data.synthetic_returns (no autocorrelation, strong volatility clustering) give a rejection rate at the nominal 5% level of about 18% for zz and about 3.5% for z∗z^*, with 400 simulated samples of 1,000 days each.

Variance ratios for the Nifty#

Worked example 2.3.1Nifty sample, 4,693 daily returns

qq VR^(q)\widehat{VR}(q) z(q)z(q) z∗(q)z^*(q)
2 1.037 2.55 1.32
5 1.021 0.65 0.32
10 1.000 0.00 0.00
20 1.064 0.88 0.44

The homoskedastic test rejects the random walk at q=2q = 2 (z=2.55z = 2.55); the robust test does not (z∗=1.32z^* = 1.32). The rejection was an artefact of volatility clustering. VR^(2)−1≈ρ^1=0.037\widehat{VR}(2) - 1 \approx \hat\rho_1 = 0.037 is a small positive first-order autocorrelation, of the size that non-synchronous trading of index constituents (stale prices in less liquid stocks feeding into the next day's index move) is known to produce (Lo & MacKinlay 1990, "An econometric analysis of nonsynchronous trading"). The robust conclusion is: daily Nifty returns over 2007–2026 show no autocorrelation that survives a correct test, consistent with Cont's first stylized fact (2.5).

Practitioner notes

  • Use z∗z^*, never zz, on financial returns. Report qq and the sampling frequency; a test at q=5q = 5 on daily data asks about weekly horizons.
  • VR>1VR > 1 supports trend-following and VR<1VR < 1 supports mean reversion (M04, M13), but only if it survives costs. A statistically significant ρ1=0.03\rho_1 = 0.03 on an index you cannot trade at the close is not a strategy.
  • Lo and MacKinlay (1988) rejected the random walk for weekly returns on US stock indices and size-sorted portfolios over 1962–1985, with the strongest rejections for small stocks. Part of this is non-synchronous trading and part is genuine; the effect has weakened in later samples.
  • Overlapping returns have serially correlated errors by construction. Never run an ordinary tt-test on overlapping returns; the variance-ratio statistics above already account for the overlap.

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

Variance ratios and aggregational Gaussianity on the Nifty

The lab downloads Nifty 50 daily closes from 17 Sep 2007, computes the Lo–MacKinlay variance ratio VR^(q)\widehat{VR}(q) of (2.10) for q=2,…,60q = 2, \dots, 60, and draws two 95% bands around 1: the iid band from (2.11) and the heteroskedasticity-robust band from (2.12). The second table reports the excess kurtosis of non-overlapping kk-day log returns.

What to look at Where VR^(q)\widehat{VR}(q) sits relative to each band, and how the two bands differ. Proposition 2.8 predicts that volatility clustering widens the robust band; Worked example 2.3.1 found that the q=2q = 2 rejection under zz disappears under z∗z^*. The kurtosis table tests Cont's fact (4), aggregational Gaussianity.

Questions

  1. Does any horizon reject the random walk under z∗z^*? Under zz? Explain the difference using δ^j\hat\delta_j in (2.12).
  2. Using (2.7), what average autocorrelation over the first 19 lags would produce your VR^(20)\widehat{VR}(20)?
  3. How fast does excess kurtosis fall with the horizon kk? For iid returns it would fall like 1/k1/k; is the decline faster or slower, and why might volatility clustering slow it?
  4. Re-read the practitioner note on non-synchronous trading. Is a small positive ρ^1\hat\rho_1 in an index a tradable signal?

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.