● 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

Research · delta-hedged straddle backtest, 2018-01-02 → 2025-03-24 (1,816 sessions)

Equal-weight S1C + S3 + S4 sleeves on $1M of collateral, after every correction from C16 to C23. A documented negative result.

Final NAV $777,823·P&L −$222,177·straddles marked at ATM vol = β = 0.82 × VIX
Cumulative return
−22.2%
annualised −3.43%
Sharpe
−0.99
95% CI −1.81 to −0.30 (bootstrap)
Sortino −1.62; excess P&L, rf = 0
Max drawdown
−22.2%
1,814 sessions under water
Trades
206
1 open at the end; over the 205 closed: win rate 37.6%, average −$1,083 of portfolio P&L per trade
T-bills on the collateral (earned on top of the NAV)
+19.1%
^IRX compounded; not a hurdle: the NAV is already an excess return over it
S3 timing null test
p = 0.078
vs 3,550 exposure-matched circular shifts: not significant at 5%; Holm over 6 sleeves 0.47; trade shuffles p = 0.057

Sleeve specification · what each sleeve trades

from the engine and signal modules
SleeveRoleInstrumentSide (trades)Entry ruleExit ruleMax holdSizingCosts
S1C contrarianportfolio30-calendar-day ATM SPX straddle, delta-hedged daily, marked at Black–Scholes on β·VIXlong 121
exits: 121 signal
PDV forecast > VIX + 2 vol pts in R0 → short; VIX > PDV + 2 vol pts in R1 → longthe spread back inside ±0.5 vol pts or through zero; a move into R2 closes it21 sessionstanh(|spread| / 4 vol pts) × 20% of sleeve NAV · overlay0.15 vol pts + $0.65 a contract per leg, each way; hedge slippage 0.05%
S3 short SPX straddleportfolioSHORT 30-calendar-day ATM SPX straddle, delta-hedged daily, marked at Black–Scholes on β·VIX; the index leg onlyshort 39
exits: 25 signal, 14 at expiry, rolled
z of VIX / VVIX (252-session) < −1 in R0 or R1z > −0.330 sessionsmin(1, |z| / 3) × 20% of sleeve NAV · overlay0.15 vol pts + $0.65 a contract per leg, each way; hedge slippage 0.05%
S4 VRPportfolio30-calendar-day ATM SPX straddle, delta-hedged daily, marked at Black–Scholes on β·VIXshort 22 / long 24
exits: 45 signal, 1 open at the end
z_vrp > 1 and falling, in R1 → short; z_vrp < −0.5 and rising, in R0 → long|z_vrp| < 0.3; a move into R2 closes it15 sessionsmin(1, |z_vrp| / 2) × 20% of sleeve NAV · overlay0.15 vol pts + $0.65 a contract per leg, each way; hedge slippage 0.05%
S1 PDV (ref)reference30-calendar-day ATM SPX straddle, delta-hedged daily, marked at Black–Scholes on β·VIXshort 69
exits: 69 signal
PDV forecast > VIX + 2 vol pts in R0 → long; VIX > PDV + 2 vol pts in R1 → shortthe spread back inside ±0.5 vol pts or through zero21 sessionstanh(|spread| / 4 vol pts) × 20% of sleeve NAV0.15 vol pts + $0.65 a contract per leg, each way; hedge slippage 0.05%
S2 VIX TS (ref)reference30-calendar-day ATM SPX straddle, delta-hedged daily, marked at Black–Scholes on β·VIXshort 31 / long 13
exits: 44 signal
z of the VIX3M − VIX slope (252-session) > 1 in R0 or R1 → short; slope < 0 (backwardation) in R0 or R1 → long|z| < 0.5, or VIX moves 15% of its entry level against the straddle10 sessionsmin(1, |z| / 3) × 20% of sleeve NAV0.15 vol pts + $0.65 a contract per leg, each way; hedge slippage 0.05%

No option prices exist in the window, so every straddle is priced and marked with Black–Scholes at β·VIX (β = 0.82). Sizing is premium as a share of the sleeve’s NAV; a short straddle is capped at NAV / (20% × K × 100) contracts, its initial margin; “overlay”: the portfolio sleeves’ size is then scaled by their pairwise P&L correlation and trailing net Sharpe, lagged one session. Costs are charged at entry and at exit (vol pts of the straddle’s vega); the cash account and the hedge carry r and q. z_vrp: the 252-session z-score of VRP = VIX − RV₂₀ (annualised), the day's premium of implied over realised vol. PDV forecast: the walk-forward 21-session RMS vol forecast; the spread is the forecast minus VIX. Regimes are the rule labels lagged one session. A position still on when its 30-day straddle expires is rolled into a fresh one the same close (“at expiry, rolled”). The trade log also holds 111 “combined” records (108 long, 3 short): the research-only agreement rule over S1C, S3 and S4, which reads S3 as long index vol, the opposite of the short straddle the backtest trades. It is not a coherent strategy, is not in the portfolio and is left out here. S3_PROXY_COST (0.1% of notional) costs only the pre-C22 z-score proxy the C22 bridge keeps; the canonical S3 is costed as a straddle. Every number in the table is read from joint_vol_calibration/signals/signal_engine.py and joint_vol_calibration/backtest/backtest_engine.py when the page is built, and the counts from the trade log in data_store/backtest/full_results.pkl.

Cumulative return · portfolio, sleeves and T-bills

R2 sessions shaded

Daily from 2018-01-02 to 2025-03-24; R2 sessions (shaded) are 24% of the window.

