● END OF DAY
SPXcurrent: every source’s date
SPX2026-10-28 VIX2026-10-28 LABELS2026-10-28 FIT2026-10-28 GREEKS2026-10-28 SURFACE2026-10-28 BACKTEST≤2025-03-24 MODELv2 BUILD088fc8d VIEWas of 2026-10-28
SPX7,743.98▲ +0.28% VIX16.91▼ −0.61 VVIX96.61▼ −2.84 9D→6M+5.64contango VIX/VIX3M0.880 RV219.69 VIX−RV21+7.22 VIX 1Y PCTL46th (percentile among the 252 sessions before 2026-10-28) RULER1short gamma2026-10-28 1M ATMF13.40%RR25−4.312026-10-28

Joint SPX/VIX Heston calibration

Five-parameter Heston fitted jointly to the SPX smile and the VIX index term structure, scored on the quotes it did not see.

Session 2026-10-28 ·SPX = 7,744.0 ·r = 4.72% (parity-implied median)·Treasury r(91d) 4.09% ·model_version 2
Chain: Yahoo Finance download·fetched 2026-10-29 07:32 UTC·Yahoo reports no quote times·T measured from the fetch·6,308 rows → 3,343 scored·17 expiries (other stored sessions 17–43)

The headline is the newest fit that passes the quality gate (joint_cal_2026-10-28.pkl), not the lowest-RMSE fit in the archive: ranking by RMSE rewards the days the data broke. Optimiser: Trust-region least squares, 8 Sobol starts (9 of 9 in the best basin). Of 45 stored fits, 8 current-schema (model_version 2) fits are stored (the job stores only fits that pass the gate; a rejected fit is recorded in its run log, not stored); 37 pre-C22 fits are labelled legacy and never ranked.

Parameters κ θ σ ρ v₀

κmean reversion
4.049
interior box [0.1, 20]
SE 0.874
half-life 43.1 sessions (ln2/κ × 252)
0.1 7.601 03-242026-03-24: 6.142 ± 1.45903-272026-03-27: 4.290 ± 1.59705-292026-05-29: 5.233 ± 1.86606-182026-06-18: 4.999 ± 1.80410-162026-10-16: 4.992 ± 1.87710-262026-10-26: 4.370 ± 2.66510-272026-10-27: 3.829 ± 1.88810-282026-10-28: 4.049 ± 1.748
8 gated fits, 2026-03-24 → 2026-10-28
θlong-run variance
0.0578
interior box [0.0001, 1]
SE 0.00436
√θ = 24.03% long-run vol
0.04380.0800 03-242026-03-24: 0.0653 ± 0.004403-272026-03-27: 0.0733 ± 0.006705-292026-05-29: 0.0595 ± 0.007906-182026-06-18: 0.0614 ± 0.007810-162026-10-16: 0.0499 ± 0.006110-262026-10-26: 0.0550 ± 0.009810-272026-10-27: 0.0576 ± 0.009610-282026-10-28: 0.0578 ± 0.0087
8 gated fits, 2026-03-24 → 2026-10-28
σvol of variance
1.648
interior box [0.001, 2]
SE 0.145
2 1.3062.295 03-242026-03-24: 2.000, on its bound03-272026-03-27: 1.834 ± 0.32605-292026-05-29: 1.707 ± 0.33506-182026-06-18: 1.592 ± 0.28610-162026-10-16: 2.000, on its bound10-262026-10-26: 1.833 ± 0.46110-272026-10-27: 1.630 ± 0.31110-282026-10-28: 1.648 ± 0.290
8 gated fits, 2026-03-24 → 2026-10-28
ρspot–vol correlation
−0.680
interior box [−0.95, 0]
SE 0.0178
−0.95 −0.609 03-242026-03-24: −0.823 ± 0.03603-272026-03-27: −0.785 ± 0.05905-292026-05-29: −0.656 ± 0.04706-182026-06-18: −0.697 ± 0.04210-162026-10-16: −0.753 ± 0.04610-262026-10-26: −0.691 ± 0.04610-272026-10-27: −0.685 ± 0.03710-282026-10-28: −0.680 ± 0.036
8 gated fits, 2026-03-24 → 2026-10-28
v₀initial variance
0.0220
interior box [0.0001, 1]
SE 0.00061
√v₀ = 14.85% spot vol
0.0001 0.0968 03-242026-03-24: 0.0732 ± 0.003103-272026-03-27: 0.0928 ± 0.004005-292026-05-29: 0.0130 ± 0.001506-182026-06-18: 0.0173 ± 0.001510-162026-10-16: 0.0344 ± 0.002210-262026-10-26: 0.0276 ± 0.001710-272026-10-27: 0.0249 ± 0.001310-282026-10-28: 0.0220 ± 0.0012
8 gated fits, 2026-03-24 → 2026-10-28

Under each parameter: every gate-passing fit, oldest first, its value with a ±2·SE whisker, the Gauss–Newton curvature scale, not a confidence interval (the residuals are model misfit, not noise). Dashed: a bound of the production box within the plotted range; a parameter on its bound sits on the line with no whisker. The headline fit’s dot is larger.

Fit quality

SPX IV RMSE
0.78vol pts
best of 8 gated sessions (0.78–1.37)
in sample, 53 anchors
Out of sample
1.40vol pts
2nd of 8 gated sessions (1.28–2.96)
3,290 quotes, every expiry
Put wing OOS
1.81vol pts
2nd of 8 gated sessions (1.43–3.90)
puts below the forward
VIX index RMSE
0.42index pts
best of 8 gated sessions (0.42–0.89)
4 tenors: ^VIX9D … ^VIX6M
VIX options
Not in objective
weight w₃ = 0; no error is reported for a leg the fit did not use
VVIX model / market
188 / 97
5th of 8 diagnosed sessions, model − market (67–97)
model 30-day vol of VIX at this fit vs the ^VVIX close, index pts · optimiser 0.9 s, 297 evaluations

Out-of-sample error by expiry

M4 short-end RMSE · WATCHM4 OOS RMSE · OK3,290 quotes

17 expiries; RMSE from 0.61 to 3.06 vol pts against 0.78 in sample.

Out-of-sample RMSE by expiry (vol pts)
ExpiryDaysRMSE (vol pts)Anchor expiry
2026-11-10132.44no
2026-11-11142.72yes
2026-11-12153.06no
2026-11-25281.73no
2026-11-27301.54yes
2026-11-30331.57no
2026-12-18510.97no
2026-12-31641.12yes
2027-01-15790.70no
2027-01-29930.61yes
2027-02-191140.67no
2027-03-311541.05no
2027-04-161690.65yes
2027-05-212040.62no
2027-09-303370.76no
2027-10-153510.79yes
2027-11-193860.83no

