Joint SPX/VIX Volatility Research System  ·  14 components  ·  666 tests  ·  end-of-day data  ·  by Navnoor Bawa
κ (kappa)
4.9997
Mean reversion speed
Half-life = 34.9d
θ (theta)
0.04314
Long-run variance
√θ = 20.77% ann vol
σ (vol-of-vol)
0.6568
Vol of variance
Controls smile curvature
ρ (rho)
-0.95
Spot-vol correlation
AT BOUNDARY
v₀ (v-naught)
0.01088
Initial variance
√v₀ = 10.43% spot vol
SPX IV RMSE
0.215 vol pts
Good fit
VIX Futures RMSE
0.266 pts
Good futures fit
VIX Options RMSE
DISABLED
Heston CIR density underestimates vol-of-vol path uncertainty. RMSE was 37.14 pts — structural failure. w₃ = 0.0 (was 0.2).
Calibration Performance
7.3s
8,406 evaluations
DE (120 iter × 40) + L-BFGS-B
SPX Implied Volatility Smile — All Maturities
Calibrated Parameter Summary
Parameter Symbol Value Interpretation
Mean reversion κ 4.9997 Half-life ≈ 35 trading days
Long-run vol √θ 20.77% Steady-state implied vol target
Vol-of-vol σ 0.6568 High: drives strong skew / smile
Correlation ρ -0.95 ⚠ BOUNDARY Extreme leverage effect — needs jumps
Spot vol √v₀ 10.43% Current instantaneous vol
Risk-free rate r 3.91% USD 6M SOFR (2026-03)
Dividend yield q 0.0% SPX continuous div yield
Feller margin 2κθ − σ² -1.10e-07 BINDING — constraint active; σ set by Feller, not by the data
Effective d.o.f. 5 − |pinned| 3 / 5 Pinned: rho, sigma — set by constraints, not data
Calibration inputs nSPX / nVIX 9 / 4 SPX options / VIX tenors — ≥3 tenors required to identify the VIX leg
SPX level: 7657.0
As-of date: 2026-09-11
Fit time: 7.3s
DE evaluations: 8,406
RMSE Decomposition — Loss Components
HMM Regime Classifier — Limitations
HMM trained 2010–2019. Out-of-distribution on 2025 tariff regime — misclassifies 2025-04-09 as R1. Use XGBoost for production classification. HMM is available as a research alternative via HMMRegimeClassifier in regime_classifier.py.
C13 — Two-Factor Quintic OU Model (Research)
σ(t) = g₀(t) · p(Z_t)  ·  Z_t = θX_t + (1−θ)Y_t  ·  p(z) = α₀ + α₁z + α₃z³ + α₅z⁵  ·  VIX priced via 2D Gauss-Hermite ≈ 500 pts
Parameter Symbol Value Description
Fast OU speed λx 168.48 Fast factor half-life ≈ 1.04d
Slow OU speed λy 10.543 Slow factor half-life ≈ 16.6d
Factor weight θ 2.8539 Fast-factor loading in Z_t
Poly constant α₀ 0.4061 Sets vol floor
Poly linear α₁ -0.9404 Linear skew driver
Poly cubic α₃ 0.8877 Smile curvature
Poly quintic α₅ -0.4895 Wing correction
Leverage (corr) ε -0.1823 Spot-vol correlation (leverage)
MetricHestonQuintic OUΔ
SPX IV RMSE (vp) 0.215 2.343 +2.128
VIX Fut RMSE (pts) 0.266 0.001 -0.265
VIX Opt RMSE (vp) DISABLED 17.53
Fit time: 2751.8s
Evaluations: 2,813
MC paths: 6,000/expiry
VIX quad: 18² = 324 pts
Key advance over Heston: VIX options are analytically tractable via 2D Gauss-Hermite quadrature — no structural failure of the pricing kernel. The non-affine polynomial structure captures steep SPX left skew without rho saturating. VIX futures fit to 0.001 ptsby construction, not model skill: ξ₀ is bootstrapped from the same VIX term structure being fit (and no tradable futures prices exist in the DB; the "futures" leg is an index proxy). Quote the SPX-leg RMSE (2.34 vp) as the real fit quality. Model: models/quintic_ou.py · Calibrator: calibration/quintic_calibrator.py
Honest limitation: VIX-option RMSE of ~17.5 vp beats Heston's 37.1 vp (a ~53% reduction) but does not yet reach the <10 vp research target. The residual is in the VIX-smile wings — the degree-5 polynomial under-fits far-OTM VIX calls. A higher-degree map or a second stochastic driver is the next step. Reported as measured, not as a hit target.