Cumulative return from 2018-01-02 to 2025-03-24
SeriesFinalLowestHighest
Portfolio−22.2%−22.2%0.0%
S1C contrarian−45.4%−46.8%+1.3%
S3 short SPX straddle+6.1%−5.2%+16.9%
S4 VRP−27.4%−27.9%+0.3%
S1 PDV (ref)−30.7%−41.2%+12.8%

Each sleeve's own NAV relative to its start; the portfolio's daily P&L is the equal-weight mean of S1C, S3 and S4. Full daily resolution; drag or use the slider to zoom.

Cited on: Corrections

Drawdown

zooms with the curve above

Deepest drawdown −22.2% on 2025-03-24.

Drawdown
StatisticValue
Deepest (%)−22.22
Date of the trough2025-03-24

Rolling 126-session Sharpe

zooms with the curve above

Annualised Sharpe of the trailing 126 daily returns; blank where the NAV was flat.

Rolling Sharpe
StatisticValue
Latest−2.91
Lowest−5.73
Highest+2.88

Per-sleeve performance

SignalTotal P&LSharpeAnn. returnWin rateTradesRole
S1C contrarian−$453,845−0.694−8.05%33.88%121portfolio
S3 short SPX straddle$61,0470.1920.83%48.72%39portfolio
S4 VRP−$273,733−0.788−4.34%36.96%46 (1 open)portfolio
S1 PDV (ref)−$306,779−0.169−4.96%57.97%69reference
S2 VIX TS (ref)−$148,436−0.376−2.21%38.64%44reference

S3 is a short SPX straddle: the index leg of a dispersion trade, with no single-name leg (the store has no single-stock options). S1 and S2 are reference strategies, not in the portfolio. Sharpe: excess P&L, rf=0 (collateral earns T-bills). S4's count includes a straddle opened on the last session (2025-03-24) and still open, carrying only its entry cost (−$433); the engine's win rate counts it as a loss.

Total P&L by sleeve

$000s

Mark-to-model P&L of the three portfolio sleeves over the backtest window.

Total P&L by sleeve ($000s)
SleeveP&L ($000s)
S1C contrarian−453.8
S3 short SPX straddle+61.0
S4 VRP−273.7

Every trade · P&L by entry date

mark-to-model at β·VIX

205 closed round trips of S1C, S3 and S4, each a dot at its entry date and its mark-to-model P&L at β·VIX in $000s; the open trade is hollow and carries only its entry cost.

Trades by sleeve and entry year, closed ($000s, mark-to-model); every trade is in the CSV
SleeveYearTradesWinningTotal P&LBestWorst
S1C contrarian2018154−58.5+32.5−27.9
S1C contrarian2019185−114.9+15.7−28.3
S1C contrarian2020125−164.4+55.1−59.7
S1C contrarian2021217−107.2+21.2−26.7
S1C contrarian20221712+108.5+33.0−18.6
S1C contrarian2023233−101.6+7.3−29.1
S1C contrarian2024103−11.8+4.7−6.0
S1C contrarian202552−3.8+4.2−4.0
S3 short SPX straddle201810−22.4−22.4−22.4
S3 short SPX straddle201954+34.6+12.6−13.4
S3 short SPX straddle202020−27.3−7.6−19.6
S3 short SPX straddle2021118+160.4+41.1−10.5
S3 short SPX straddle2023136+2.9+16.5−13.8
S3 short SPX straddle202451−63.9+13.9−45.0
S3 short SPX straddle202520−23.4−7.1−16.2
S4 VRP201885−8.5+16.3−42.5
S4 VRP2019101−139.8+5.7−62.3
S4 VRP202021−7.4+7.2−14.6
S4 VRP202131−27.7+13.5−20.8
S4 VRP202294−7.2+7.5−10.3
S4 VRP202362−37.5+7.5−17.7
S4 VRP202462−45.9+0.9−19.6
S4 VRP202511+0.7+0.7+0.7

Trade readout: hover a dot, or focus here and step through the trades by entry date with ← → (Page Up / Down: 10 trades; Home / End).

Arrow keys step through the shown sleeves’ round trips in order of entry date; each step reads the sleeve, the entry date and the P&L in $000s.

Each dot is one round trip (a straddle from entry to exit), at its entry date and its net P&L in $000s: priced and marked with Black–Scholes at β·VIX, after costs and financing, so no dot is a traded fill. The reference strategies S1 and S2 are in the statistics below, not on the chart. The open trade is hollow and carries only its entry cost. The trade log’s “combined” records (the research-only agreement rule, not in the portfolio; see the sleeve specification) are left out.

Closed round trips · P&L and days held

205 closed · S1C, S3, S4

P&L per round trip$000s, closed trades

Counts of the 205 closed round trips of S1C, S3 and S4 by P&L bin in $000s.

Closed round trips by P&L ($000s), S1C, S3 and S4
P&L ($000s)Trades
≥ +600
+40 to +603
+20 to +4010
+10 to +2020
0 to +1044
−10 to 072
−20 to −1037
−40 to −2011
−60 to −407
< −601

Days heldcalendar days, entry to exit

Counts of the 205 closed round trips of S1C, S3 and S4 by calendar days from entry to exit.

Closed round trips by calendar days held, S1C, S3 and S4
Days heldTrades
0–466
5–922
10–1432
15–1913
20–2419
25–2934
≥ 3019

Round-trip statistics by sleeve

