Pre-registered rule from the original study (validation/depth_filter_gate60.py): skip gate60 long if z24 > +0.5, where z24 = trailing 24h mean depth-imbalance z-scored vs trailing 30-day window. Five rolling-origin cuts; the OOS verdict at each cut uses the same frozen rule (no threshold re-tuning between cuts).
Data source: signals.crypto_edges.load_binance_depth() (Binance ETH bookDepth cache, 1340d; identical distribution to OKX per reports/depth_filter_binance_warmup.md). The OKX production feed is warming; this validation study uses the validated Binance source.
Cutoffs (cut date / IS span / OOS span):
- 2024-01-01 / IS 2023-01-01..2024-01-01 / OOS 2024-01-01..2024-07-01
- 2024-07-01 / IS 2023-07-01..2024-07-01 / OOS 2024-07-01..2025-01-01
- 2025-01-01 / IS 2024-01-01..2025-01-01 / OOS 2025-01-01..2025-07-01
- 2025-07-01 / IS 2024-07-01..2025-07-01 / OOS 2025-07-01..2026-01-01
- 2026-01-01 / IS 2025-01-01..2026-01-01 / OOS 2026-01-01..2026-07-01
Adoptable: depth-filter OOS Sharpe lift >= 0.1 AND bootstrap p < 0.05 in at least 3/5 OOS cuts.
Per-cut results
| Cutoff | OOS days | long days | kept days | base Sharpe | gated Sharpe | lift | p | OOS pass? |
|---|---|---|---|---|---|---|---|---|
| 2024-01-01 | 182 | 135 | 104 | +1.30 | +3.10 | +1.80 | 0.031 | Y |
| 2024-07-01 | 184 | 55 | 36 | +0.79 | +2.55 | +1.75 | 0.002 | Y |
| 2025-01-01 | 181 | 22 | 14 | -0.15 | +2.02 | +2.17 | 0.009 | Y |
| 2025-07-01 | 184 | 74 | 51 | +2.04 | +2.98 | +0.94 | 0.120 | N |
| 2026-01-01 | 181 | 0 | 0 | +0.00 | +0.00 | +0.00 | 1.000 | N |
Verdict: PASS (3/5 cuts pass the lift+p criteria)
Per-cut IS / OOS detail (for the audit trail)
| Cutoff | Segment | long days | kept | base Sharpe | gated Sharpe | lift | p |
|---|---|---|---|---|---|---|---|
| 2024-01-01 | IS | 66 | 42 | +1.18 | +3.41 | +2.23 | 0.000 |
| 2024-01-01 | OOS | 135 | 104 | +1.30 | +3.10 | +1.80 | 0.031 |
| 2024-07-01 | IS | 201 | 146 | +1.39 | +3.62 | +2.23 | 0.000 |
| 2024-07-01 | OOS | 55 | 36 | +0.79 | +2.55 | +1.75 | 0.002 |
| 2025-01-01 | IS | 190 | 140 | +1.07 | +2.83 | +1.76 | 0.000 |
| 2025-01-01 | OOS | 22 | 14 | -0.15 | +2.02 | +2.17 | 0.009 |
| 2025-07-01 | IS | 77 | 50 | +0.41 | +2.28 | +1.87 | 0.000 |
| 2025-07-01 | OOS | 74 | 51 | +2.04 | +2.98 | +0.94 | 0.120 |
| 2026-01-01 | IS | 96 | 65 | +1.24 | +2.50 | +1.26 | 0.013 |
| 2026-01-01 | OOS | 0 | 0 | +0.00 | +0.00 | +0.00 | 1.000 |
Reading
- The original study used one OOS cut at 2025-01-01. That one cut showed Sharpe 0.99 -> 1.30-equivalent depth-filter lift (full-window +1226% vs +182%, Sharpe 2.85 vs 1.03, p=0.000).
- Five rolling-origin cuts ask whether that lift is consistent across regimes. The depth-filter is a market-microstructure signal: it might work in the post-FTX Binance regime but break in different L2 dynamics.
- NEGATIVE lift on a cut means the filter HURT Sharpe on that window. Multiple negative lifts mean the signal is not safe to deploy live.
- Threshold re-tuning between cuts would re-introduce the look-ahead bug class; pre-registered threshold {DEPTH_THRESHOLD} is the same frozen value at every cut.
- This study uses the same Binance bookDepth cache the original used; the OKX production wireup is in the WARMING phase. Once OKX reaches READY (75 more days), the same script can be re-run on OKX data to confirm the lift is feed-agnostic.
Time: 3s.