Bars: RMSE of the quotes the fit did not use, per expiry; dashed line: the in-sample RMSE on the 53 anchors. The short end is where a one-factor model with σ on its box ceiling fails; in half-spreads on the same chain, see the Surface scorecard.

Cited on: Overview · Surface

VIX leg · indices in the fit, VX futures out of sample

M5 VX lag · BREACHM4 VIX RMSE · OK2026-10-28

VIX indices · 2026-10-28 · in the objective

Market VIX-family indices and the fitted model's values at 9, 30, 93 and 184 days.

VIX indices: market vs model (index points)
IndexTenor (days)MarketModelModel − market
^VIX9D915.6015.42−0.18
^VIX3016.9116.55−0.36
^VIX3M9319.2218.84−0.38
^VIX6M18421.2420.62−0.62

The Cboe spot indices (9/30/93/184 days) against the model's index to each horizon: 100·√(expected average variance over the horizon), the variance-swap rate the Cboe formula replicates, not an expected average vol. Model below market in 4 of 4 tenors.

VX futures · E[VIXT] against settlements · out of sample

8 monthly VX settlements of 2026-06-18 and the fit's model price at each expiry; RMSE 1.85 index pts, model below the settlement on 8 of 8.

VX futures on 2026-06-18: settlement and model (index pts)
ContractExpiryDaysSettlementModel E[VIXT]Model − settlement
2026-072026-07-223418.4917.17−1.32
2026-082026-08-196219.9218.25−1.67
2026-092026-09-169020.6818.96−1.71
2026-102026-10-2112521.4119.52−1.88
2026-112026-11-1815321.6819.81−1.88
2026-122026-12-1618121.6920.00−1.69
2027-012027-01-2021622.3820.15−2.22
2027-022027-02-1724422.5020.23−2.27

2026-06-18: RMSE 1.85 index pts over 8 monthly contracts; model below the settlement on 8 of 8, mean gap −1.83. Equal to the fit’s recorded out-of-sample VX RMSE (losses.vx_futures_rmse_oos).

Not in the objective: the loss has no VX-futures term (weight 0), so this is a test on prices the fit never saw. Model: EQ[VIXT] of the fitted Heston parameters, exact under the CIR law of vT, T = days to expiry / 365; market: Cboe’s daily settlement of each monthly contract (weeklies excluded), set at 15:00 Chicago time, while the fit’s SPX chain is a Yahoo Finance download fetched 2026-10-29 07:32 UTC (Yahoo reports no quote times; T measured from the fetch) and its VIX indices are the 16:15 ET closes. Labels: model − settlement, index pts. 4 of 8 gated fits have settlements stored on their session; the futures table ends 2026-10-09.

Cited on: Overview

ATM-skew term structure · the market’s power law against Heston

2026-10-28 · 8 stored sessions

|∂σ/∂ln(K/F)| at the forward against T in years, both axes logarithmic: the SVI-cal surface of 2026-10-28 (solid) and of the other stored sessions (grey), the eSSVI fit of 2026-10-28 (dotted), and the Heston smile at the published parameters and at the σ-profile refit (dashed). A straight line is a power law; skews are negative and plotted as magnitudes.