closed trades
Trades of each sleeve, mark-to-model at β·VIX, in $000s of the sleeve’s own NAV: closed trades only except Total (every trade, the open one’s entry cost included); P(profit) = share of closed trades with P&L > 0; 5 worst / losses = the five largest losses’ share of all losses (and 5 best / gains of all gains); days are calendar days from entry to exit
SleeveClosedOpenTotalP(profit)MeanMedianBestWorst5 worst / losses5 best / gainsMedian days
S1C contrarian1210−453.833.9%−3.8−3.0+55.1−59.729%41%8
S3 short SPX straddle390+61.048.7%+1.6−0.4+41.1−45.053%50%16
S4 VRP451−273.737.8%−6.1−3.9+16.3−62.348%57%8
S1 PDV (ref)690−306.858.0%−4.4+4.3+60.1−182.849%31%29
S2 VIX TS (ref)440−148.438.6%−3.4−1.3+18.1−91.265%50%9

Dollars are each sleeve’s own (a $1M NAV per sleeve); the portfolio is the equal-weight mean of S1C, S3 and S4, so a trade moves it by a third as much. The counts and totals are the trade log’s and equal the per-sleeve table above (checked when the page is built). Across the three portfolio sleeves 205 round trips closed, 37.6% at a profit, with a median of −2.8k and a mean of −3.2k per trade in sleeve dollars (−$1,083 of portfolio P&L, the Trades tile: a third of it). The five largest losses are 29% of S1C contrarian’s losses, 53% of S3 short SPX straddle’s losses, 48% of S4 VRP’s losses.

Worst drawdowns · portfolio and each sleeve

NAV to 2025-03-24
The five deepest drawdowns of each NAV (fewer where there are fewer): the peak is the last session at the running high before the fall, the valley the low before the peak is regained, the recovery the first session back at the peak; depth = valley / peak − 1; sessions from the peak to the recovery, or to 2025-03-24 when not recovered
SeriesRankPeakValleyRecoveryDepthSessions to valleySessions
Portfolio12018-01-032025-03-24not recovered−22.2%1,8141,814 to date
S1C contrarian12018-04-252024-12-13not recovered−47.5%1,6711,737 to date
S1C contrarian22018-01-082018-01-102018-01-16−0.7%25
S3 short SPX straddle12023-05-222025-02-21not recovered−9.2%439460 to date
S3 short SPX straddle22020-01-232021-05-122021-05-27−6.6%328339
S3 short SPX straddle32018-01-032019-12-032019-12-18−4.0%482493
S3 short SPX straddle42021-07-142021-07-192021-08-03−3.1%314
S3 short SPX straddle52023-04-242023-05-042023-05-12−2.2%814
S4 VRP12018-11-122025-01-24not recovered−28.1%1,5571,597 to date
S4 VRP22018-03-072018-07-032018-11-12−4.4%82174

Each series’ deepest drawdown equals the engine’s max drawdown (checked when the page is built). The portfolio has stayed below its 2018-01-03 high ever since (1 drawdown period in the whole run): 1,814 sessions to 2025-03-24, at its deepest on 2025-03-24. The NAVs are mark-to-model: these are drawdowns of β·VIX marks, not of traded prices.

Monthly returns

against the prior month-end NAV
Portfolio return (%) by month; the last column is the calendar year
YearJanFebMarAprMayJunJulAugSepOctNovDecYear
2018 −0.3; Jan 2018: −0.32%0.0; Feb 2018: 0.00%0.0; Mar 2018: −0.02%−1.6; Apr 2018: −1.63%−0.9; May 2018: −0.86%−1.1; Jun 2018: −1.05%−0.5; Jul 2018: −0.48%−0.8; Aug 2018: −0.83%−0.4; Sep 2018: −0.37%+1.5; Oct 2018: +1.46%0.0; Nov 2018: −0.03%+1.1; Dec 2018: +1.06%−3.1; 2018: −3.07%
2019 −1.5; Jan 2019: −1.55%−0.4; Feb 2019: −0.37%−0.5; Mar 2019: −0.48%−0.7; Apr 2019: −0.71%−2.7; May 2019: −2.73%−0.8; Jun 2019: −0.80%0.0; Jul 2019: +0.01%−0.2; Aug 2019: −0.16%−0.7; Sep 2019: −0.71%−0.9; Oct 2019: −0.87%−0.4; Nov 2019: −0.37%+0.8; Dec 2019: +0.79%−7.7; 2019: −7.72%
2020 +0.6; Jan 2020: +0.61%−1.0; Feb 2020: −1.01%0.0; Mar 2020: 0.00%0.0; Apr 2020: 0.00%−0.4; May 2020: −0.41%+2.4; Jun 2020: +2.44%−2.3; Jul 2020: −2.31%−1.2; Aug 2020: −1.22%−0.5; Sep 2020: −0.52%−0.7; Oct 2020: −0.66%−1.8; Nov 2020: −1.84%−2.2; Dec 2020: −2.21%−7.0; 2020: −7.00%
2021 −1.0; Jan 2021: −0.96%−1.4; Feb 2021: −1.36%−0.3; Mar 2021: −0.30%−0.8; Apr 2021: −0.81%+2.0; May 2021: +2.04%+1.1; Jun 2021: +1.08%−0.2; Jul 2021: −0.23%+1.0; Aug 2021: +1.01%+0.6; Sep 2021: +0.63%−0.4; Oct 2021: −0.44%+1.2; Nov 2021: +1.23%−0.8; Dec 2021: −0.84%+1.0; 2021: +0.99%
2022 −0.1; Jan 2022: −0.11%+0.5; Feb 2022: +0.54%−0.4; Mar 2022: −0.41%+0.9; Apr 2022: +0.93%+0.4; May 2022: +0.43%+1.4; Jun 2022: +1.42%−1.0; Jul 2022: −1.00%+1.3; Aug 2022: +1.29%+0.4; Sep 2022: +0.35%−0.5; Oct 2022: −0.51%+1.3; Nov 2022: +1.26%−0.1; Dec 2022: −0.12%+4.1; 2022: +4.13%
2023 0.0; Jan 2023: −0.02%−0.4; Feb 2023: −0.39%−1.2; Mar 2023: −1.19%−0.4; Apr 2023: −0.36%−0.8; May 2023: −0.75%−0.4; Jun 2023: −0.38%−0.6; Jul 2023: −0.57%−0.6; Aug 2023: −0.57%−0.6; Sep 2023: −0.55%−0.2; Oct 2023: −0.25%−0.2; Nov 2023: −0.19%0.0; Dec 2023: +0.04%−5.1; 2023: −5.07%
2024 −0.7; Jan 2024: −0.68%−0.4; Feb 2024: −0.36%−0.2; Mar 2024: −0.19%−0.4; Apr 2024: −0.40%−0.9; May 2024: −0.95%+0.4; Jun 2024: +0.41%−0.6; Jul 2024: −0.55%0.0; Aug 2024: 0.00%−0.2; Sep 2024: −0.23%−0.2; Oct 2024: −0.22%−1.0; Nov 2024: −0.95%−1.3; Dec 2024: −1.25%−5.3; 2024: −5.26%
2025 YTD −0.2; Jan 2025: −0.20%−0.9; Feb 2025: −0.92%0.0; Mar 2025: −0.02%Apr 2025: —May 2025: —Jun 2025: —Jul 2025: —Aug 2025: —Sep 2025: —Oct 2025: —Nov 2025: —Dec 2025: —−1.1; 2025 YTD (2025-01-02 → 2025-03-24): −1.14%

