Julian Henry

polyglot / software engineer / author

Mean-Reverting VIXIThe Rubber Band

09 Mar 2026

Mean-Reverting VIX: I · II · III · IV · V · VI

A zero-to-hero guide to one PhD thesis: how to model the VIX as a mean-reverting process, price its futures and options, fit the model to a live option chain, and find out which of your beliefs survive contact with the data. We start with a rubber band.

View on GitHub · Read the paper (PDF)

Ráfaga – Spanish for “gust” – began as a gust of hubris: a conviction that I could model the Cboe Volatility Index with a handful of characteristic functions, some complex integration, and a prayer. The source material was Qunfang Bao’s 2013 PhD thesis from Zhejiang University, Mean-Reverting Logarithmic Modeling of VIX (MPRA 46413), sitting in the archive like a loaded weapon waiting for someone dumb enough to pick it up.

I picked it up. In March 2026 I published the first version of this post. It said the jump model priced VIX options “with ~97% accuracy”, that the mean-reversion parameters were “stable and physically interpretable”, and that Julia’s BigFloat had rescued the numerics from Python. It read well. Most of it was not checked.

So I checked. The code was rebuilt from the thesis, tested against the thesis’ own published parameter tables, and then pointed, unchanged, at the full Cboe VIX option chain of 29 September 2026. The results are written up as a five-page paper, Mean-Reverting Logarithmic Models of the VIX, Revisited. This series is the long version: every idea built from a first-year calculus course, and every claim from the March post held up against the numbers. Where the old post made a claim, it appears in an orange box, answered in a blue one by what the data says.

Vol.TopicWhat it contributes
IThe rubber bandWhat the VIX is; mean reversion as an ODE, then as an SDE; what 22 years of data say about it.
IIFutures, options and a flat smileRisk-neutral pricing, the VIX futures curve, put–call parity, implied volatility, and why the simplest model cannot produce the VIX skew.
IIIJumps, vol-of-vol and the Fourier trickThe two fixes (jumps, stochastic vol-of-vol), characteristic functions, Gil-Pelaez inversion, and what actually went wrong in Python.
IVCalibration, and what the thesis didn't sayLoss functions, the missing protocol, a consistency test of the 2011 results, and why the parameters are not what they seem.
VTwenty twenty-sixThe models against the 29 Sep 2026 chain: fit, held-out strikes, futures, a new jump regime, and a term structure nobody fits.
VITrading it, honestlyThe March post's five strategies, re-examined against the results. One survives, one inverts.

what the VIX is

The VIX is not a price. It is a number Cboe computes every fifteen seconds from S&P 500 index options: roughly, the market’s expectation of S&P 500 volatility over the next 30 days, expressed as an annualized percentage.

Definition (VIX). Let $Q(K)$ be the mid price of an out-of-the-money SPX option with strike $K$ and roughly 30 days to expiry, $F$ the SPX forward, $K_0$ the first strike below $F$, $r$ the rate and $T$ the time to expiry. Then $$\text{VIX}^2 = \frac{2}{T}\sum_i \frac{\Delta K_i}{K_i^2}\,e^{rT}Q(K_i) - \frac{1}{T}\Big(\frac{F}{K_0}-1\Big)^2,$$ interpolated between two expiries to a constant 30 days, and quoted as $100\cdot\text{VIX}$.

The sum is a discretized integral over the whole option strip. It approximates the price of a 30-day variance swap. The details matter less than two consequences:

  1. You cannot buy the VIX. Replicating it would mean holding a changing strip of hundreds of SPX options, rolled continuously. Nobody does that. What trades are VIX futures and VIX options, and both settle to a special opening quotation of the index on expiry morning. This is the single most important fact for pricing, and Vol. II is built on it.
  2. The VIX measures fear. It rises when the S&P falls, it rises fast, and it cannot stay high forever. The rest of this volume turns that sentence into mathematics.

the rubber band

Let $Y$ be a number with a “home” $\theta$ it wants to return to. The simplest model of homing is the ordinary differential equation

