5-alpha forward test report
Generated 2026-11-09T07:15:19+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) | 17,960 |
| OOS date range | 2026-05-06 05:00:00+00:00 → 2026-11-09 06: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 | 7170 | +75.23 | +91.91 | +0.149 | +0.173 | +0.109 | -841.91 | 748.6 |
| IS | 2704 | +114.12 | +369.70 | +0.587 | +0.638 | +1.142 | -323.78 | 253.0 |
| OOS | 4466 | -38.89 | -76.28 | -0.125 | -0.153 | -0.137 | -558.16 | 493.4 |
put_call_ratio
| window | hours | cum P&L | ann P&L |
Sharpe | Sortino | Calmar | peak DD | turnover |
| all | 7216 | -2342.15 | -2843.30 | -5.554 | -5.441 | -1.174 | -2422.82 | 1425.4 |
| IS | 2727 | +16.34 | +52.50 | +0.104 | +0.114 | +0.158 | -332.28 | 432.8 |
| OOS | 4489 | -2358.49 | -4602.45 | -8.936 | -8.288 | -1.900 | -2422.82 | 991.4 |
options_skew_30d
| window | hours | cum P&L | ann P&L |
Sharpe | Sortino | Calmar | peak DD | turnover |
| all | 7220 | +1451.71 | +1761.36 | +5.094 | +6.476 | +13.144 | -134.01 | 699.0 |
| IS | 2731 | +618.98 | +1985.46 | +4.857 | +5.833 | +14.816 | -134.01 | 239.2 |
| OOS | 4489 | +832.73 | +1625.02 | +5.398 | +7.399 | +20.767 | -78.25 | 458.4 |
options_25delta_skew_30d
| window | hours | cum P&L | ann P&L |
Sharpe | Sortino | Calmar | peak DD | turnover |
| all | 7220 | +874.48 | +1061.01 | +3.422 | +4.362 | +5.594 | -189.66 | 1777.7 |
| IS | 2731 | +370.02 | +1186.88 | +3.242 | +3.966 | +6.258 | -189.66 | 600.4 |
| OOS | 4489 | +504.46 | +984.43 | +3.641 | +4.936 | +12.178 | -80.84 | 1176.6 |
gex_negative
| window | hours | cum P&L | ann P&L |
Sharpe | Sortino | Calmar | peak DD | turnover |
| all | 7220 | +4307.77 | +5226.60 | +10.437 | +16.713 | +27.074 | -193.05 | 1935.5 |
| IS | 2731 | +943.68 | +3026.97 | +6.910 | +10.101 | +15.680 | -193.05 | 656.5 |
| OOS | 4489 | +3364.09 | +6564.81 | +12.274 | +20.470 | +92.935 | -70.64 | 1277.5 |
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 | 7303 | +905.73 | +1086.43 | +4.491 | +5.613 | +6.785 | -160.12 | 1058.9 |
| IS | 2814 | +358.36 | +1115.58 | +3.872 | +4.675 | +6.967 | -160.12 | 514.6 |
| OOS | 4489 | +547.37 | +1068.16 | +5.140 | +6.767 | +16.468 | -64.86 | 542.7 |
Combined (Sharpe-weighted, trailing 720h)
| window | hours | cum P&L | ann P&L |
Sharpe | Sortino | Calmar | peak DD | turnover |
| all | 7303 | +2717.48 | +3259.64 | +9.029 | +12.822 | +34.857 | -93.51 | 1229.9 |
| IS | 2814 | +516.77 | +1608.72 | +5.345 | +6.203 | +17.203 | -93.51 | 410.2 |
| OOS | 4489 | +2200.71 | +4294.55 | +10.911 | +17.111 | +65.723 | -65.34 | 818.9 |
Sharpe-weighted portfolio composition
Most recent weight snapshot
As of 2026-11-09 06:00:00 UTC (most recent hour with a full trailing window).
| alpha | trailing Sharpe (lag 1h) | weight |
| volume_surprise | -0.046 | 0.0% |
| put_call_ratio | -0.071 | 0.0% |
| options_skew_30d | +0.045 | 24.9% |
| options_25delta_skew_30d | -0.015 | 0.0% |
| gex_negative | +0.134 | 75.1% |
10. Forward window hourly tail
| snapshot_hour | pnl | equity | drawdown |
|---|
| 2026-11-07 14:00:00 | +1.3310 | +902.2106 | -43.6814 |
| 2026-11-07 15:00:00 | -0.5616 | +901.6491 | -44.2430 |
| 2026-11-07 16:00:00 | -0.7144 | +900.9347 | -44.9574 |
| 2026-11-07 17:00:00 | -0.3297 | +900.6049 | -45.2871 |
| 2026-11-07 18:00:00 | +0.1599 | +900.7648 | -45.1272 |
| 2026-11-07 19:00:00 | +0.8344 | +901.5992 | -44.2929 |
| 2026-11-07 20:00:00 | +2.7590 | +904.3581 | -41.5339 |
| 2026-11-07 21:00:00 | -2.1129 | +902.2452 | -43.6469 |
| 2026-11-07 22:00:00 | -0.1814 | +902.0638 | -43.8282 |
| 2026-11-07 23:00:00 | -0.2056 | +901.8582 | -44.0338 |
| 2026-11-08 00:00:00 | +0.1498 | +902.0080 | -43.8840 |
| 2026-11-08 01:00:00 | +0.3890 | +902.3970 | -43.4951 |
| 2026-11-08 02:00:00 | +0.0339 | +902.4308 | -43.4612 |
| 2026-11-08 03:00:00 | -0.1130 | +902.3178 | -43.5742 |
| 2026-11-08 04:00:00 | -0.2887 | +902.0291 | -43.8629 |
| 2026-11-08 05:00:00 | -0.3048 | +901.7244 | -44.1677 |
| 2026-11-08 06:00:00 | +0.4208 | +902.1452 | -43.7469 |
| 2026-11-08 07:00:00 | +0.3025 | +902.4477 | -43.4443 |
| 2026-11-08 08:00:00 | -0.2477 | +902.2000 | -43.6921 |
| 2026-11-08 09:00:00 | +0.0606 | +902.2606 | -43.6314 |
| 2026-11-08 10:00:00 | -0.1162 | +902.1444 | -43.7476 |
| 2026-11-08 11:00:00 | +0.0001 | +902.1445 | -43.7475 |
| 2026-11-08 12:00:00 | +0.2308 | +902.3753 | -43.5167 |
| 2026-11-08 13:00:00 | +0.0809 | +902.4562 | -43.4358 |
| 2026-11-08 14:00:00 | +0.2200 | +902.6763 | -43.2158 |
| 2026-11-08 15:00:00 | +0.0322 | +902.7084 | -43.1836 |
| 2026-11-08 16:00:00 | -0.4607 | +902.2477 | -43.6443 |
| 2026-11-08 17:00:00 | -0.1509 | +902.0968 | -43.7952 |
| 2026-11-08 18:00:00 | +0.1259 | +902.2228 | -43.6693 |
| 2026-11-08 19:00:00 | +0.0092 | +902.2319 | -43.6601 |
| 2026-11-08 20:00:00 | -0.1108 | +902.1212 | -43.7709 |
| 2026-11-08 21:00:00 | +0.5533 | +902.6744 | -43.2176 |
| 2026-11-08 22:00:00 | +1.4781 | +904.1525 | -41.7395 |
| 2026-11-08 23:00:00 | -0.4296 | +903.7229 | -42.1691 |
| 2026-11-09 00:00:00 | +1.0557 | +904.7786 | -41.1135 |
| 2026-11-09 01:00:00 | +0.5709 | +905.3495 | -40.5426 |
| 2026-11-09 02:00:00 | -0.0240 | +905.3255 | -40.5665 |
| 2026-11-09 03:00:00 | -0.3729 | +904.9526 | -40.9394 |
| 2026-11-09 04:00:00 | +0.1190 | +905.0716 | -40.8204 |
| 2026-11-09 05:00:00 | +0.6621 | +905.7337 | -40.1583 |
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.