Hover or focus a cell (arrow keys move) for its details.

Annual return and half-year Sharpe

Calendar-year returns; they compound to the cumulative return. 2025 YTD: 2025-01-02 → 2025-03-24, 55 sessions.

Annual return (%)
YearReturn
2018−3.07%
2019−7.72%
2020−7.00%
2021+0.99%
2022+4.13%
2023−5.07%
2024−5.26%
2025 YTD−1.14%

10 of 15 half-years have a negative Sharpe.

Half-year Sharpe (in-sample, rf = 0)
Half-yearSharpe
2018-H1−4.19
2018-H2+0.38
2019-H1−4.39
2019-H2−1.12
2020-H1+0.62
2020-H2−3.98
2021-H1−0.18
2021-H2+0.88
2022-H1+1.02
2022-H2+0.74
2023-H1−2.45
2023-H2−1.84
2024-H1−3.17
2024-H2−2.49
2025-H1 (partial)−5.71

Years compound exactly to the cumulative return (2025 YTD: 2025-01-02 → 2025-03-24, 55 sessions). 10 of 15 half-years are negative. Sub-periods of one run: nothing is refitted per window, so this is not walk-forward evidence.

Inference · intervals, nulls, multiple testing

mark-to-model P&L
Annualised Sharpe (rf = 0) with its 95% stationary bootstrap, percentile interval (10,000 draws), probabilistic and deflated Sharpe
SeriesSharpeIntervalExcludes 0PSR(SR > 0)DSRSkewKurtosis
Portfolio−0.99−1.81 to −0.30yes0.010.000+3.756
S1 PDV (ref)−0.17−0.70 to +0.47no0.320.000−6.194
S1C contrarian−0.69−1.52 to −0.05yes0.050.000+5.770
S2 VIX TS (ref)−0.38−0.86 to +0.27no0.110.000−17.8629
S3 short SPX straddle+0.19−0.40 to +0.87no0.690.000−5.395
S4 VRP−0.79−1.42 to −0.18yes0.020.000−0.376

DSR deflates for the 147 effective trials of C16–C22 (162 raw; 190 over every round, from docs/trials_ledger.yaml). Excess kurtosis this large makes every Sharpe interval wide.

Timing against exposure-matched nulls: total P&L, 3,550 circular shifts (≥ 21 sessions) and 2,000 trade shuffles
SleeveReal P&LNull meanNull 5–95%Timing partp (shift)Holm pp (shuffle)
Portfolio−$222K−$225K−$325K to −$113K+$3K0.4471.000.463
S1 PDV (ref)−$307K−$419K−$602K to −$177K+$113K0.1770.880.208
S1C contrarian−$454K−$404K−$549K to −$210K−$50K0.6311.000.679
S2 VIX TS (ref)−$148K−$101K−$278K to +$82K−$47K0.6761.000.655
S3 short SPX straddle+$61K−$128K−$309K to +$94K+$189K0.0780.470.057
S4 VRP−$274K−$144K−$314K to +$84K−$129K0.8691.000.892

The timing part is real P&L minus the null mean: what entry timing added over the same exposure placed at random.