\[\frac{dY}{dt} = \kappa(\theta - Y), \qquad \kappa>0.\]

The rate of change is proportional to the distance from home. Above $\theta$, $Y$ falls; below, it rises. The constant $\kappa$ sets the speed.

Separate variables, $\frac{dY}{\theta - Y} = \kappa\,dt$, integrate, $-\ln\lvert\theta - Y\rvert = \kappa t + C$, and impose $Y(0)=Y_0$:

\[Y(t) = \theta + (Y_0 - \theta)\,e^{-\kappa t}.\]

Exponential decay toward $\theta$. A rubber band. The half-life of a displacement solves $e^{-\kappa t} = \tfrac12$:

\[t_{1/2} = \frac{\ln 2}{\kappa}.\]
March 2026 said: "If $\kappa = 5$ (annualized), the half-life is about 50 trading days."
The arithmetic says: $\ln 2/5 = 0.139$ years, which is $0.139\times 252 \approx 35$ trading days. Fifty was wrong by 40%.

adding noise

The VIX does not slide home along a smooth exponential. It wobbles. We need randomness, and the standard unit of randomness in continuous time is Brownian motion.

Definition (Brownian motion). A process $W_t$ with $W_0 = 0$, continuous paths, and independent increments $W_{t+\Delta t} - W_t \sim \mathcal N(0,\Delta t)$.

Think of $W_t$ as the running sum of infinitely many infinitesimal coin flips. Its paths are continuous and nowhere differentiable, so we write its effect in differential form and attach it to the rubber band:

\[dY_t = \kappa(\theta - Y_t)\,dt + \sigma\,dW_t.\]

This is the Ornstein–Uhlenbeck (OU) process. Every instant, $Y$ is pulled toward $\theta$ and kicked by noise of size $\sigma$. Multiply by the integrating factor $e^{\kappa t}$, exactly as for a first-order linear ODE, and integrate:

\[Y_t = \theta + (Y_0 - \theta)e^{-\kappa t} + \sigma\int_0^t e^{-\kappa(t-s)}\,dW_s.\]

The first two terms are the deterministic solution. The third is a weighted sum of every shock since time 0, with recent shocks weighted near 1 and old ones exponentially forgotten. A weighted sum of independent Gaussians is Gaussian, so

\[Y_t \sim \mathcal N\!\Big(\underbrace{\theta + (Y_0-\theta)e^{-\kappa t}}_{\text{mean}},\ \underbrace{\tfrac{\sigma^2}{2\kappa}\big(1-e^{-2\kappa t}\big)}_{\text{variance}}\Big).\]

(The variance is $\sigma^2\int_0^t e^{-2\kappa(t-s)}ds$, by the Itô isometry: the variance of a stochastic integral is the ordinary integral of the squared weight.)

As $t\to\infty$ the mean goes to $\theta$ and the variance saturates at $\sigma^2/(2\kappa)$. That limit is the stationary distribution: wherever it starts, the process forgets its initial condition and fluctuates around $\theta$ with a spread set by the ratio of noise to pull.

Now set $Y_t = \ln \text{VIX}_t$. Then the VIX is log-normal around $e^\theta$, and we have the first of Bao’s models.

Definition (MRLR). The mean-reverting logarithmic model: $d\ln\text{VIX}_t = \kappa(\theta - \ln\text{VIX}_t)\,dt + \sigma\,dW_t$, with reversion speed $\kappa$, long-run log level $\theta$ and vol-of-vol $\sigma$.

why mean reversion, why logarithms

Stock prices are usually modeled as geometric Brownian motion, a random walk with drift. Apple at 200 has no “home”; it is as likely to wander to 250 as back to 150. That is the efficient-markets intuition, and it is a fine first approximation for an asset.