ATM skew ∂σ/∂ln(K/F) at the forward (vol per unit ln-moneyness; negative = puts over calls); Heston at 2026-10-28's listed maturities only
SessionExpiryT (d)SVI-caleSSVIHeston publishedHeston σ ≤ 10
2026-10-282026-11-1013−1.004−1.298−1.775−1.775
2026-10-282026-11-1114−0.999−1.293−1.742−1.742
2026-10-282026-11-1215−0.984−1.277−1.709−1.709
2026-10-282026-11-2528−0.817−1.160−1.367−1.367
2026-10-282026-11-2730−0.798−1.083−1.328−1.328
2026-10-282026-11-3033−0.755−1.140−1.274−1.274
2026-10-282026-12-1851−0.652−0.886−1.038−1.038
2026-10-282026-12-3164−0.600−0.892−0.925−0.925
2026-10-282027-01-1579−0.554−0.754−0.828−0.828
2026-10-282027-01-2993−0.530−0.702−0.758−0.758
2026-10-282027-02-19114−0.478−0.648−0.676−0.676
2026-10-282027-03-31154−0.435−0.549−0.568−0.568
2026-10-282027-04-16169−0.422−0.526−0.536−0.536
2026-10-282027-05-21204−0.396−0.475−0.478−0.478
2026-10-282027-09-30337−0.330−0.348−0.345−0.345
2026-10-282027-10-15351−0.322−0.345−0.335−0.335
2026-10-282027-11-19386−0.308−0.319−0.314−0.314
2026-03-242026-03-317−1.639−1.773——
2026-03-242026-04-018−1.630−1.684——
2026-03-242026-04-029−1.564−1.693——
2026-03-242026-04-0613−1.419−1.496——
2026-03-242026-04-0714−1.397−1.510——
2026-03-242026-04-0815−1.394−1.499——
2026-03-242026-04-0916−1.365−1.471——
2026-03-242026-04-1017−1.327−1.478——
2026-03-242026-04-1320−1.254−1.365——
2026-03-242026-04-1421−1.261−1.351——
2026-03-242026-04-1522−1.247−1.345——
2026-03-242026-04-1623−1.241−1.330——
2026-03-242026-04-1724−1.273−1.377——
2026-03-242026-04-2027−1.192−1.253——
2026-03-242026-04-2128−1.176−1.218——
2026-03-242026-04-2229−1.165−1.205——
2026-03-242026-04-2330−1.150−1.186——
2026-03-242026-04-2431−1.147−1.193——
2026-03-242026-04-2734−1.104−1.147——
2026-03-242026-04-2835−1.086−1.112——
2026-03-242026-04-3037−1.021−1.097——
2026-03-242026-05-0138−1.020−1.082——
2026-03-242026-05-0845−0.956−1.012——
2026-03-242026-05-1552−0.907−0.950——
2026-03-242026-05-2966−0.858−0.858——
2026-03-242026-06-1886−0.760−0.767——
2026-03-242026-06-3098−0.723−0.722——
2026-03-242026-07-17115−0.675−0.679——
2026-03-242026-07-31129−0.639−0.635——
2026-03-242026-08-21150−0.591−0.590——
2026-03-242026-08-31160−0.568−0.563——
2026-03-242026-09-18178−0.543−0.534——
2026-03-242026-09-30190−0.522−0.516——
2026-03-242026-10-16206−0.501−0.492——
2026-03-242026-11-20241−0.457−0.448——
2026-03-242026-12-18269−0.429−0.421——
2026-03-242026-12-31282−0.417−0.414——
2026-03-242027-01-15297−0.407−0.397——
2026-03-242027-02-19332−0.382−0.374——
2026-03-242027-03-19360−0.365−0.356——
2026-03-242027-04-16388−0.351−0.338——
2026-03-242027-06-17450−0.321−0.314——
2026-03-242027-12-17633−0.266−0.260——
2026-03-272026-04-0610−0.808−0.950——
2026-03-272026-04-0711−0.874−1.033——
2026-03-272026-04-0812−0.935−1.119——
2026-03-272026-04-0913−0.945−1.125——
2026-03-272026-04-1014−0.984−1.160——
2026-03-272026-04-1317−0.969−1.109——
2026-03-272026-04-1418−1.010−1.158——
2026-03-272026-04-1519−0.996−1.099——
2026-03-272026-04-1620−1.000−1.083——
2026-03-272026-04-1721−1.000−1.090——
2026-03-272026-04-2024−0.942−0.994——
2026-03-272026-04-2125−0.954−1.006——
2026-03-272026-04-2226−0.964−1.026——
2026-03-272026-04-2327−0.938−0.990——
2026-03-272026-04-2428−0.972−1.010——
2026-03-272026-04-2731−0.951−0.973——
2026-03-272026-04-2832−0.958−0.980——
2026-03-272026-04-3034−0.921−0.944——
2026-03-272026-05-0135−0.934−0.962——
2026-03-272026-05-0842−0.885−0.901——
2026-03-272026-05-1549−0.847−0.859——
2026-03-272026-05-2963−0.775−0.784——
2026-03-272026-06-1883−0.704−0.711——
2026-03-272026-06-3095−0.684−0.683——
2026-03-272026-07-17112−0.644−0.644——
2026-03-272026-07-31126−0.608−0.605——
2026-03-272026-08-21147−0.570−0.567——
2026-03-272026-08-31157−0.546−0.541——
2026-03-272026-09-18175−0.522−0.513——
2026-03-272026-09-30187−0.500−0.499——
2026-03-272026-10-16203−0.479−0.473——
2026-03-272026-11-20238−0.434−0.430——
2026-03-272026-12-18266−0.406−0.404——
2026-03-272026-12-31279−0.396−0.399——
2026-03-272027-01-15294−0.386−0.382——
2026-03-272027-02-19329−0.364−0.360——
2026-03-272027-03-19357−0.348−0.344——
2026-03-272027-04-16385−0.336−0.331——
2026-03-272027-06-17447−0.310−0.305——
2026-03-272027-12-17630−0.257−0.255——
2026-05-292026-06-057−1.197−1.646——
2026-05-292026-06-0810−1.048−1.184——
2026-05-292026-06-0911−1.011−1.187——
2026-05-292026-06-1012−0.978−1.155——
2026-05-292026-06-1113−0.951−1.168——
2026-05-292026-06-1214−0.929−1.185——
2026-05-292026-06-1517−0.860−1.095——
2026-05-292026-06-1618−0.838−1.102——
2026-05-292026-06-1719−0.824−1.076——
2026-05-292026-06-1820−0.789−1.215——
2026-05-292026-06-2224−0.755−0.979——
2026-05-292026-06-2325−0.738−0.967——
2026-05-292026-06-2426−0.731−0.921——
2026-05-292026-06-2527−0.717−0.919——
2026-05-292026-06-2628−0.706−0.916——
2026-05-292026-06-2931−0.682−0.859——
2026-05-292026-06-3032−0.668−0.938——
2026-05-292026-07-0133−0.676−0.862——
2026-05-292026-07-0234−0.655−0.819——
2026-05-292026-07-1042−0.602−0.787——
2026-05-292026-07-1749−0.565−0.784——
2026-05-292026-07-2456−0.544−0.685——
2026-05-292026-07-3163−0.512−0.699——
2026-05-292026-08-2184−0.464−0.613——
2026-05-292026-08-3194−0.444−0.590——
2026-05-292026-09-18112−0.426−0.555——
2026-05-292026-09-30124−0.418−0.521——
2026-05-292026-10-16140−0.408−0.500——
2026-05-292026-10-30154−0.401−0.479——
2026-05-292026-11-20175−0.387−0.460——
2026-05-292026-12-18203−0.378−0.428——
2026-05-292026-12-31216−0.371−0.407——
2026-05-292027-01-15231−0.362−0.403——
2026-05-292027-02-19266−0.348−0.380——
2026-05-292027-03-19294−0.337−0.360——
2026-05-292027-03-31306−0.334−0.351——
2026-05-292027-04-16322−0.329−0.344——
2026-05-292027-05-21357−0.315−0.328——
2026-05-292027-06-17384−0.304−0.314——
2026-05-292027-09-17476−0.279−0.282——
2026-05-292027-12-17567−0.257−0.256——
2026-06-182026-06-257−1.402−1.681——
2026-06-182026-06-268−1.330−1.659——
2026-06-182026-06-2911−1.209−1.349——
2026-06-182026-06-3012−1.120−1.347——
2026-06-182026-07-0113−1.084−1.355——
2026-06-182026-07-0214−1.038−1.328——
2026-06-182026-07-0618−0.918−1.243——
2026-06-182026-07-0719−0.907−1.153——
2026-06-182026-07-0820−0.882−1.190——
2026-06-182026-07-0921−0.854−1.209——
2026-06-182026-07-1022−0.858−1.132——
2026-06-182026-07-1325−0.815−1.077——
2026-06-182026-07-1426−0.809−1.128——
2026-06-182026-07-1527−0.785−1.132——
2026-06-182026-07-1628−0.796−1.120——
2026-06-182026-07-1729−0.715−1.167——
2026-06-182026-07-2032−0.714−1.052——
2026-06-182026-07-2133−0.719−1.005——
2026-06-182026-07-2234−0.711−0.927——
2026-06-182026-07-2335−0.693−0.972——
2026-06-182026-07-2436−0.707−0.933——
2026-06-182026-07-3143−0.643−0.924——
2026-06-182026-08-0750−0.617−0.809——
2026-06-182026-08-1457−0.586−0.779——
2026-06-182026-08-2164−0.554−0.764——
2026-06-182026-08-3174−0.531−0.720——
2026-06-182026-09-1892−0.498−0.654——
2026-06-182026-09-30104−0.484−0.609——
2026-06-182026-10-16120−0.468−0.574——
2026-06-182026-10-30134−0.460−0.544——
2026-06-182026-11-20155−0.429−0.508——
2026-06-182026-11-30165−0.424−0.495——
2026-06-182026-12-18183−0.408−0.472——
2026-06-182026-12-31196−0.402−0.450——
2026-06-182027-01-15211−0.393−0.442——
2026-06-182027-02-19246−0.377−0.412——
2026-06-182027-03-19274−0.362−0.388——
2026-06-182027-03-31286−0.358−0.380——
2026-06-182027-04-16302−0.352−0.371——
2026-06-182027-05-21337−0.337−0.351——
2026-06-182027-06-17364−0.325−0.334——
2026-06-182027-09-17456−0.296−0.296——
2026-06-182027-12-17547−0.268−0.267——
2026-10-162026-10-2913−1.409−2.037——
2026-10-162026-10-3014−1.356−2.165——
2026-10-162026-11-0217−1.262−1.888——
2026-10-162026-11-1328−1.068−1.388——
2026-10-162026-11-1631−1.008−1.387——
2026-10-162026-11-1732−0.990−1.382——
2026-10-162026-12-0449−0.829−1.120——
2026-10-162026-12-1863−0.734−0.943——
2026-10-162026-12-3176−0.676−0.878——
2026-10-162027-01-1591−0.605−0.771——
2026-10-162027-01-29105−0.575−0.701——
2026-10-162027-03-31166−0.457−0.533——
2026-10-162027-04-16182−0.437−0.524——
2026-10-162027-05-21217−0.408−0.469——
2026-10-162027-09-30349−0.332−0.343——
2026-10-162027-10-15364−0.324−0.339——
2026-10-162027-12-17427−0.296−0.305——
2026-10-262026-11-0611−1.139−1.495——
2026-10-262026-11-0914−1.069−1.409——
2026-10-262026-11-1015−1.045−1.359——
2026-10-262026-11-2429−0.850−1.172——
2026-10-262026-11-2530−0.844−1.142——
2026-10-262026-11-2732−0.825−1.108——
2026-10-262026-12-1853−0.676−0.904——
2026-10-262026-12-3166−0.620−0.898——
2026-10-262027-01-1581−0.568−0.762——
2026-10-262027-01-2995−0.545−0.711——
2026-10-262027-02-19116−0.491−0.656——
2026-10-262027-03-31156−0.443−0.555——
2026-10-262027-04-16171−0.429−0.527——
2026-10-262027-05-21206−0.402−0.476——
2026-10-262027-09-30339−0.334−0.350——
2026-10-262027-10-15353−0.327−0.345——
2026-10-262027-11-19388−0.311−0.321——
2026-10-272026-11-0912−1.008−1.317——
2026-10-272026-11-1013−0.991−1.295——
2026-10-272026-11-1114−0.976−1.281——
2026-10-272026-11-2427−0.798−1.150——
2026-10-272026-11-2528−0.793−1.141——
2026-10-272026-11-2730−0.778−1.084——
2026-10-272026-12-1851−0.641−0.920——
2026-10-272026-12-3164−0.591−0.898——
2026-10-272027-01-1579−0.547−0.762——
2026-10-272027-01-2993−0.523−0.715——
2026-10-272027-02-19114−0.471−0.663——
2026-10-272027-03-31154−0.430−0.565——
2026-10-272027-04-16170−0.417−0.531——
2026-10-272027-05-21205−0.395−0.474——
2026-10-272027-09-30337−0.328−0.346——
2026-10-272027-10-15352−0.320−0.344——
2026-10-272027-11-19387−0.306−0.319——

