Joint Calibration Results
Heston 5-parameter · DE + L-BFGS-B
2026-05-31 · SPX = 7580.1 · r = 4.5%
κ (kappa)
1.7685
Mean reversion speed
Half-life = 98.7d
θ (theta)
0.06656
Long-run variance
√θ = 25.8% ann vol
σ (vol-of-vol)
0.4603
Vol of variance
Controls smile curvature
ρ (rho)
-0.95
Spot-vol correlation
AT BOUNDARY
v₀ (v-naught)
0.01265
Initial variance
√v₀ = 11.25% spot vol
SPX IV RMSE
0.523 vol pts
Good fit
VIX Futures RMSE
0.528 pts
Acceptable 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
11.1s
7,974 evaluations
DE (120 iter × 40) + L-BFGS-B
SPX Implied Volatility Smile — All Maturities
Calibrated Parameter Summary
| Parameter | Symbol | Value | Interpretation |
|---|---|---|---|
| Mean reversion | κ | 1.7685 | Half-life ≈ 99 trading days |
| Long-run vol | √θ | 25.8% | Steady-state implied vol target |
| Vol-of-vol | σ | 0.4603 | High: drives strong skew / smile |
| Correlation | ρ | -0.95 ⚠ BOUNDARY | Extreme leverage effect — needs jumps |
| Spot vol | √v₀ | 11.25% | Current instantaneous vol |
| Risk-free rate | r | 4.5% | USD 6M SOFR (2026-03) |
| Dividend yield | q | 1.3% | SPX continuous div yield |
| Feller margin | 2κθ − σ² | +0.023562 | PASS — variance stays positive |
SPX level: 7580.1
As-of date: 2026-05-31
Fit time: 11.1s
DE evaluations: 7,974
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.523 | 2.343 | +1.820 |
| VIX Fut RMSE (pts) | 0.528 | 0.001 | -0.527 |
| 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 (ξ₀ bootstrapped from the VIX term structure).
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.