5-alpha forward test report
Generated 2026-07-14T07:06:13+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-07-09 00:00:00+00:00 → 2026-07-13 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 | +402.05 | +1218.25 | +1.618 | +2.163 | +3.763 | -323.78 | 288.2 |
| IS | 2795 | +360.81 | +1130.83 | +1.483 | +1.980 | +3.493 | -323.78 | 265.5 |
| OOS | 96 | +41.24 | +3763.39 | +10.412 | +16.617 | +199.373 | -18.88 | 20.3 |
put_call_ratio
| window | hours | cum P&L | ann P&L |
Sharpe | Sortino | Calmar | peak DD | turnover |
| all | 2937 | -10.33 | -30.81 | -0.061 | -0.066 | -0.093 | -332.28 | 485.0 |
| IS | 2818 | -4.77 | -14.82 | -0.029 | -0.031 | -0.045 | -332.28 | 451.4 |
| OOS | 119 | -5.56 | -409.48 | -1.462 | -1.670 | -17.997 | -22.75 | 32.0 |
options_skew_30d
| window | hours | cum P&L | ann P&L |
Sharpe | Sortino | Calmar | peak DD | turnover |
| all | 2941 | +749.45 | +2232.28 | +4.472 | +6.736 | +16.658 | -134.01 | 249.1 |
| IS | 2822 | +778.62 | +2416.98 | +4.773 | +7.201 | +18.036 | -134.01 | 244.1 |
| OOS | 119 | -29.17 | -2147.62 | -7.781 | -9.518 | -36.546 | -58.77 | 3.6 |
options_25delta_skew_30d
| window | hours | cum P&L | ann P&L |
Sharpe | Sortino | Calmar | peak DD | turnover |
| all | 2941 | +296.75 | +883.88 | +2.440 | +2.915 | +4.660 | -189.66 | 646.9 |
| IS | 2822 | +320.70 | +995.52 | +2.711 | +3.233 | +5.249 | -189.66 | 620.8 |
| OOS | 119 | -23.96 | -1763.53 | -8.315 | -9.907 | -39.737 | -44.38 | 24.3 |
gex_negative
| window | hours | cum P&L | ann P&L |
Sharpe | Sortino | Calmar | peak DD | turnover |
| all | 2941 | +931.04 | +2773.18 | +6.240 | +8.227 | +14.365 | -193.05 | 716.7 |
| IS | 2822 | +884.37 | +2745.23 | +6.080 | +8.013 | +14.221 | -193.05 | 678.0 |
| OOS | 119 | +46.68 | +3435.91 | +15.975 | +31.051 | +435.470 | -7.89 | 36.8 |
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 | +405.45 | +1174.52 | +4.135 | +5.056 | +7.335 | -160.12 | 546.3 |
| IS | 2905 | +388.60 | +1171.81 | +4.067 | +4.950 | +7.318 | -160.12 | 529.0 |
| OOS | 119 | +16.85 | +1240.56 | +8.046 | +14.431 | +74.848 | -16.57 | 16.2 |
Combined (Sharpe-weighted, trailing 720h)
| window | hours | cum P&L | ann P&L |
Sharpe | Sortino | Calmar | peak DD | turnover |
| all | 3024 | +534.80 | +1549.23 | +5.297 | +6.165 | +16.567 | -93.51 | 435.9 |
| IS | 2905 | +524.79 | +1582.49 | +5.322 | +6.175 | +16.922 | -93.51 | 422.2 |
| OOS | 119 | +10.01 | +737.17 | +5.982 | +9.703 | +53.113 | -13.88 | 12.7 |
Sharpe-weighted portfolio composition
Most recent weight snapshot
As of 2026-07-13 23:00:00 UTC (most recent hour with a full trailing window).
| alpha | trailing Sharpe (lag 1h) | weight |
| volume_surprise | +0.041 | 25.8% |
| put_call_ratio | +0.024 | 14.7% |
| options_skew_30d | +0.040 | 24.7% |
| options_25delta_skew_30d | -0.022 | 0.0% |
| gex_negative | +0.056 | 34.7% |
10. Forward window hourly tail
| snapshot_hour | pnl | equity | drawdown |
|---|
| 2026-07-12 07:00:00 | -1.1747 | +390.9762 | -2.6938 |
| 2026-07-12 08:00:00 | -0.1676 | +390.8086 | -2.8615 |
| 2026-07-12 09:00:00 | -0.4971 | +390.3115 | -3.3586 |
| 2026-07-12 10:00:00 | -1.0633 | +389.2482 | -4.4219 |
| 2026-07-12 11:00:00 | -1.5192 | +387.7290 | -5.9411 |
| 2026-07-12 12:00:00 | -0.8400 | +386.8890 | -6.7811 |
| 2026-07-12 13:00:00 | +0.9650 | +387.8540 | -5.8161 |
| 2026-07-12 14:00:00 | -2.7416 | +385.1123 | -8.5577 |
| 2026-07-12 15:00:00 | -0.0357 | +385.0766 | -8.5934 |
| 2026-07-12 16:00:00 | +0.4932 | +385.5699 | -8.1002 |
| 2026-07-12 17:00:00 | +0.5476 | +386.1174 | -7.5526 |
| 2026-07-12 18:00:00 | -0.8748 | +385.2427 | -8.4274 |
| 2026-07-12 19:00:00 | +0.3236 | +385.5663 | -8.1037 |
| 2026-07-12 20:00:00 | +1.9660 | +387.5323 | -6.1377 |
| 2026-07-12 21:00:00 | +5.3406 | +392.8730 | -0.7971 |
| 2026-07-12 22:00:00 | -0.4968 | +392.3762 | -1.2939 |
| 2026-07-12 23:00:00 | -4.6957 | +387.6805 | -5.9896 |
| 2026-07-13 00:00:00 | +3.1194 | +390.7999 | -2.8702 |
| 2026-07-13 01:00:00 | +3.2547 | +394.0546 | +0.0000 |
| 2026-07-13 02:00:00 | +3.5039 | +397.5585 | +0.0000 |
| 2026-07-13 03:00:00 | +0.6072 | +398.1657 | +0.0000 |
| 2026-07-13 04:00:00 | -0.6785 | +397.4872 | -0.6785 |
| 2026-07-13 05:00:00 | -0.0759 | +397.4112 | -0.7545 |
| 2026-07-13 06:00:00 | -1.1808 | +396.2305 | -1.9352 |
| 2026-07-13 07:00:00 | -0.1080 | +396.1224 | -2.0433 |
| 2026-07-13 08:00:00 | -0.4273 | +395.6951 | -2.4706 |
| 2026-07-13 09:00:00 | +1.8139 | +397.5090 | -0.6567 |
| 2026-07-13 10:00:00 | -0.6333 | +396.8757 | -1.2900 |
| 2026-07-13 11:00:00 | +2.3501 | +399.2258 | +0.0000 |
| 2026-07-13 12:00:00 | +2.6934 | +401.9192 | +0.0000 |
| 2026-07-13 13:00:00 | -0.8018 | +401.1174 | -0.8018 |
| 2026-07-13 14:00:00 | -0.5027 | +400.6147 | -1.3045 |
| 2026-07-13 15:00:00 | +1.9729 | +402.5877 | +0.0000 |
| 2026-07-13 16:00:00 | +0.7856 | +403.3733 | +0.0000 |
| 2026-07-13 17:00:00 | +0.1442 | +403.5175 | +0.0000 |
| 2026-07-13 18:00:00 | +0.5165 | +404.0339 | +0.0000 |
| 2026-07-13 19:00:00 | -0.1306 | +403.9033 | -0.1306 |
| 2026-07-13 20:00:00 | +0.8467 | +404.7500 | +0.0000 |
| 2026-07-13 21:00:00 | +0.2764 | +405.0264 | +0.0000 |
| 2026-07-13 22:00:00 | +0.4236 | +405.4500 | +0.0000 |
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.