On 2026-10-28 the published Heston fit's ATM skew is steeper than the SVI-cal market skew at every listed expiry (×1.02 to ×1.77; |skew| 1.78 against 1.00 vol per unit ln(K/F) at 13 d). Below 30 days the market line lies above the Heston line on 0 of 5 expiries. eSSVI's ψ(θ) ties the skew across expiries, so the two fits of the same quotes differ: at 30 d eSSVI gives −1.083 and SVI-cal −0.798 (+36%).

OLS slope of log|skew| on log T per session (|skew| ∝ T^slope), on all listed expiries and on T ≥ 30 days; expiries and their T range in days
SessionAll · T (d)SVI-caleSSVIT ≥ 30 d · T (d)SVI-caleSSVI
2026-10-2817 · 13–386−0.350−0.41512 · 33–386−0.361−0.513
2026-10-2717 · 12–387−0.349−0.41312 · 30–387−0.361−0.504
2026-10-2617 · 11–388−0.367−0.43012 · 32–388−0.383−0.510
2026-10-1617 · 13–427−0.450−0.55713 · 31–427−0.467−0.583
2026-06-1843 · 7–547−0.357−0.42227 · 32–547−0.325−0.454
2026-05-2941 · 7–567−0.336−0.39226 · 31–567−0.310−0.415
2026-03-2740 · 10–630−0.315−0.35825 · 31–630−0.427−0.441
2026-03-2443 · 7–633−0.409−0.43927 · 30–633−0.465−0.493

Inside a rough-volatility model the skew scales as T^(H−1/2); this is a descriptive slope of one fitted surface per session, sensitive to the shortest expiries and to the parametrisation, not an estimate of H (the rough-Heston fit returns H = ½, which is Heston, on 2026-10-28: rough vs Heston). 8 stored sessions: a range across sessions, not a sampling interval.

How the skews are computed
  • SVI-cal (the Surface page’s fitted slices): the analytic slope of each fitted slice at the forward, w′(0) / (2·√(w(0)·T)), with w′(k) = b(ρ + (k − m)/√((k − m)² + σ²)).
  • eSSVI: the surface report’s stored ATM skew (term_structure.atm_skew_essvi), 2026-10-28 only. eSSVI’s ψ(θ) shapes the skew across expiries, so its short end differs from SVI-cal’s; both are shown, neither is preferred.
  • Heston: central differences of the model smile at h = 0.01 and 0.005 in ln(K/F), Richardson-extrapolated, at 2026-10-28’s listed maturities: the published parameters (κ 4.05, σ 1.65) and the σ-profile refit with σ ≤ 10 (κ 4.05, σ 1.65; calibrations/diagnostics/2026-10-28.json).
  • Skews are negative (puts over calls); the chart plots magnitudes on log axes, so a straight line is a power law.

Smiles by anchor expiry

