Joint Calibration Results
Heston 5-parameter · DE + L-BFGS-B
2026-07-23 · SPX = 7499.0 · r = 3.74%
κ (kappa)
2.2627
Mean reversion speed
Half-life = 77.2d
θ (theta)
0.05482
Long-run variance
√θ = 23.41% ann vol
σ (vol-of-vol)
0.4745
Vol of variance
Controls smile curvature
ρ (rho)
-0.95
Spot-vol correlation
AT BOUNDARY
v₀ (v-naught)
0.01902
Initial variance
√v₀ = 13.79% spot vol
SPX IV RMSE
0.049 vol pts
Good fit
VIX Futures RMSE
0.003 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
32.2s
9,024 evaluations
DE (120 iter × 40) + L-BFGS-B
SPX Implied Volatility Smile — All Maturities
Calibrated Parameter Summary
| Parameter | Symbol | Value | Interpretation |
|---|---|---|---|
| Mean reversion | κ | 2.2627 | Half-life ≈ 77 trading days |
| Long-run vol | √θ | 23.41% | Steady-state implied vol target |
| Vol-of-vol | σ | 0.4745 | High: drives strong skew / smile |
| Correlation | ρ | -0.95 ⚠ BOUNDARY | Extreme leverage effect — needs jumps |
| Spot vol | √v₀ | 13.79% | Current instantaneous vol |
| Risk-free rate | r | 3.74% | USD 6M SOFR (2026-03) |
| Dividend yield | q | 0.0% | SPX continuous div yield |
| Feller margin | 2κθ − σ² | +0.022936 | PASS — variance stays positive |
SPX level: 7499.0
As-of date: 2026-07-23
Fit time: 32.2s
DE evaluations: 9,024
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) |
| Metric | Heston | Quintic OU | Δ |
|---|---|---|---|
| SPX IV RMSE (vp) | 0.049 | 2.343 | +2.294 |
| VIX Fut RMSE (pts) | 0.003 | 0.001 | -0.002 |
| 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 pts — by 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.