The VIX is not an asset. It is a measure of fear, and fear has a baseline. Markets cannot sustain panic indefinitely. When the VIX is at 40, hedging is expensive and every option is priced for Armageddon, but Armageddon, as a rule, does not last. The panic subsides, the hedges come off, and implied volatility collapses toward its average. When the VIX is at 10, complacency reigns, everyone is short volatility, and some exogenous shock – a pandemic, a war, a bank failure, a leveraged fund unwinding – arrives and throws it back up. A model without a home would let long-dated VIX futures wander anywhere. They don’t: they converge toward a long-run level, as Vol. II shows.

Why the logarithm? A model of the VIX must do three things: stay positive, revert, and let the size of moves scale with the level (a 5-point move is routine at 40 and extraordinary at 12). Grünbichler and Longstaff (1996) used a mean-reverting square-root process for the VIX level itself. It stays positive and reverts, but its volatility grows only like $\sqrt{\text{VIX}}$ and its right tail is thin. Taking logarithms makes all three properties automatic: positivity because $\text{VIX} = e^{Y}$, and level-proportional moves because a Gaussian kick to $\ln\text{VIX}$ is a percentage kick to the VIX.


what 22 years of data say

The March post asserted that daily data confirm mean reversion. This time, the numbers. The OU process has an exact discrete-time form: sampled every $\Delta$ years,

\[y_{t+1} = \theta(1-\beta) + \beta\,y_t + \varepsilon_t, \qquad \beta = e^{-\kappa\Delta}, \qquad \operatorname{Var}\varepsilon = \frac{\sigma^2(1-\beta^2)}{2\kappa}.\]

That is an AR(1) regression. If $\beta = 1$ the process is a random walk; if $\beta<1$ it reverts. Running it on 5,579 daily closes of the VIX from 2 January 2004 to 6 March 2026 (script), with $\Delta = 1/252$:

QuantityEstimateMeaning
$\beta$0.97813daily persistence of $\ln\text{VIX}$
$\kappa = -\ln\beta/\Delta$5.57 per yearhalf-life $\ln 2/\kappa$ = 31 trading days
$\theta$2.875long-run VIX level $e^\theta \approx 17.7$
$\sigma$1.19 per $\sqrt{\text{yr}}$vol-of-vol of $\ln\text{VIX}$

So the rubber band is real: a VIX shock loses half its (log) size in about a month and a half of trading. A spike from 17.7 to 40 is expected to be at $\sqrt{40\times 17.7}\approx 27$ one half-life later, halfway back in logs.

The same data show what the OU process misses. The standard deviation of a daily change in $\ln\text{VIX}$ is 0.075. A rise above 0.30 in one day (a VIX jump of more than 35%) is a four-standard-deviation event, which a Gaussian with that spread produces about once every 130 years: 0.16 times in a 22-year sample. The VIX did it 27 times, 1.2 times a year. The five largest:

DateVIXone-day $\Delta\ln\text{VIX}$
5 Feb 201817.31 → 37.320.77
18 Dec 202415.87 → 27.620.55
5 Aug 202423.39 → 38.570.50
27 Feb 200711.15 → 18.310.50
27 Jan 202123.02 → 37.210.48

The VIX does not get to 37 by dribbling. It jumps. Vol. III puts jumps into the model; first, Vol. II shows that the options market has been saying the same thing all along.

One caution before moving on. These estimates describe the VIX in the real world, what probabilists call the $\mathbb P$-measure. Option prices live in a different world, $\mathbb Q$, where every outcome is re-weighted by how much investors fear it. The same model will carry different parameters in each. Keeping the two apart is half of Vol. II, and the gap between them is the whole of the one trading idea that survives in Vol. VI.


where this goes

We have a model, $d\ln\text{VIX} = \kappa(\theta-\ln\text{VIX})dt + \sigma dW$, and evidence that it captures the VIX’s pull toward home but not its leaps away from it. The next question is what this model says a VIX future and a VIX option are worth, and what the market’s actual option prices say back.


Next: Vol. II: Futures, Options and a Flat Smile

Mean-Reverting VIX: Vol. I · Vol. II · Vol. III · Vol. IV · Vol. V · Vol. VI