Quotes by expiry and ln(K/F) bucket (medians; IV in %), 2026-10-28
Expiryln(K/F)QuotesAnchorsMid IVHeston IV(Heston − mid) / half-spreadInside the bid–ask (%)
2026-11-11−0.30…−0.204047.6935.84−29.20
2026-11-11−0.20…−0.145036.4430.69−24.40
2026-11-11−0.14…−0.0914029.6327.39−13.70
2026-11-11−0.09…−0.0518221.0822.17+9.66
2026-11-11−0.05…−0.0231217.4218.84+19.60
2026-11-11−0.02…+0.0026114.4915.37+14.90
2026-11-11+0.00…+0.0228212.4212.12−5.711
2026-11-11+0.02…+0.0513211.3911.21+0.215
2026-11-11+0.05…+0.092012.2712.25−0.1100
2026-11-27≤ −0.301047.3739.15−33.70
2026-11-27−0.30…−0.208038.5634.19−22.90
2026-11-27−0.20…−0.1410030.9129.59−12.50
2026-11-27−0.14…−0.0914125.3525.75+5.414
2026-11-27−0.09…−0.0525220.0621.21+19.30
2026-11-27−0.05…−0.0228116.9317.89+20.80
2026-11-27−0.02…+0.0018214.2514.54+6.622
2026-11-27+0.00…+0.0219112.6012.01−13.00
2026-11-27+0.02…+0.0521111.6011.09−10.85
2026-11-27+0.05…+0.0911111.7312.32+6.50
2026-11-27+0.09…+0.142013.5813.75+0.6100
2026-12-31≤ −0.3015038.2435.76−26.00
2026-12-31−0.30…−0.2075033.1331.93−12.30
2026-12-31−0.20…−0.1440127.5327.77+3.215
2026-12-31−0.14…−0.0942122.7823.58+17.10
2026-12-31−0.09…−0.0536219.1919.95+21.60
2026-12-31−0.05…−0.0245116.6517.07+13.00
2026-12-31−0.02…+0.0031114.7114.68−1.019
2026-12-31+0.00…+0.0231013.4012.86−17.40
2026-12-31+0.02…+0.0547112.3411.53−23.40
2026-12-31+0.05…+0.0951211.8311.89+1.810
2026-12-31+0.09…+0.1433012.2513.27+11.70
2026-12-31+0.14…+0.201013.7314.77+4.20
2027-01-29≤ −0.305035.5034.31−12.80
2027-01-29−0.30…−0.2025029.8029.88+1.28
2027-01-29−0.20…−0.1426225.5726.24+13.20
2027-01-29−0.14…−0.0929121.6222.49+22.40
2027-01-29−0.09…−0.0537118.7519.54+22.60
2027-01-29−0.05…−0.0235116.5116.97+16.10
2027-01-29−0.02…+0.0028015.0315.19+5.211
2027-01-29+0.00…+0.0227113.9013.66−7.60
2027-01-29+0.02…+0.0526112.9112.39−16.60
2027-01-29+0.05…+0.0920112.1011.95−3.95
2027-01-29+0.09…+0.148111.9812.82+11.30
2027-01-29+0.14…+0.203012.8714.32+9.50
2027-04-16≤ −0.309031.3831.53+2.722
2027-04-16−0.30…−0.2014127.7328.36+10.80
2027-04-16−0.20…−0.1414223.4824.35+19.10
2027-04-16−0.14…−0.0913120.8721.71+20.80
2027-04-16−0.09…−0.0512118.6719.40+21.20
2027-04-16−0.05…−0.029016.8817.46+16.20
2027-04-16−0.02…+0.006115.7016.11+11.60
2027-04-16+0.00…+0.026014.8415.09+5.70
2027-04-16+0.02…+0.0510013.9013.92+0.740
2027-04-16+0.05…+0.0913113.0412.93−2.515
2027-04-16+0.09…+0.148112.5812.84+6.50
2027-04-16+0.14…+0.204112.5413.98+12.50
2027-04-16+0.20…+0.302013.4615.08+8.80
2027-10-15≤ −0.3012127.3528.02+14.10
2027-10-15−0.30…−0.2025124.9025.72+20.50
2027-10-15−0.20…−0.1416122.2623.11+24.30
2027-10-15−0.14…−0.0914020.4921.32+23.20
2027-10-15−0.09…−0.0512118.9919.80+22.10
2027-10-15−0.05…−0.029017.7918.61+22.60
2027-10-15−0.02…+0.007116.9217.74+21.60
2027-10-15+0.00…+0.026016.2317.06+20.90
2027-10-15+0.02…+0.0510015.4816.28+21.70
2027-10-15+0.05…+0.0912114.6215.35+21.20
2027-10-15+0.09…+0.148013.8314.44+18.20
2027-10-15+0.14…+0.206113.2913.98+19.20
2027-10-15+0.20…+0.303113.1414.21+18.40

2026-11-11 · 14 d

Heston inside 6% · median |z| 12.1

Quote readout: hover a quote, or focus here and step with ← → (Page Up / Down: 10 quotes; Home / End).

Arrow keys step through the shown expiry’s quotes; each step reads the quote’s strike, bid, mid and ask and each shown model’s IV and z.

Market bid–ask quotes, mids and the Heston IVs at the quoted strikes; under the smile, Heston's (model − mid) / half-spread per quote, the band ±1 inside the spread, fit anchors as diamonds for the 2026-11-11 expiry.

2026-11-11: quotes by ln(K/F) bucket (medians; IV in %)
ln(K/F)QuotesAnchorsMid IVHeston IV(Heston − mid) / half-spreadInside the bid–ask (%)
−0.30…−0.204047.6935.84−29.20
−0.20…−0.145036.4430.69−24.40
−0.14…−0.0914029.6327.39−13.70
−0.09…−0.0518221.0822.17+9.66
−0.05…−0.0231217.4218.84+19.60
−0.02…+0.0026114.4915.37+14.90
+0.00…+0.0228212.4212.12−5.711
+0.02…+0.0513211.3911.21+0.215
+0.05…+0.092012.2712.25−0.1100

141 quotes, 9 of them fit anchors.

2026-11-27 · 30 d

Heston inside 6% · median |z| 14.3

Quote readout: hover a quote, or focus here and step with ← → (Page Up / Down: 10 quotes; Home / End).

Arrow keys step through the shown expiry’s quotes; each step reads the quote’s strike, bid, mid and ask and each shown model’s IV and z.

Market bid–ask quotes, mids and the Heston IVs at the quoted strikes; under the smile, Heston's (model − mid) / half-spread per quote, the band ±1 inside the spread, fit anchors as diamonds for the 2026-11-27 expiry.

2026-11-27: quotes by ln(K/F) bucket (medians; IV in %)
ln(K/F)QuotesAnchorsMid IVHeston IV(Heston − mid) / half-spreadInside the bid–ask (%)
≤ −0.301047.3739.15−33.70
−0.30…−0.208038.5634.19−22.90
−0.20…−0.1410030.9129.59−12.50
−0.14…−0.0914125.3525.75+5.414
−0.09…−0.0525220.0621.21+19.30
−0.05…−0.0228116.9317.89+20.80
−0.02…+0.0018214.2514.54+6.622
+0.00…+0.0219112.6012.01−13.00
+0.02…+0.0521111.6011.09−10.85
+0.05…+0.0911111.7312.32+6.50
+0.09…+0.142013.5813.75+0.6100

157 quotes, 9 of them fit anchors.

2026-12-31 · 64 d

Heston inside 4% · median |z| 13.1

Quote readout: hover a quote, or focus here and step with ← → (Page Up / Down: 10 quotes; Home / End).

Arrow keys step through the shown expiry’s quotes; each step reads the quote’s strike, bid, mid and ask and each shown model’s IV and z.

