Quantitative Finance & Time-Series Econometrics
Ornstein-Uhlenbeck AR(1) Half-Life & Spread Z-Score
Convert discrete AR(1) persistence phi in (0, 1) into continuous Ornstein-Uhlenbeck speed kappa = -LN(phi), exact half-life -LN(2) / LN(phi), and stationary spread volatility sigma_e / SQRT(1 - phi^2).
Stop using linearized 1 / (1 - phi) or innovation SD sigma_e when sizing mean-reverting trades!
Statistical-arbitrage, commodity-crack, and PPP real-exchange-rate analysts fit discrete AR(1) dynamics S_t - mu = phi * (S_{t-1} - mu) + eps_t (with innovation SD sigma_e > 0) sampled once per day/month. Exact mapping to continuous Ornstein-Uhlenbeck dS_t = kappa * (mu - S_t) dt + sigma_OU dW_t equates EXP(-kappa) = phi -> Mean-Reversion Speed kappa = -LN(phi) per period and Exact Half-Life t_half = LN(2) / (-LN(phi)) periods (whereas common approximation LN(2) / (1 - phi) overstates half-life whenever phi is below 0.90!)! Even more critically, Unconditional Stationary Spread Volatility is sigma_stat = sigma_e / SQRT(1 - phi^2) — NOT innovation residual sigma_e — yielding Stationary Z-Score Z_t = (S_t - mu) / (sigma_e / SQRT(1 - phi^2))!
Verify on exact Pythagorean numbers: AR(1)_Persistence phi = 0.80 (B2), Long-Run_Equilibrium_Mean mu = 10.00 (B3), Residual_Innovation_SD sigma_e = 1.20 (B4), and Current_Spread S_t = 14.00 (B5): Continuous Speed is -LN(0.80) = 0.2231/day; Exact Half-Life is -LN(2) / LN(0.80) = 3.1063 days (vs linearized LN(2)/0.20 = 3.4657 days); Stationary Spread SD is 1.20 / SQRT(1 - 0.64) = 1.20 / 0.60 = 2.0000 (66.7% wider than 1.20!); and True Stationary Z-Score is (14.00 - 10.00) / 2.00 = +2.0000 (whereas dividing by 1.20 would falsely scream +3.33 sigma!)!
| OU / AR(1) Spread Metric (phi=0.80, mu=10, sigma_e=1.20, S_t=14) | Formula | Verified Output |
|---|---|---|
| Continuous OU Reversion Speed (kappa) | -LN(phi) | 0.2231 / period |
| Exact Mean-Reversion Half-Life | -LN(2) / LN(phi) | 3.1063 periods |
| Stationary Unconditional Spread SD | sigma_e / SQRT(1 - phi^2) | 2.0000 (1.20 / 0.60) |
| Stationary Equilibrium Z-Score | (S_t - mu) / sigma_stat | +2.0000 sigma |
Exact Ornstein-Uhlenbeck Mean-Reversion Half-Life Formula
Require stationary positive autocorrelation 0 < phi < 1 (phi >= 1 is a non-stationary unit-root / explosive random walk with infinite half-life!).
=IF(OR(B2 <= 0, B2 >= 1), "Non-Stationary or Oscillatory (Require 0 < phi < 1)", ROUND(-LN(2) / LN(B2), 4))Stationary Spread SD & Equilibrium Z-Score Formula
Validate innovation volatility sigma_e > 0 and stationary 0 < phi < 1.
=LET(ph_ar, B2, m_eq, B3, sg_ep, B4, s_nw, B5, IF(OR(ph_ar <= 0, ph_ar >= 1, sg_ep <= 0), "Non-Stationary or Invalid Volatility", LET(sg_st, sg_ep / SQRT(1 - (ph_ar ^ 2)), ROUND((s_nw - m_eq) / sg_st, 4))))Try the example
Use the original values or change them to test your understanding.