5-alpha forward test report
Generated 2026-05-16T07:05:39+00:00 UTC · IS = Tardis backfill, OOS = live merged (post 2026-05-09).
1. Data inventory
| item | value |
| IS rows (asset-hour) | 11,621 |
| IS date range | 2026-01-08 23:00:00 → 2026-05-09 23:00:00 |
| IS assets | BTC, ETH, SOL, XRP |
| OOS rows (asset-hour) | 480 |
| OOS date range | 2026-05-11 00:00:00+00:00 → 2026-05-15 23:00:00+00:00 |
| OOS assets | BTC, ETH, SOL, XRP |
| forward cutoff (UTC) | 2026-05-09T23:59:59Z |
| z-score window (hours) | 168 |
| notional per position | $1000 |
| horizon | 1 hour log-return |
| α-signs (flipped) | put_call_ratio, options_skew_30d, gex_negative |
2. α-sign convention
| alpha | sign | convention |
| volume_surprise | +1 | as-is |
| put_call_ratio | -1 | flipped |
| options_skew_30d | -1 | flipped |
| options_25delta_skew_30d | +1 | as-is |
| gex_negative | -1 | flipped |
Signs were chosen from the Tardis IS window (negative-Sharpe alphas flipped),
then validated on the live OOS window — see §6 / §7 for per-window statistics.
3. Alpha coverage
4. Per-alpha equity curves (full window)
5. Forward window zoom (post 2026-05-09)
6. Per-alpha raw signal time series
7. Per-asset raw signal time series
Same raw signals as §6, split by underlying. Each small panel has its own y-axis, so this view separates real signal magnitude from overlay/axis compression.
8. Per-alpha statistics
volume_surprise
| window | hours | cum P&L | ann P&L |
Sharpe | Sortino | Calmar | peak DD | turnover |
| all | 2891 | +18.64 | +56.47 | +0.092 | +0.100 | +0.141 | -400.97 | 290.1 |
| IS | 2795 | +99.15 | +310.77 | +0.500 | +0.544 | +0.960 | -323.78 | 265.5 |
| OOS | 96 | -80.52 | -7347.19 | -19.287 | -19.460 | -69.897 | -105.11 | 23.1 |
put_call_ratio
| window | hours | cum P&L | ann P&L |
Sharpe | Sortino | Calmar | peak DD | turnover |
| all | 2937 | +65.88 | +196.50 | +0.397 | +0.435 | +0.591 | -332.28 | 481.1 |
| IS | 2818 | +58.56 | +182.03 | +0.364 | +0.402 | +0.548 | -332.28 | 451.4 |
| OOS | 119 | +7.32 | +539.14 | +1.420 | +1.305 | +9.822 | -54.89 | 28.7 |
options_skew_30d
| window | hours | cum P&L | ann P&L |
Sharpe | Sortino | Calmar | peak DD | turnover |
| all | 2941 | +623.12 | +1856.02 | +4.656 | +5.607 | +13.850 | -134.01 | 254.9 |
| IS | 2822 | +595.74 | +1849.29 | +4.582 | +5.504 | +13.800 | -134.01 | 244.1 |
| OOS | 119 | +27.38 | +2015.66 | +7.965 | +12.600 | +91.909 | -21.93 | 9.1 |
options_25delta_skew_30d
| window | hours | cum P&L | ann P&L |
Sharpe | Sortino | Calmar | peak DD | turnover |
| all | 2941 | +366.63 | +1092.03 | +3.060 | +3.731 | +5.758 | -189.66 | 679.6 |
| IS | 2822 | +357.25 | +1108.96 | +3.064 | +3.740 | +5.847 | -189.66 | 620.8 |
| OOS | 119 | +9.38 | +690.68 | +3.375 | +4.283 | +30.528 | -22.62 | 58.4 |
gex_negative
| window | hours | cum P&L | ann P&L |
Sharpe | Sortino | Calmar | peak DD | turnover |
| all | 2941 | +999.05 | +2975.74 | +6.814 | +9.912 | +15.415 | -193.05 | 723.2 |
| IS | 2822 | +952.67 | +2957.26 | +6.785 | +9.828 | +15.319 | -193.05 | 678.0 |
| OOS | 119 | +46.38 | +3414.08 | +7.473 | +12.232 | +82.070 | -41.60 | 43.3 |
9. Combined portfolio statistics
Combined (equal-weighted across 5 alphas)
| window | hours | cum P&L | ann P&L |
Sharpe | Sortino | Calmar | peak DD | turnover |
| all | 3024 | +364.16 | +1054.91 | +3.757 | +4.514 | +6.588 | -160.12 | 553.6 |
| IS | 2905 | +368.06 | +1109.88 | +3.888 | +4.688 | +6.932 | -160.12 | 529.0 |
| OOS | 119 | -3.90 | -287.04 | -2.438 | -2.589 | -14.934 | -19.22 | 23.8 |
Combined (Sharpe-weighted, trailing 720h)
| window | hours | cum P&L | ann P&L |
Sharpe | Sortino | Calmar | peak DD | turnover |
| all | 3024 | +537.95 | +1558.33 | +5.318 | +6.172 | +16.664 | -93.51 | 442.2 |
| IS | 2905 | +519.30 | +1565.94 | +5.269 | +6.111 | +16.745 | -93.51 | 422.2 |
| OOS | 119 | +18.65 | +1372.69 | +8.491 | +12.492 | +70.375 | -19.51 | 19.3 |
Sharpe-weighted portfolio composition
Most recent weight snapshot
As of 2026-05-15 23:00:00 UTC (most recent hour with a full trailing window).
| alpha | trailing Sharpe (lag 1h) | weight |
| volume_surprise | -0.052 | 0.0% |
| put_call_ratio | +0.060 | 27.5% |
| options_skew_30d | +0.047 | 21.4% |
| options_25delta_skew_30d | +0.023 | 10.4% |
| gex_negative | +0.088 | 40.6% |
10. Forward window hourly tail
| snapshot_hour | pnl | equity | drawdown |
|---|
| 2026-05-14 07:00:00 | +0.0469 | +373.9120 | -8.3724 |
| 2026-05-14 08:00:00 | +0.2456 | +374.1576 | -8.1268 |
| 2026-05-14 09:00:00 | +0.1283 | +374.2858 | -7.9985 |
| 2026-05-14 10:00:00 | -0.4236 | +373.8622 | -8.4222 |
| 2026-05-14 11:00:00 | -0.6124 | +373.2498 | -9.0346 |
| 2026-05-14 12:00:00 | -0.7586 | +372.4912 | -9.7932 |
| 2026-05-14 13:00:00 | -0.6251 | +371.8661 | -10.4183 |
| 2026-05-14 14:00:00 | +0.7748 | +372.6409 | -9.6435 |
| 2026-05-14 15:00:00 | +0.6743 | +373.3152 | -8.9692 |
| 2026-05-14 16:00:00 | +0.5081 | +373.8233 | -8.4611 |
| 2026-05-14 17:00:00 | +0.7266 | +374.5499 | -7.7345 |
| 2026-05-14 18:00:00 | -0.9534 | +373.5965 | -8.6879 |
| 2026-05-14 19:00:00 | -2.4075 | +371.1891 | -11.0953 |
| 2026-05-14 20:00:00 | -0.7069 | +370.4822 | -11.8022 |
| 2026-05-14 21:00:00 | +0.1554 | +370.6375 | -11.6469 |
| 2026-05-14 22:00:00 | -1.4706 | +369.1670 | -13.1174 |
| 2026-05-14 23:00:00 | +0.1956 | +369.3626 | -12.9218 |
| 2026-05-15 00:00:00 | -0.0038 | +369.3588 | -12.9256 |
| 2026-05-15 01:00:00 | -1.5247 | +367.8341 | -14.4503 |
| 2026-05-15 02:00:00 | +0.9337 | +368.7678 | -13.5166 |
| 2026-05-15 03:00:00 | -0.7456 | +368.0222 | -14.2622 |
| 2026-05-15 04:00:00 | -3.9059 | +364.1163 | -18.1681 |
| 2026-05-15 05:00:00 | +1.3440 | +365.4603 | -16.8241 |
| 2026-05-15 06:00:00 | +1.9026 | +367.3629 | -14.9215 |
| 2026-05-15 07:00:00 | -0.1981 | +367.1648 | -15.1195 |
| 2026-05-15 08:00:00 | -0.5389 | +366.6259 | -15.6585 |
| 2026-05-15 09:00:00 | +0.1545 | +366.7804 | -15.5040 |
| 2026-05-15 10:00:00 | +0.3179 | +367.0983 | -15.1861 |
| 2026-05-15 11:00:00 | -1.0168 | +366.0815 | -16.2029 |
| 2026-05-15 12:00:00 | -1.2523 | +364.8292 | -17.4552 |
| 2026-05-15 13:00:00 | -1.6396 | +363.1895 | -19.0949 |
| 2026-05-15 14:00:00 | -0.1261 | +363.0634 | -19.2210 |
| 2026-05-15 15:00:00 | +0.8519 | +363.9153 | -18.3691 |
| 2026-05-15 16:00:00 | +0.4162 | +364.3315 | -17.9529 |
| 2026-05-15 17:00:00 | +0.2219 | +364.5534 | -17.7309 |
| 2026-05-15 18:00:00 | +0.0091 | +364.5625 | -17.7219 |
| 2026-05-15 19:00:00 | -0.4235 | +364.1390 | -18.1454 |
| 2026-05-15 20:00:00 | +0.0273 | +364.1662 | -18.1182 |
| 2026-05-15 21:00:00 | +0.0200 | +364.1862 | -18.0982 |
| 2026-05-15 22:00:00 | -0.0258 | +364.1604 | -18.1240 |
11. Caveats / known limitations
- α-signs are selected from the Tardis IS Sharpe (negative Sharpe → flip). The OOS window is then used to validate that the chosen sign holds out-of-sample. This is mild IS selection — the bias is bounded because only the sign (one bit per alpha), not magnitude or thresholding, is fitted to IS.
- α1 (volume_surprise) is now defined consistently as 24h premium-volume surprise: Tardis IS trades are rolled into trailing 24h premium USD notional, while live OOS venue-native 24h fields are normalized before aggregation (notably Bybit underlying notional → premium). This avoids both the old OOS-only
vol(t) - vol(t-24h) artifact and venue-unit std jumps in ETH/XRP. α2 uses the same normalized 24h call/put premium volumes. - Deribit's REST endpoint
get_book_summary_by_currency does not ship delta/gamma, so the live AWS scraper writes null there. Greeks are filled in downstream via Black-Scholes-Merton (r = q = 0) from (mark_iv, strike, ttm, underlying_px), so α4 / α5 see Deribit on OOS just as the Tardis IS data does. Cross-check vs Tardis-reported Greeks: max delta error 6e-5, gamma matches to ~rounding precision. - Tardis ships
mark_iv as percent for Deribit (e.g. 42.84) and as fraction for Binance / OKX / Bybit. The Tardis features module now divides Deribit by 100 before the α3 / α4 aggregation to match the live scraper's normalization — without this, the IS frame would carry a venue-mixed unit and OOS the wrong scale, producing a phantom z-score jump at the IS/OOS boundary that previously inflated α3's OOS Sharpe to ~8. - GCS-side merged parquets are synced locally but excluded from alpha computation — they are independent scrapes of the same market state as AWS (row counts within ±0.001%, snapshot_ts offset by <1s), so including both doubles polars working set without adding signal. The GCS mirror is retained for redundancy/failover only.
- Per the article spec, α3 / α4 (skew alphas) are BTC/ETH-only. SOL & XRP appear only in α1 / α2 / α5.
- Equity uses fixed $1000 notional per (unit position × hour); no compounding, no transaction cost. Turnover column is the absolute Δposition sum over the window.
- 168-hour z-score warm-up means OOS observations within the first 84h of the IS series are dropped before equity accumulates — this is unavoidable absent a pre-existing prior history.
- Sharpe-weighted portfolio uses a trailing 720h (30d) Sharpe per alpha, lagged 1h (no look-ahead), with weights = max(0, Sharpe) normalized to sum=1. Negative-Sharpe alphas receive zero weight in real-time — this is a stricter filter than the static sign-flip in §2. min_samples = 168h before any weight is emitted.