Market bid–ask quotes, mids and the Heston IVs at the quoted strikes; under the smile, Heston's (model − mid) / half-spread per quote, the band ±1 inside the spread, fit anchors as diamonds for the 2026-12-31 expiry.

2026-12-31: quotes by ln(K/F) bucket (medians; IV in %)
ln(K/F)QuotesAnchorsMid IVHeston IV(Heston − mid) / half-spreadInside the bid–ask (%)
≤ −0.3015038.2435.76−26.00
−0.30…−0.2075033.1331.93−12.30
−0.20…−0.1440127.5327.77+3.215
−0.14…−0.0942122.7823.58+17.10
−0.09…−0.0536219.1919.95+21.60
−0.05…−0.0245116.6517.07+13.00
−0.02…+0.0031114.7114.68−1.019
+0.00…+0.0231013.4012.86−17.40
+0.02…+0.0547112.3411.53−23.40
+0.05…+0.0951211.8311.89+1.810
+0.09…+0.1433012.2513.27+11.70
+0.14…+0.201013.7314.77+4.20

447 quotes, 9 of them fit anchors.

2027-01-29 · 93 d

Heston inside 2% · median |z| 13.2

Quote readout: hover a quote, or focus here and step with ← → (Page Up / Down: 10 quotes; Home / End).

Arrow keys step through the shown expiry’s quotes; each step reads the quote’s strike, bid, mid and ask and each shown model’s IV and z.

Market bid–ask quotes, mids and the Heston IVs at the quoted strikes; under the smile, Heston's (model − mid) / half-spread per quote, the band ±1 inside the spread, fit anchors as diamonds for the 2027-01-29 expiry.

2027-01-29: quotes by ln(K/F) bucket (medians; IV in %)
ln(K/F)QuotesAnchorsMid IVHeston IV(Heston − mid) / half-spreadInside the bid–ask (%)
≤ −0.305035.5034.31−12.80
−0.30…−0.2025029.8029.88+1.28
−0.20…−0.1426225.5726.24+13.20
−0.14…−0.0929121.6222.49+22.40
−0.09…−0.0537118.7519.54+22.60
−0.05…−0.0235116.5116.97+16.10
−0.02…+0.0028015.0315.19+5.211
+0.00…+0.0227113.9013.66−7.60
+0.02…+0.0526112.9112.39−16.60
+0.05…+0.0920112.1011.95−3.95
+0.09…+0.148111.9812.82+11.30
+0.14…+0.203012.8714.32+9.50

269 quotes, 9 of them fit anchors.

2027-04-16 · 169 d

Heston inside 7% · median |z| 12.1

Quote readout: hover a quote, or focus here and step with ← → (Page Up / Down: 10 quotes; Home / End).

Arrow keys step through the shown expiry’s quotes; each step reads the quote’s strike, bid, mid and ask and each shown model’s IV and z.

Market bid–ask quotes, mids and the Heston IVs at the quoted strikes; under the smile, Heston's (model − mid) / half-spread per quote, the band ±1 inside the spread, fit anchors as diamonds for the 2027-04-16 expiry.

2027-04-16: quotes by ln(K/F) bucket (medians; IV in %)
ln(K/F)QuotesAnchorsMid IVHeston IV(Heston − mid) / half-spreadInside the bid–ask (%)
≤ −0.309031.3831.53+2.722
−0.30…−0.2014127.7328.36+10.80
−0.20…−0.1414223.4824.35+19.10
−0.14…−0.0913120.8721.71+20.80
−0.09…−0.0512118.6719.40+21.20
−0.05…−0.029016.8817.46+16.20
−0.02…+0.006115.7016.11+11.60
+0.00…+0.026014.8415.09+5.70
+0.02…+0.0510013.9013.92+0.740
+0.05…+0.0913113.0412.93−2.515
+0.09…+0.148112.5812.84+6.50
+0.14…+0.204112.5413.98+12.50
+0.20…+0.302013.4615.08+8.80

120 quotes, 9 of them fit anchors.

2027-10-15 · 351 d

Heston inside 0% · median |z| 21.3

Quote readout: hover a quote, or focus here and step with ← → (Page Up / Down: 10 quotes; Home / End).

Arrow keys step through the shown expiry’s quotes; each step reads the quote’s strike, bid, mid and ask and each shown model’s IV and z.

Market bid–ask quotes, mids and the Heston IVs at the quoted strikes; under the smile, Heston's (model − mid) / half-spread per quote, the band ±1 inside the spread, fit anchors as diamonds for the 2027-10-15 expiry.

2027-10-15: quotes by ln(K/F) bucket (medians; IV in %)
ln(K/F)QuotesAnchorsMid IVHeston IV(Heston − mid) / half-spreadInside the bid–ask (%)
≤ −0.3012127.3528.02+14.10
−0.30…−0.2025124.9025.72+20.50
−0.20…−0.1416122.2623.11+24.30
−0.14…−0.0914020.4921.32+23.20
−0.09…−0.0512118.9919.80+22.10
−0.05…−0.029017.7918.61+22.60
−0.02…+0.007116.9217.74+21.60
+0.00…+0.026016.2317.06+20.90
+0.02…+0.0510015.4816.28+21.70
+0.05…+0.0912114.6215.35+21.20
+0.09…+0.148013.8314.44+18.20
+0.14…+0.206113.2913.98+19.20
+0.20…+0.303113.1414.21+18.40

140 quotes, 8 of them fit anchors.

Identifiability · multi-start and Jacobian

M4 box bound · OK
cond(JᵀJ)
347
relative-sensitivity Jacobian
Smallest singular value
0.00355
largest 0.0661
Starts in best basin
9 / 9
1 distinct basins
Residuals
57
weighted pseudo-observations
ParameterValueSESE / valueWeakest directionBound
κ4.0490.87422%+0.90
θ0.05780.004368%−0.30
σ1.6480.1459%+0.30
ρ−0.6800.01783%+0.02
v₀0.02200.000613%−0.06

Gauss-Newton s^2 (J^T J)^−1 over the free parameters: a local curvature scale, not a sampling distribution (the residuals are model misfit, not iid noise) Source: result pickle.

SPX-only fits, same anchors, residuals and optimiser (the VIX index is then out of sample)
ModelHσIn sampleOOSPut wingVIX OOS (index pts)
Heston, production box—1.290.381.872.511.33
Heston, wide box—1.290.381.872.511.33
Rough Heston (lifted)0.5001.290.381.872.511.33

One session. A lower out-of-sample error here is a measurement on 2026-10-28, not evidence that one model class is right.

Cited on: Risk

Gate-passing fits

