Follow-up to phase 9 (rejection, stay flat) under the directive "keep working till profitable". Three new evidence families tested against the same honest cost model (maker 15 bps/side + 0.6 bps half-spread):
- Longer horizons (1Hour / 4Hour / 1Day) to amortize the ~30 bps round trip.
--bar-onlymodels on 1Min/5Min trained over the FULL 2021+ history (no quote columns — unlocks every walk-forward split).- Quantile threshold calibration (signal_quantile 0.50 → 0.97) on OOS predictions, with proper half-half calibration/held-out validation.
(models_1Day_run5.json, backtests_1Day_run5.json, threshold_scan.json,
validation_scan.json) + logs/pipeline_run4.log, pipeline_run5.log.
1. Long-horizon grid at the default top-quintile threshold (q = 0.80)
New locally-aggregated timeframes (data/alpaca/aggregate.py) from the 1Min
store: ETH 1Hour 49,251 rows / 4Hour 12,317 / 1Day 2,054; SOL 39,171 / 9,800 /
1,636 (~99.9% density). Bar-only 1Min/5Min models now emit OOS preds on all
valid splits (~2.04M for ETH 1Min vs 1.02M before).
| cell | n trades | gross cum (bps) | net cum (bps) | hit | Sharpe |
|---|---|---|---|---|---|
| ETH 1Hour h1 | 3,940 | +1,483 | −116,544 | 0.28 | −26.0 |
| ETH 1Hour h3 | 3,940 | +23,281 | −94,811 | 0.39 | −12.8 |
| ETH 1Hour h24 | 3,939 | +78,708 | −39,521 | 0.47 | −1.98 |
| SOL 1Hour h1 | 7,251 | +7,489 | −209,738 | 0.33 | −24.3 |
| SOL 1Hour h3 | 8,253 | −20,190 | −267,349 | 0.36 | −18.9 |
| SOL 1Hour h24 | 3,167 | −35,336 | −130,098 | 0.45 | −6.8 |
| ETH 4Hour h1 | 986 | +5,191 | −24,360 | 0.41 | −10.7 |
| ETH 4Hour h2 | 986 | +10,602 | −18,966 | 0.46 | −5.6 |
| ETH 4Hour h6 | 985 | +12,050 | −17,492 | 0.50 | −3.5 |
| SOL 4Hour h1 | 849 | −1,625 | −27,052 | 0.41 | −13.5 |
| SOL 4Hour h2 | 784 | +4,289 | −19,209 | 0.44 | −7.0 |
| SOL 4Hour h6 | 784 | +14,097 | −9,430 | 0.46 | −2.1 |
| ETH 1Day h1 | 164 | +4 | −4,909 | 0.43 | −6.0 |
| ETH 1Day h3 | 161 | −3,144 | −7,957 | 0.43 | −5.5 |
| SOL 1Day h1 | 67 | +1,151 | −859 | 0.48 | −3.2 |
| SOL 1Day h3 | 64 | −1,268 | −3,181 | 0.48 | −7.2 |
Pattern: gross per trade improves monotonically with horizon length (ETH 1Hour h24 ⇒ ~+20 bps/trade; 4Hour h6 ⇒ ~+15-18 bps/trade) but NOTHING clears the 30 bps maker round trip at q=0.80. Short 1Day (≤2k bars, ≤821 OOS preds) cannot train a useful model.
2. Quantile calibration (threshold_scan.json)
Swept q ∈ 0.50…0.95 on the same OOS preds (same-data evaluation).
| cell | q=0.85 net/t | q=0.90 net/t | q=0.95 net/t | Sharpe@q95 |
|---|---|---|---|---|
| ETH 1Hour h24 | +0.5 | +10.0 | +32.0 (n=985) | 5.1 |
| SOL 4Hour h6 | +5.9 | +13.6 | +84.4 (n=196) | 12.9 |
| ETH 4Hour h6 | −11.0 | −0.1 | +16.4 (n=247) | 2.4 |
| SOL 1Hour h24 | −8.2 | −7.4 | −4.1 | −0.7 |
Apparent monotone gradient at day-horizon cells: the model's top decile scored persistently better gross PnL — the first cells to show ANY net profit after fees (Sharpe 5 → 13 at q≥0.90).
3. Held-out validation — the gradient FAILS (validation_scan.json)
Quantile picked on the FIRST half of OOS timestamps (min 30 trades), then evaluated on the SECOND (held-out) half.
| cell | best q (cal) | cal-half Sharpe | held-out net cum (bps) | held-out Sharpe (n) |
|---|---|---|---|---|
| ETH 1Hour h24 | 0.95 | 18.1 | −27,198 | −9.4 (n=493) |
| SOL 4Hour h6 | 0.90 | 12.9 | −11,125 | −9.0 (n=196) |
| ETH 4Hour h6 | 0.97 | 27.2 | −6,311 | −12.7 (n=74) |
| SOL 1Hour h24 (control) | 0.90 | 0.7 | −56,181 | −12.0 (n=794) |
Every champion cell went negative on its held-out half; yearly breakdown pins the gain to 2025 (SOL 4Hour h6: 2025 +8,682 bps vs 2026 −19,807 bps) — a bull-momentum regime artifact, not a persistent signal. The control cell failed identically, confirming the validation procedure discriminates.
Overlap sanity: the per-trade Sharpe is inflated by h=24 overlapping signals (a position is re-scored every bar of its life). Constraining to non-overlapping entries (first entry, then re-arm after exit) drops full-OOS Sharpe 5.1 → 4.7 (ETH 1Hour h24) and 2.2 → 1.1 (SOL 4Hour h6); the held-out positional variants are negative. Nothing rescues the tail.
4. Conclusion — still: stay flat
- Bar-only full-history models double the OOS evidence but add no signal (1Min/5Min IC ≈ |0.01–0.06|, top-quintile ≈ ±5 bps).
- The day-horizon quantile gradient is the first observed deviation from pure noise — and quantile calibration + held-out validation is now part of the evaluation stack — but it does not survive time-splitting.
- No cell, at any quantile, has positive held-out economics. Net ≈ gross − fees everywhere the same half is used for both selection and evaluation.
Revisit conditions (unchanged from phase 9):
- A cell whose quantile-calibrated threshold stays net-positive on a HELD-OUT half (not the calibration half), evaluated positionally.
- Shorter data: Alpaca crypto quotes/trades for SOL start ~Oct-2024; a 2-year+ SOL quote-era backfill (2024-10 onwards is what we have) is the only material data addition possible.
- A structurally different cost regime (maker rebates, arbitrage venue) — out of scope.
Next candidate probes (if pursued): cross-sectional SOL-vs-ETH relative
pricing (pair signal, still long/flat per leg), and regime-conditional entry
(volatility filter) on the day-horizon cells with the new held-out protocol.
Both would use the existing store and the aggregate.py/bar_only plumbing.