Data-snooping checks: Hansen SPA (H0: nothing beats cash), StepM at 5% FWER, CSCV probability of backtest overfitting
FamilySeriesSPA pStepM superiorPBO
Published sleeves vs cash60.654none—
Every configuration tried (trials ledger)830.013beta1.00:s10.001
Configurations at an estimated β440.196none0.010
The inference summary, line by line
  • s1: Sharpe −0.17, 95% stationary-bootstrap CI [−0.70, 0.47] includes zero; mean daily P&L −$169 [−569, 205] includes zero
  • s1c: Sharpe −0.69, 95% stationary-bootstrap CI [−1.52, −0.05] excludes zero (negative); mean daily P&L −$250 [−449, −43] excludes zero (negative)
  • s2: Sharpe −0.38, 95% stationary-bootstrap CI [−0.86, 0.27] includes zero; mean daily P&L −$82 [−233, 36] includes zero
  • s3: Sharpe 0.19, 95% stationary-bootstrap CI [−0.40, 0.87] includes zero; mean daily P&L $34 [−93, 169] includes zero
  • s4: Sharpe −0.79, 95% stationary-bootstrap CI [−1.42, −0.18] excludes zero (negative); mean daily P&L −$151 [−279, −34] excludes zero (negative)
  • portfolio: Sharpe −0.99, 95% stationary-bootstrap CI [−1.81, −0.30] excludes zero (negative); mean daily P&L −$122 [−203, −41] excludes zero (negative)
  • PSR(SR>0); DSR at the ledger's trial counts (N 147-210: the C16-C22 effective N and the raw counts, every trial-variance choice); the largest DSR over every N and variance choice: s1 0.32; 0.000-0.001; 0.049; s1c 0.05; 0.000-0.000; 0.004; s2 0.11; 0.000-0.000; 0.004; s3 0.69; 0.000-0.019; 0.271; s4 0.02; 0.000-0.000; 0.001; portfolio 0.01; 0.000-0.000; 0.000. The largest is at null_var|n_eigen_participation: N 4.6 is the eigenvalue participation ratio of the 83 re-run trial series, not a count of trials (ledger C16-C22 162, all rounds 190); null_var is the skill-less trial variance 1/(T-1)
  • s3: DSR 0.000 at the ledger's N 162 with the family's trial-Sharpe sd 0.64/yr (SR0 1.73); 0.017 with the H0 sd 0.37/yr; 0.27 only at N 4.6 (the re-run family's eigenvalue participation, not a trial count) with the H0 sd; MinTRL 78 years at the observed SR and moments
  • Hansen SPA (the 6 published series vs cash): consistent p 0.65; Romano-Wolf StepM superior: none
  • Over the 44 trial series priced at an estimated beta: SPA p 0.20, StepM superior none; over all 83 (incl. beta = 1, the mis-specified mark): SPA p 0.013, StepM superior ['beta1.00:s1']
  • CSCV PBO (the published portfolio's configurations, 16 series, 12870 splits): 0.34; OOS-on-IS Sharpe slope −0.99; selected config's OOS Sharpe −0.90/yr (IS −0.28)
  • CSCV PBO (beta-estimated trials, 44 series, 12870 splits): 0.01; OOS-on-IS Sharpe slope −1.11; selected config's OOS Sharpe 0.41/yr (IS 1.04)
  • CSCV PBO (all trials, 83 series, 12870 splits): 0.00; OOS-on-IS Sharpe slope −1.06; selected config's OOS Sharpe 0.60/yr (IS 1.42)
  • s1: timing vs 3550 circular shifts p 0.177 (Holm over 6: 0.88); real −$306,779 = exposure at random timing −$419,391 + timing $112,612; trade shuffle (2000 paths) p 0.208 (Holm 1.00)
  • s1c: timing vs 3550 circular shifts p 0.631 (Holm over 6: 1.00); real −$453,845 = exposure at random timing −$403,511 + timing −$50,334; trade shuffle (2000 paths) p 0.679 (Holm 1.00)
  • s2: timing vs 3550 circular shifts p 0.676 (Holm over 6: 1.00); real −$148,436 = exposure at random timing −$101,034 + timing −$47,402; trade shuffle (2000 paths) p 0.655 (Holm 1.00)
  • s3: timing vs 3550 circular shifts p 0.078 (Holm over 6: 0.47); real $61,047 = exposure at random timing −$128,128 + timing $189,174; trade shuffle (2000 paths) p 0.057 (Holm 0.34)
  • s4: timing vs 3550 circular shifts p 0.869 (Holm over 6: 1.00); real −$273,733 = exposure at random timing −$144,311 + timing −$129,422; trade shuffle (2000 paths) p 0.892 (Holm 1.00)
  • portfolio: timing vs 3550 circular shifts p 0.447 (Holm over 6: 1.00); real −$222,177 = exposure at random timing −$225,316 + timing $3,139; trade shuffle (2000 paths) p 0.463 (Holm 1.00)
  • Daily P&L on the always-short straddle (HAC t, 21 lags): s1 alpha $42,638/yr (t 1.55), beta 1.22 (t 9.34, R2 0.62); s1c alpha −$90,969/yr (t −4.75), beta −0.40 (t −3.23, R2 0.26); s2 alpha −$15,534/yr (t −1.17), beta 0.07 (t 0.97, R2 0.02); s3 alpha $18,865/yr (t 1.30), beta 0.15 (t 2.36, R2 0.09); s4 alpha −$38,173/yr (t −2.78), beta −0.00 (t −0.09, R2 0.00); portfolio alpha −$36,759/yr (t −3.90), beta −0.08 (t −2.36, R2 0.08)
  • 21-day variance forecasts, full_sample 2012-04-30..2026-09-18 (n 3618): QLIKE PDV 0.461, rank 6/7 (best vix_mz 0.378); MSE rank 2/7; DM (HLN) vs PDV significant at 5%: none; 90% MCS (QLIKE) ['garch', 'gjr', 'pdv', 'vix2', 'vix_mz']
  • 21-day variance forecasts, backtest_window 2018-01-02..2025-03-24 (n 1816): QLIKE PDV 0.662, rank 6/7 (best vix2 0.450); MSE rank 2/7; DM (HLN) vs PDV significant at 5%: none; 90% MCS (QLIKE) ['garch', 'gjr', 'har', 'pdv', 'vix2', 'vix_mz']
  • PUT-implied beta overall 0.800; full years 0.63-0.90 (sd 0.09; typical within-year se 0.05); replication at beta 0.82: daily corr 0.984 with the index
  • WPUT-implied beta overall 0.800; full years 0.75-0.89 (sd 0.05; typical within-year se 0.04); replication at beta 0.82: daily corr 0.974 with the index
  • Always-short straddle (the mark's premium factor) daily corr / corr ex-SPX with WPUT: all 0.55/0.31, 2018 0.63/0.35, 2020 0.61/0.33, 2022 0.48/0.28; PUT: all 0.50/0.17, 2018 0.61/0.24, 2020 0.53/0.12, 2022 0.49/0.30; BFLY: all 0.13/0.13, 2018 0.45/0.23, 2020 −0.02/0.03, 2022 0.19/0.17

Conventions: annualisation: × √252; pnl: mark-to-model (β·VIX), as the backtest; returns: daily NAV returns from the $1M base (backtest_engine.compute_metrics); excess over T-bills, rf = 0. Source: data_store/backtest/inference/summary.json.

Cited on: Corrections

Real-settlement benchmarks · Cboe strategy indices

Daily correlation of excess returns, 2018-01-01 → 2025-03-24
SeriesPUTWPUTBXMBFLYCNDRVXTH
Portfolio−0.17−0.20−0.16−0.05−0.09−0.16
S1C contrarian−0.28−0.35−0.28−0.02−0.13−0.25
S3 short SPX straddle+0.13+0.18+0.14−0.03+0.03+0.13
S4 VRP−0.01−0.01−0.01−0.010.00−0.03
Always-short straddle+0.50+0.55+0.50+0.13+0.30+0.23

PUT, WPUT, BXM, BFLY and CNDR settle on real SPX option prices. A β·VIX mark that tracked real prices would co-move with them; the always-short straddle row is the backtest's own premium factor.

β that reprices the put-write index from β·VIX (backtest β 0.82)
IndexAll20182019202020212022202320242025 YTD
PUT0.8000.630.850.900.710.820.860.790.57
WPUT0.8000.770.830.780.750.890.750.790.82

Partial year. 2025 YTD covers 2025-01-01 → 2025-03-24: PUT 3 roll periods (expiries 2025-01-17 → 2025-03-21), WPUT 12 roll periods (expiries 2025-01-03 → 2025-03-21).

Per year, the β at which β·VIX reprices PUT and WPUT; the dashed line is the backtest's fixed β. A YTD year is partial (see the note under the table).

β implied by the put-write indices by year
Index20182019202020212022202320242025 YTD
PUT0.630.850.900.710.820.860.790.57
WPUT0.770.830.780.750.890.750.790.82

Forward test · pre-registered, executable prices

3 sessions registered, 2026-10-26 → 2026-10-28; each file carries the SHA-256 of the one before it and of its captured chain, and the chain checks out. Entries at the ask (long) or bid (short), marks at bid / ask / mid on later captured books.

Ledger of 2026-10-28, per $1M sleeve
SleeveTargetOpen straddleOpen P&L (exec)Realised (net)Opened / closed
S1C contrarianlong2026-11-27 7,750 · long−$4,080$01 / 0
S3 short SPX straddleflat——$00 / 0
S4 VRPflat——$00 / 0
S1 PDV (ref)short2026-11-25 7,710 · short+$2,600$01 / 0
S2 VIX TS (ref)flat——$00 / 0

Vol forecasts · 21-day QLIKE

21-day realised-vol forecasts, 2018-01-02 → 2025-03-24 (1,816 origins); lower QLIKE is better
ModelQLIKERankR² (vol)90% MCS
VIX20.45010.216in
GJR0.47520.278in
GARCH0.48230.294in
HAR0.50640.259in
VIX_MZ0.50650.252in
PDV0.66260.269in
EWMA0.73370.052out

PDV drives S1/S1C (today’s forecast). VIX² is risk-neutral, so it contains the variance premium. Mean realised vol 16.7%.

Model definitions
VIX2
(VIX/100)², risk-neutral (contains the variance premium)
GJR
GJR-GARCH(1,1,1), as garch
GARCH
GARCH(1,1) zero mean, Gaussian QML (arch), re-estimated every 21 sessions
HAR
HAR-RV on daily r², expanding OLS, purged (labels i ≤ t − 21)
VIX_MZ
walk-forward OLS of y² on [1, (VIX/100)²], purged
PDV
PDVLinear walk-forward (models.pdv.walk_forward_vol_forecast), σ̂², the S1/S1C input
EWMA
RiskMetrics λ = 0.94

Implied against realised vol · what the β·VIX mark leaves of the premium

2010-01-04 → 2026-10-28

Daily 2010-01-04 to 2026-10-28: the VIX close, RV21 over the 21 sessions to each date and over the 21 sessions after it (to 2026-09-29); the backtest window is shaded and the 46 S4 entries (22 short, 24 long) are marked at the VIX close of their entry session.

Calendar-year means (vol pts; each over the sessions that have the value: the forward one stops 21 sessions before the data); the CSV has every session
YearVIXRV21 trailingRV21 forwardVIX − RV21 forward
201022.5517.3516.52+6.02
201124.2020.3020.88+3.33
201217.8012.6512.57+5.23
201314.2311.0510.78+3.45
201414.1810.5611.08+3.10
201516.6714.4614.81+1.86
201615.8312.4111.27+4.55
201711.096.696.75+4.34
201816.6414.3315.93+0.71
201915.3912.7111.17+4.22
202029.2526.7727.09+2.16
202119.6612.4812.79+6.87
202225.6223.5823.74+1.89
202316.8713.1912.55+4.32
202415.6112.0112.43+3.18
202518.9615.9015.44+3.52
2026 (to 2026-10-28)18.1112.4912.82+5.45

4,210 sessions with a forward window; positive on 84.6%, mean +3.75 vol pts. Zooms with the chart above.

VIX − RV21 forward by calendar year (vol pts); the CSV has every session
YearMeanAbove zero (%)Sessions
2010+6.0285.3252
2011+3.3384.9252
2012+5.2399.2250
2013+3.4585.3252
2014+3.1077.8252
2015+1.8679.0252
2016+4.5586.5252
2017+4.34100.0251
2018+0.7161.0251
2019+4.2283.7252
2020+2.1676.7253
2021+6.8795.2252
2022+1.8964.9251
2023+4.32100.0250
2024+3.1881.0252
2025+3.5284.4250
2026 (to 2026-09-29)+5.4596.2186
β·VIX − RV21 forward, 2018-01-02 → 2025-03-24, 1,816 sessions (vol pts; variance-space: vol pts²)
βWhichMeanMedianAbove zero(β·VIX)² − RV²
1.00VIX itself+3.11+4.3279.2%+50.1
0.82the backtest's mark−0.46+1.1961.6%−97.7
0.80round reference−0.85+0.8658.2%−112.3
0.78newest chain's ATM / VIX (2026-10-28: 0.785)−1.25+0.4955.1%−126.6

Full sample, 2010-01-04 → 2026-09-29 (4,210 sessions with a forward window): VIX − RV21 forward averages +3.75 vol pts and is positive on 84.6% of sessions. Today, 2026-10-28: VIX 16.91 against RV21 trailing 9.69 (+7.22 vol pts); its forward value is not known until 21 sessions later.

Triangles on the chart: the 46 S4 entries of the trade log (22 short ▼, 24 long ▲), at the VIX close of the entry session. S4 enters on z_vrp; the marks show where its entries fell, not why they lost or won.

0.82·VIX − RV21 forward by calendar year backtest window, mean, vol pts

Calendar-year means of 0.82·VIX − RV21 forward, 2018-01-02 → 2025-03-24; 2025 YTD: 2025-01-02 → 2025-03-24, 55 sessions

Mean of 0.82·VIX − RV21 forward by calendar year (vol pts)
YearMeanSessionsFromTo
2018−2.282512018-01-022018-12-31
2019+1.452522019-01-022019-12-31
2020−3.112532020-01-022020-12-31
2021+3.332522021-01-042021-12-31
2022−2.722512022-01-032022-12-30
2023+1.282502023-01-032023-12-29
2024+0.372522024-01-022024-12-31
2025 YTD−7.33552025-01-022025-03-24

RV21 trailing: the root-mean-square SPX log return of the 21 sessions to the date, annualised (√252); RV21 forward: the same over the next 21 sessions, t+1 … t+21, the target of the forecast evaluation, so it ends 2026-09-29. VIX is a 30-calendar-day variance-swap rate that includes the skew premium, so VIX − RV overstates what an at-the-money straddle earns, and the backtest marks its straddles at 0.82·VIX for that reason. The 21-session windows overlap, so the shares and means are not counts of independent events, and no t-statistic is given. This is a description, not P&L: it does not explain the backtest’s result. The backtest window is shaded.

β = ATM vol / VIX · the chains behind it

M7 β drift · OK
ChainSessionRule regimeATM 30d / VIXUse
DB chain2026-03-24R20.824estimation
DB chain2026-03-27R20.841estimation
DB chain2026-05-29R10.813estimation
DB chain2026-06-18R10.814estimation
DB chain2026-10-16R20.702later, out of sample
DB chain2026-10-26R10.760later, out of sample
DB chain2026-10-27R10.777later, out of sample
DB chain2026-10-28R10.785later, out of sample
live capture2026-10-12 04:39 ET—0.797estimation

β = 0.82 = mean of 4 DB chains and 1 live capture (0.80–0.84); the first later chain, 2026-10-16, gives 0.70 — the mean over all 9 chains, 0.79, is not in the β grid. 30-day ATM-forward implied vol (Black-76 on put–call-parity forwards) over the same-time VIX; no ATM-IV history exists before 2026, so β is assumed constant over 2018–2025.

Cited on: Surface

β sensitivity · the full backtest re-run at each β

βPortfolioSharpeS1C contrarianS3 short SPX straddleS4 VRPS1 PDV (ref)
1.00−$183K−0.91−$643K+$397K−$302K+$2.5M
0.90−$219K−1.04−$570K+$216K−$302K+$549K
0.85−$222K−1.00−$500K+$112K−$280K−$69K
0.82 ●−$222K−0.99−$454K+$61K−$274K−$307K
0.80−$211K−0.88−$396K+$26K−$264K−$444K
0.78−$206K−0.84−$358K−$9K−$250K−$555K

● this page's run (β = 0.82). The portfolio is negative at every β in the grid; S1's sign flips between 0.85 and 0.90.

Cited on: Corrections

Why the edge disappeared

Priced at β = 0.82 × VIX, S1 is −$307K (58% win), and its sign flips between β = 0.85 and 0.90. The contrarian inversion S1C is −$454K, so neither direction of the PDV-spread trade makes money. The portfolio is −22.2% cumulative (Sharpe −0.99, max drawdown −22.2%); S3 (+$61K, 49% win) is the only positive sleeve, positive for β ≥ 0.80 in the sensitivity grid, negative at 0.78; like every sleeve’s, its P&L is an excess return over T-bills (the hurdle is 0). Each sleeve’s sign at each β is in the β grid; what the β·VIX mark leaves of the premium, against realised vol, is in implied against realised.

Sleeve notes, stress windows and the C18 inversion

S3 short SPX straddle (index leg of a dispersion trade; no single-name leg) fires only at VIX/VVIX extremes: 39 trades in 2018–2025 (26 entries plus 13 rolls of a position held past its straddle's expiry), 49% win rate. Since C22 it is priced as the index leg of the dispersion trade (a short SPX straddle; there is no single-stock options data), and its entry timing does not beat 3,550 exposure-matched circular shifts at the 5% level (p = 0.078; Holm over 6 sleeves 0.47; 2,000 trade shuffles p = 0.057).

S1 PDV (ref), the PDV short-VRP reference strategy: 69 of 69 trades are short straddles sold in R1; worst trade −$183K (2018-01-09 → 2018-02-07). Selling straddles at the VIX books the skew premium as profit.

S1C contrarian flipped S1's direction on the premise that S1 lost both ways; C18 showed that premise was the bug. It stays a sleeve because the portfolio's composition is held fixed across correction rounds so they remain comparable. S4 VRP enters on z_vrp declining from a peak; its P&L on 2018–2025 is −$274K.

Stress windows, each measured from the close before it opens: COVID 2020 (2020-02-19 → 2020-04-30) −0.2%; FedHikes 2022 (2022-01-01 → 2022-12-31) +4.1%; Tariffs 2025 (2025-01-01 → 2025-03-24) −1.1%. The backtest ends 2025-03-24, so the April 2025 tariff shock is not in it, and this is no evidence of resilience to it.

The C16–C23 corrections, each with its root cause, fix, tests and effect, are on the Corrections page.

Limitations

  • Option prices. All P&L is Black–Scholes on β·VIX; the database's 8 SPX chains (86,134 rows) are from 2026-03-24 to 2026-10-28.
  • Breadth. S3 enters 26 times in 2018–2025.
  • Execution. Costs are a flat assumption; no quote-level bid–ask in the window.
Historical change log, steps 1–8
StepChangeBeforeAfter
1Disable VIX options leg — JOINT_W3 = 0.0 (was 0.2). Attributed at the time to the Heston CIR density; C22 traced the 37.14 vol pts to a broken VIX put pricer, spot-VIX vegas and a stale chain, so it was not evidence about the model.VIX-options leg in the objective with a broken pricerSPX + VIX index objective; VIX-options leg off (too few sessions of quotes).
2Vega-weighted anchor selection — Select 9 highest-BS-vega options per expiry (was log-uniform grid). Moneyness lo 0.70 (was 0.75).Log-uniform includes low-information deep OTM optionsNear-ATM anchors only. C22 reverted it: the top-vega strikes were adjacent ATM calls and the fit never saw the put wing; anchors are now a forward-moneyness z-grid with >= 3 wing puts per expiry.
3SVI smoothing — never wired in; removed (C22) — SVI/SSVI helpers were written, but only tests called them: the calibrator always fitted the quotes directly. C22 removed them.Claimed: Heston calibrated to an SSVI-smoothed surfaceCalibrates to two-sided parity-forward Black-76 IVs; no smoothing step.
4Per-date T-bill rate — ^IRX 3M T-bill from the DB replaces the fixed r = 0.045 in the backtest.Fixed r = 0.045 throughout 2018–2025Per-date rate (annual mean, cc: 2018: 1.95%, 2023: 5.15%, 2025 YTD: 4.28%).
5Adaptive VVIX threshold — Rolling 252-day 80th percentile of VVIX as R2 gate (was fixed 100).R2 on 48.1% of backtest sessions with the fixed 100-point gateR2 on 23.5% of backtest sessions.
6Isotonic calibration + step sizing — CalibratedClassifierCV(FrozenEstimator(XGB), isotonic). S1S step: full/half/flat at P(R2) 0.4/0.6.Raw XGB probabilities (overconfident). Linear 1−p scaling.Calibrated probabilities. Cleaner 3-level position sizing.
7Portfolio Kelly netting — Rolling 60-day pairwise P&L corr; mult = sqrt(2/(1+r_ij)). C16: multipliers shifted 1 day, applied to position size in a second simulation pass (ex-ante; contracts & costs reflect real size).No correlation netting; each signal sizes off full NAV ÷ 4Ex-ante diversification sizing; no same-day information in sizing.
8Monthly Heston recalibration — REMOVED (C17) — The C13 monthly-recalibration loop was dead code: no historical options data exists before the 2026 snapshots, so every monthly calibration fell back to static defaults — and the resulting parameters were never consumed by any P&L path. Removed in C17.ASSUMPTIONS claimed time-varying Heston params in the backtestHonest: backtest P&L is BS on VIX-TS ATM vol; the calibration stack serves C6 Greeks / C7 hedge sim, not C10 P&L.

Research prototypes · not used for trading

ML regime classifier · research only

M11 classifier skill · BREACH

research only Next-session forecast from the features of 2026-10-28: R1 at 89.1%. 74.9% out-of-sample, it loses to the 87.0% “predict-yesterday” baseline, so it is not used for trading.

P(R0 long γ)
0.0%
P(R1 short γ)
89.1%
P(R2 vomma)
10.9%
Out-of-sample accuracy:
74.9%
Persistence baseline:
87.0%
Features
5 (vvix excluded — C16); top fear_premium (37%)
Why it is not used

Accuracy is the shipped model's own evaluation on 2020-01-02 → 2025-12-31 (1,508 sessions, adaptive-gate rule labels); its spread feature is the rv₂₀ proxy it was trained on. Regimes are persistent and observable on the day, so “predict yesterday's regime” is a strong no-skill baseline; C17 demoted the classifier when it lost to it and C22's retrain did not change that. The backtest trades the lagged rule labels; a Gaussian HMM in regime_classifier.py is research-only as well.

Rule-label distribution

2010 – 2026
R0 long gamma
10.3%
428 of 4,169 sessions
R1 short gamma
67.7%
2,823 of 4,169 sessions
R2 vomma active
22.0%
918 of 4,169 sessions

Share of sessions under each rule label since 2010; the adaptive R2 gate is the only gate in every path (C22). The rule label, not the classifier, is what the backtest trades.

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.