M4 fit age · OK8 sessions
Sessionκθσρv₀ISOOSVX OOS (index pts)
2026-10-284.050.05781.648−0.6800.02200.781.40—
2026-10-273.830.05761.630−0.6850.02490.861.53—
2026-10-264.370.05501.833−0.6910.02761.101.72—
2026-10-164.990.04992.000−0.7530.03441.342.96—
2026-06-185.000.06141.592−0.6970.01730.851.831.85
2026-05-295.230.05951.707−0.6560.01300.911.282.56
2026-03-274.290.07331.834−0.7850.09281.371.543.18
2026-03-246.140.06532.000−0.8230.07321.211.982.66

In-sample and out-of-sample SPX IV RMSE in vol pts; VX OOS: the RMSE of the fit’s E[VIXT] against the session’s VX settlements, index pts (VX leg; — where none is stored). Compare session-to-session moves with the standard errors in the identifiability panel.

Each gate-passing fit's SPX implied-vol RMSE on its anchors (dashed) and on the quotes it did not use (solid), oldest first; the headline fit is marked.

SPX IV RMSE (vol pts) of the gated fits
SessionIn sampleOut of samplePut wing OOS
2026-03-241.211.982.88
2026-03-271.371.542.25
2026-05-290.911.281.43
2026-06-180.851.832.37
2026-10-161.342.963.90
2026-10-261.101.722.30
2026-10-270.861.532.00
2026-10-280.781.401.81

Joint SPX/VIX trade-off · σ profile and VVIX

2026-10-28 · 8 diagnosed sessions
σ profile of the 2026-10-28 fit: the joint loss refitted under each cap on σ (κ ≤ 60). SPX errors in vol pts; VIX and VVIX in index pts. VVIX is the model's 30-day vol of VIX at each refit against the ^VVIX close of 97; VVIX − mkt = model − market.
σ capσκLossIn sampleOOSPut wingVIXVVIX modelVVIX − mkt
11.00 at cap1.66.078e−050.902.242.920.64195+99
1.51.50 at cap3.53.813e−050.751.532.000.45192+95
21.654.03.740e−050.761.401.810.42188+92
31.654.03.740e−050.761.401.810.42188+92
41.654.03.740e−050.761.401.810.42188+92
61.654.03.740e−050.761.401.810.42188+92
81.654.03.740e−050.761.401.810.42188+92
101.654.03.740e−050.761.401.810.42188+92

Each row is a diagnostic refit and the published fit is unchanged; the highlighted row refits under the production box. The production box is kept at σ ≤ 2: the NN pricer's training domain, the risk monitor’s vomma shock and the bound chips are tied to it, and widening it is filed, not done (config.HESTON_BOUNDS; Corrections C23-M1).

8 diagnosed sessions, one line each; each point is a refit under one σ cap (labelled on the headline session, in the tooltip on the others), the production cap's point larger, caps above it hollow. Down and to the left is better on both legs.

σ profile by session: SPX out-of-sample RMSE and model VVIX against the ^VVIX close
Sessionσ capSPX OOS RMSE (vol pts)VVIX modelVVIX marketVVIX − market (index pts)
2026-03-2413.54170.0124.14+45.9
2026-03-241.52.56192.9124.14+68.8
2026-03-2421.98190.7124.14+66.5
2026-03-2431.82186.5124.14+62.3
2026-03-2441.82186.5124.14+62.3
2026-03-2461.82186.5124.14+62.3
2026-03-2481.82186.5124.14+62.3
2026-03-24101.82186.5124.14+62.3
2026-03-2712.52160.9133.18+27.7
2026-03-271.51.73203.9133.18+70.8
2026-03-2721.54211.1133.18+77.9
2026-03-2731.54211.1133.18+77.9
2026-03-2741.54211.1133.18+77.9
2026-03-2761.54211.1133.18+77.9
2026-03-2781.54211.1133.18+77.9
2026-03-27101.54211.1133.18+77.9
2026-05-2912.26146.086.06+60.0
2026-05-291.51.47158.886.06+72.8
2026-05-2921.28159.686.06+73.5
2026-05-2931.28159.686.06+73.5
2026-05-2941.28159.686.06+73.5
2026-05-2961.28159.686.06+73.5
2026-05-2981.28159.686.06+73.5
2026-05-29101.28159.686.06+73.5
2026-06-1812.55153.688.43+65.2
2026-06-181.51.90162.088.43+73.6
2026-06-1821.83161.888.43+73.3
2026-06-1831.83161.888.43+73.3
2026-06-1841.83161.888.43+73.3
2026-06-1861.83161.888.43+73.3
2026-06-1881.83161.888.43+73.3
2026-06-18101.83161.888.43+73.3
2026-10-1614.69226.2109.91+116.3
2026-10-161.53.68221.0109.91+111.1
2026-10-1622.96205.1109.91+95.2
2026-10-1632.03175.6109.91+65.7
2026-10-1641.54153.2109.91+43.3
2026-10-1661.21122.7109.91+12.7
2026-10-1681.19112.7109.91+2.8
2026-10-16101.19112.7109.91+2.8
2026-10-2612.71215.0101.43+113.5
2026-10-261.52.02208.0101.43+106.6
2026-10-2621.72198.3101.43+96.8
2026-10-2631.72198.3101.43+96.8
2026-10-2641.72198.3101.43+96.8
2026-10-2661.72198.3101.43+96.8
2026-10-2681.72198.3101.43+96.8
2026-10-26101.72198.3101.43+96.8
2026-10-2712.28205.399.45+105.9
2026-10-271.51.64198.899.45+99.4
2026-10-2721.53195.599.45+96.0
2026-10-2731.53195.599.45+96.0
2026-10-2741.53195.599.45+96.0
2026-10-2761.53195.599.45+96.0
2026-10-2781.53195.599.45+96.0
2026-10-27101.53195.599.45+96.0
2026-10-2812.24195.196.61+98.5
2026-10-281.51.53191.696.61+95.0
2026-10-2821.40188.496.61+91.8
2026-10-2831.40188.496.61+91.8
2026-10-2841.40188.496.61+91.8
2026-10-2861.40188.496.61+91.8
2026-10-2881.40188.496.61+91.8
2026-10-28101.40188.496.61+91.8

x: SPX out-of-sample IV RMSE; y: model VVIX minus the ^VVIX close. One line per diagnosed session (2026-10-28 in white, the others grey), one point per σ cap, labelled; the production cap's point is larger and caps above it are hollow.

On 7 of 8 diagnosed sessions even the σ ≤ 10 refit prices VVIX more than 10% above the ^VVIX close (186 vs 124, 211 vs 133, 160 vs 86, 162 vs 88, 198 vs 101, 195 vs 99, 188 vs 97), so a wider σ box does not reconcile the SPX smile with VVIX there. On 2026-10-16 the σ ≤ 2 box binds, and the σ ≤ 10 refit (σ 6.90, κ 27.4, Feller margin −45.3) lowers OOS RMSE 2.96 → 1.19 vol pts and VVIX 205 → 112.7 against 109.9; one session, the other seven do not escape.

Heston vs rough Heston · joint fit, every diagnosed session

diagnostics/summary.json

Rough Heston (lifted, 20 factors) is fitted with the same anchors, VIX leg, weights and parameter box as the production Heston fit, plus H ∈ [0.02, ½], by multi-start trust-region least squares. Its out-of-sample SPX error is lower on 4 of 8 sessions; on 4 it returns H = ½, which is Heston. H is weakly identified and on 2026-10-28 the fit returns H = ½, which is Heston, so no Hurst exponent is read from these fits (compare arXiv:2401.03345).

Joint SPX/VIX fits by session: out-of-sample SPX IV RMSE (vol pts) on the same quotes, VIX-index RMSE (index pts), model VVIX against the market
SessionHeston OOSRough OOSRough − HestonHHeston VIXRough VIXLifting error (vol pts)Free-σ OOSVVIX model / market
2026-03-24 σ at cap1.981.42−0.560.280.890.860.0301.82191 / 124
2026-03-271.541.41−0.130.360.850.850.0201.54211 / 133
2026-05-291.281.280.000.50 on bound0.520.520.0001.28160 / 86
2026-06-181.831.830.000.50 on bound0.510.510.0001.83162 / 88
2026-10-16 σ at cap2.961.09−1.860.02 on bound0.820.500.0571.19205 / 110
2026-10-261.721.42−0.300.370.620.600.0071.72198 / 101
2026-10-271.531.530.000.50 on bound0.460.460.0001.53195 / 99
2026-10-281.401.400.000.50 on bound0.420.420.0001.40188 / 97

Heston OOS is the production fit (σ ≤ 2); free-σ OOS refits it with σ ≤ 10 and κ ≤ 60 (the σ profile above). The lifting error is the numerics check of the 20-factor approximation at the fitted point. VVIX is the model's 30-day vol of VIX at the boxed optimum against the ^VVIX close; what a wider σ box does to it, session by session, is in the σ-profile panel above. 8 sessions with a stored chain: a range, not a statistic. The market’s ATM skew against maturity on the same sessions, and Heston’s, is in the ATM-skew panel.

Model smile of this fit · all maturities

2026-10-28

Model implied vols at the fitted parameters for 14 to 365 days; model curves, not market data.

Model implied vol (%) at the lowest and highest log-moneyness plotted
MaturityLowest ln(K/F)IVHighest ln(K/F)IV
14d−0.27537.97+0.10014.54
30d−0.30037.84+0.17517.06
60d−0.30035.29+0.25018.38
91d−0.30033.33+0.25017.27
180d−0.30030.02+0.25015.35
365d−0.30027.08+0.25014.28
Model implied vol (%) by maturity: lowest, nearest-the-money and highest ln(K/F) plotted
MaturityLowest ln(K/F)Near the moneyHighest ln(K/F)
14d−0.275: 37.97+0.000: 13.51+0.100: 14.54
30d−0.300: 37.84+0.000: 13.26+0.175: 17.06
60d−0.300: 35.29+0.000: 13.69+0.250: 18.38
91d−0.300: 33.33+0.000: 14.30+0.250: 17.27
180d−0.300: 30.02+0.000: 15.74+0.250: 15.35
365d−0.300: 27.08+0.000: 17.50+0.250: 14.28

Black–Scholes implied vols of Heston prices at the parameters above, against ln(K/F) (forward-normalised, so independent of r and q); model curves, not market data. Nodes whose out-of-the-money price is too small to invert are omitted.

Cited on: Risk

Carry and inputs

r
4.72%, median of the per-expiry put–call-parity rates the fit priced with
q
2.37%, median parity-implied carry q_T = r_T − ln(F_T/S)/T
Treasury r(91d)
4.09% (Treasury zero curve, 91-day zero rate, continuously compounded; reference)
Half-life
43.1 trading days (ln 2 / κ)
√θ, √v₀
24.03% long-run, 14.85% spot
Inputs
53 SPX options (6 expiries), 4 VIX tenors
The SPX anchors the fit priced, and the parity carry it priced them with, per expiry
ExpiryDaysAnchorsPutsWingK/Frq
2026-11-11149530.94–1.043.35%6.75%
2026-11-27309640.91–1.064.56%4.41%
2026-12-31649640.86–1.094.65%2.71%
2027-01-29939550.83–1.114.81%2.03%
2027-04-161699650.77–1.164.78%1.55%
2027-10-153518540.72–1.274.91%1.17%

From the fit's own record (anchors_by_expiry): r and q are the put–call-parity rate and carry at each anchor expiry; Wing counts the anchor puts in the put wing the anchor rule names. Anchor rule: z-grid linspace(−2.5,1.5,9), OTM vs F_T, >=3 puts at K/F<0.97. Expiries: nearest listed to [14, 30, 60, 91, 180, 365]d, unique, within 50%.

Research model · two-factor Quintic OU

Quintic OU vs Heston · same session

2026-03-24

Optimiser did not converge

σ(t) = g₀(t) · p(Z_t), Z_t = θX_t + (1−θ)Y_t, p(z) = α₀ + α₁z + α₃z³ + α₅z⁵. VIX by cubature (101 points per dimension); SPX by Monte Carlo (10,000 paths).

RMSEHeston (own targets)Heston on Quintic targetsQuintic OUΔ, same targets
SPX implied vol (vol pts)1.207 (52)1.215 (66)1.309 (66)+0.094
VIX forward (index pts)¹not a target2.3040.376−1.928
VIX options (vol pts)not fitted (w₃ = 0)35.162.77 (61)−32.39
VIX indices (index pts)0.888—input (ξ₀), 2.5e−15—

Counts in brackets are quotes. ¹ Model E[VIXT] against the VIX-option put–call-parity forward. Δ = Quintic − Heston on the same targets (Quintic: data_store/calibrations/quintic_cal_2026-03-24.pkl; Heston: data_store/calibrations/joint_cal_2026-03-24.pkl; Heston re-priced on the Quintic targets: data_store/calibrations/baseline_2026-03-24.json).

Reading this honestly

The Quintic optimiser stopped at its iteration limits without meeting its tolerance. Parameters on a search bound: epsilon (ε at −0.99: the skew wants more leverage than the bound allows). ξ₀ is bootstrapped from the VIX indices, so the Quintic reproduces them by construction; that is an input check, not a fit metric. The VIX-forward and VIX-options legs are where the models differ: they are in the Quintic's objective and not in Heston's. Fit time 499.4 s, 3,704 evaluations; SPX RMSE on fresh MC paths 1.310 vol pts.

Keyboard shortcuts

g o
Overview
g s
Surface
g c
Calibration
g r
Risk
g e
Research
g x
Corrections
g m
Model Risk
?
This list
← → ↑ ↓
Move between heatmap cells

Units, signs and definitions: every term the pages abbreviate, with its formula.