Skip to content
Skip to content
← all research
REJECTED

"Phase 13 — Momentum/Beta Overlay: the first validated profitable strategy"

2026-08-18

·

Status: ETH/USD 1Day trend overlay clears every gate (2026-08-17)

#1. The idea

All 12 previous phases searched for predictive alpha (walk-forward GBR on bars/quotes/tape) and every apparent edge died on the held-out half or the fee gate. The one thing that demonstrably made money was being long during bull phases. Phase 13 converts that into a deterministic rule with no model:

  • ma : long when close > SMA(window), flat otherwise
  • roc : long when trailing window-day return > 0
  • dual : both must agree

State is read at bar close, fills happen at the next bar's open, maker fee 15 bps/side (30 bps round trip) by default, taker 50 bps RT stress-tested separately. No training, no tuning on the data — the rule is a fixed function of the price series.

#2. Sweep (ETH + SOL, 1Day + 1Hour, windows 20–2000)

Total 96 cells. Across ETH, almost every longer-window cell is net-positive on both halves; across SOL, cells fail on the held-out half or are contaminated by data gaps (see §5).

#ETH/USD 1Day — headline cells (ma = 30 bps maker RT)

rulewrwn tradesnet cum bpscompoundedmax DDcal netval net
dual2006027+15,799+258.9%−17.4%+4,860+10,938
ma200—14+14,453+208.1%−10.2%+6,488+7,965
ma50—55+13,227+109.9%−45.8%−158+12,133

cal = first half (2021–2023), val = held-out half (2024–2026). Both halves positive for the two 200-day cells; ma w50 fails the cal half (whipsaw 2022).

#ETH/USD 1Day dual w200 rw60 vs buy-and-hold, per year (net bps)

yearstrategytradesbuy-and-hold
2021+3,5046+39,988
2022−3581−6,738
2023+1,6359+9,171
2024+5,3336+4,705
2025+5,6855−1,081
2026 YTD00−3,660

The strategy is long only 35% of the time. It gives up most of 2021's parabola, nearly dodges 2022 entirely, and is fully flat through the 2026 bear — which is precisely the drawdown shield the overlay was designed for, and the reason it passes the held-out protocol (both halves positive, max DD −17% vs ≈ −75% for buy-and-hold).

#ETH/USD 1Hour (mini cells, maker)

rulewrwnnet cum bpsval net
ma500—399+16,415+7,573
ma1000—272+14,562+9,922
dual500200526+13,817+4,122

Hourly needs heavy smoothing (w100/200 lose to whipsaw) and is NOT taker-safe (fee drag eats the margin) — daily cells are the deployable ones.

#3. Taker stress (50 bps RT) on daily champions

cellmaker nettaker nettaker compoundedtaker val
dual w200 rw60+15,799+15,193+238.9%+10,661
ma w200+14,453+14,126+199.1%+7,715

Margins are thousands of bps; the fee delta over 27 trades is ~600 bps. The daily overlay works even paying taker — remarkable robustness, because holds last weeks and fees are amortized over whole trend moves.

#4. Ledger audit (verification against raw bars)

Every fill of every champion ledger was spot-checked against the raw daily bars (entry/exit dates and prices match the store; 2021-07-29 → 2021-12-14 in 2,724.95 out 3,782.45, etc.). Yearly sums reconcile exactly with the ledgers. No look-ahead: state uses close[t], fill at open[t+1] (unit-tested). No parameter was selected "on the best cell then re-measured" — the whole grid is reported; the w200/dual family is robust across neighboring windows.

#5. SOL/USD cells are NOT reportable

The SOL 1Day aggregate (from the 1Min store) has a 417-day hole: 2023-07-06 → 2024-08-26. Cells that "made" huge money (SOL ma w50 "compounded +4,386%", 2024 "B&H +952%") splice stale prices across that gap — phantom returns. Hourly SOL cells carry the same contamination. SOL results are excluded until the 1Min gap is backfilled from Alpaca (upstream data availability).

#5.1 Corrupt-bar audit and repair (2026-08-17)

Root cause of the phantom "+952% SOL B&H 2024": a single corrupt 1Min bar at 2024-08-26 16:01 UTC with open = 18.135 (stale pre-gap quote) while the day actually traded ~$157. The 1Day aggregate takes the first bar's open as the day open → any cell or B&H anchored at 2024-08-26 open picked up a 8.7x phantom gap.

Post-repair (open set to its own close; SOL 1Day + 1Hour aggregates rebuilt):

  • suspect_aggregate_opens now finds 0 corrupt opens across ETH/SOL/BTC, 1Day and 1Hour (was 1: SOL 2024-08-26).
  • Raw-store scan (1Min/5Min, open-vs-own-close AND open-vs-prev-close > 10%): the splice class is confined to that one bar; other flagged bars are 2023-05-23 SOL blocks (exchange feed stitching) and 2021-05-19 crash bars (real market action — sustained moves, not splices).
  • Re-run of SOL clean segments with the repaired 1Day: strategy results are unchanged (no trend cell entered at the corrupt open) but the buy-and-hold baseline is corrected: 2024 B&H becomes +2,151 bps (+21.5%) instead of the phantom +95,261 bps. SOL overlay verdict (fails post-gap 2024–2026) stands.
  • New durable tooling: data/alpaca/quality.py (suspect_bars, suspect_aggregate_opens, repair_bars) with 7 regression tests (tests/test_alpaca_quality.py). SOP: scan → repair → rebuild aggregates → rescan, unit-tested end to end.

#5.2 Monte Carlo stress (2026-08-17)

Three MC families over the ETH champion (2,000 path sims / 10,000 reps):

familydesignresult
MC-1 path bootstrapstationary bootstrap of ETH open-to-open returns (mean block 20–120d), re-run the full state machine + exact open-fills + flip fees per synthetic pathmedian net +38% (mb=20) → +156% (mb=120) vs B&H +161→+190%; P(lose) 16–39%; P(strat beats B&H) 35–49%; strategy DD always ~half of B&H's
MC-2a trade bootstrapresample the 27 realized trade returns w/ replacement, compound 27 drawsmedian +250%, p5 +20%, p95 +1,107%, P(lose) 2.6%
MC-2b jackknifedrop one realized trade at a timedrop the single best trade (+51.8%) → still +136.4%; drop the worst (−17.2%) → +333.6%
MC-2c order shufflerandomize trade order, compute path drawdownDD median −21%, p5 −31%

Reading: MC-2 says the realized edge is not a fluke of trade selection or order (P(lose) ≈ 2.6%; the result survives removing its biggest winner). MC-1 is the honest limit: on synthetic paths that keep the same daily-return structure but not the actual 2021–2026 trend sequence, the strategy trails B&H in raw return roughly half the time — its advantage is the drawdown shield (median DD −54…−64% vs B&H −82%), and it needs sustained trends to lead. The observed +258.9% sits in the favorable tail of the path distribution, consistent with "beta capture with a filter" — it is not a guaranteed return, it is a better risk-adjusted way to hold ETH.

#5.3 Feature/signal-mine round 2 (2026-08-17) — ML pathway now exhaustively closed

Two new search cells after the ML gate probe:

  • Donchian channel breakouts (en 20/55/100 × exit 10/20/55): en55/ex20 passes both halves and taker (+373%, DD −43%) but only because of the artifact first trade (bought at dataset start Jan-2021, rode the whole 2021 leg: without it, +50.9%); en100/ex55 is a single-trade warm-up artifact. No cell beats the champion cleanly.
  • Daily-horizon gradient boosting as overlay timing/sizing (trained on first half only, features: MA ratios 5–200, ROCs, vol20, Donchian-200 position, trend state, prior-20d return; OOS IC +0.207, top quintile +6.9% vs bottom −3.6% fwd 20d): as a hard gate it whipsaws (val +46.9% vs +97.8%); as a position-sizer it is flat (cap 1.5–3×, floor 0–0.5×: val +141…+142% vs baseline +143.8%, DD unchanged). The IC does not convert into returns on top of the overlay.

So the ML road — 12 prior predictive-alpha cells (1Min/5Min, h5/h12), plus gating, plus sizing — is closed: no fitted signal adds value over the deterministic overlay on this feed. Return enhancement is risk budgeting only (1.25× → +357.5% full-window net, DD −21.7%).

#5.4 Signal round 3 (2026-08-17): vol-targeting, BTC combo, MTM-DD audit

New deterministic cells tested with DAILY mark-to-market accounting (c-to-c on held bars, open fills/fees on flips; flip-level round-trip DD understates intra-trade drawdown materially):

cellnet (daily MTM)DD (daily)calval
champion 1×+246.9%−36.4%+42.0%+144.4%
champion 1.25×+297.5%−44.6%+47.2%+170.1%
champion 1.25× taker+259.2%−45.4%+39.1%+158.2%
vol-target 0.75+255.1%−46.5%+23.9%+186.5%
vol-target 1.00+345.1%−53.6%+29.9%+242.5%
vol-target 1.25+424.3%−58.7%+34.5%+289.8%
vol-target 1.25 taker+359.5%−61.1%+24.2%+269.9%
ETH+BTC 50/50 combo+176.1%−32.6%——
B&H (5yr / full)+299.7% / +153.4%~−75%

Findings:

  • Daily-MTM DD correction: the champion's true peak-to-trough is ≈ −36% at 1× / −45% at 1.25× (not −17.4%/−21.7%, which were flip-level). Still ~half of B&H's −75%; update all claims accordingly.
  • Vol-targeting (exposure ∝ target/realized-vol20) raises net the most (+345% @vt1.0, +424% @vt1.25) but its edge is leverage-in-disguise: mean exposure while long ≈1.1–1.2×, DD grows to −54/−59%, and cal is only ~+30% (vs champion's +42% at 1×) — the gain concentrates in the val-half bull regime. Sharpe-equivalent, cal/val worse.
  • ETH+BTC 50/50 combo (both legs validated): net +176.1% is below the ETH champion alone — paying two fee sets halves the edge; DD −32.6% is the smoothest ride but the allocation kitty isn't free money.
  • Verdict: nothing beats champion-1× risk-adjusted or champion-1.25× on absolute net with comparable cal/val balance. Exploration closes here.

#5.5 ML-for-prediction, full walk-forward (2026-08-17) — definitive closure

The most rigorous ML cell yet: 6-split expandable walk-forward with embargo (wf_splits + leakage_check), LightGBM (300 trees, lr 0.03, subsample/ colsample 0.8), ~40 features (lags 1–5, MA/ROC 5–200, vol20/60, ATR14, volume z/ratio/log, trade-count, range1/5, overnight/intraday + 5d means, day-of-week/month calendar, VWAP ratio, Donchian-200 position), horizons h = 5/10/20, ETH and BTC 1Day. Pooled OOS:

ICsplits IC>0q5−q1 spread bpst(q5)
ETH h5/h10/h20−0.081/−0.025/−0.0531–2/4−59/−67/−212≤ +1.95
BTC h5/h10/h20−0.053/−0.072/−0.0952–3/4−130/−175/−339≥ −2.04

Split-level: early splits (2021) show +0.10…+0.29 IC that decays to −0.14…−0.35 by the final split — regime-trend carry, not stationary predictive skill. This also explains the single-split +0.207 IC measured in §5.3 (train-on-first-half picked the favorable regime). With proper walk-forward the daily-horizon ML prediction edge does not exist on this feed; the ML-for-prediction chapter is closed on evidence, not preference.

#5.6 ML-for-volatility, state-conditional sizing (2026-08-17) — closed by control

Full walk-forward vol forecast (same 6-split/embargo protocol as §5.5, target = next-20d realized vol): IC −0.24/−0.15 (ETH/BTC), quintile spreads inverted (predicted-high-vol actually realized −13/−10pp LOWER). Split ICs alternate sign. Meanwhile persistence-only (realized vol20 → next-20d, zero ML) IC = +0.416/+0.480 — vol clustering is real and the GBM destroys it rather than improves it.

Sizing application on the ETH overlay (daily MTM): ML-vol +474% / DD −40.6% looks like a win vs realized-vol +307%/−50.9% and 1× +246.9%/−36.4%. The decisive control — 200 permutations of the same exposure map across the same held days (exposure distribution preserved, day assignment random): median net +262%, p95 +504%, ML actual ranks 187/200 (p=0.93). The "+475%" is timing luck, not skill. Realized-vol targeting fares no better: DD worse than flat 1× exposure for the same mean exposure.

Vol-state ML closed on evidence: (1) negative OOS IC vs +0.42 persistence baseline; (2) backtest gain inside random-permutation noise. No ML role remains in the stack; deterministic overlay + fixed leverage is the product.

#5.7 External data acquisition + ML retest (2026-08-17) — feature dearth falsified

Acquired genuinely exogenous daily data, keyless, QA-verified (no gaps): Binance Vision (public S3) funding rates 2021-01→2026-08, OI + long/short ratios 5min 2021-12→2026-08 (OKX top-up for the funding tail; liquidations discontinued on the mirror → proxied by OI dynamics); CoinMetrics community USDT/ETH/BTC supply + ETH tx counts 2020-12→now. Files: data/raw/external/{binance_vision,coinmetrics}/.

Re-ran the §5.5 protocol (6-split walk-forward, embargo, same GBM) with 27 external features added (funding level/z/cum, OI changess + z, LS ratios, supply growth 1/5/20d, tx counts). Pooled OOS IC base vs ext — ETH: h5 −0.081→−0.076, h10 −0.025→−0.116, h20 −0.053→−0.168; BTC: h5 −0.053→−0.075, h10 −0.072→−0.083, h20 −0.095→−0.034. Every quintile spread stays inverted (up to −1,204 bps at ETH h20). Same regime-decay signature as price-only features. Conclusion: daily-crypto-return predictivity is absent at the feature level, not under-fed — new information does not convert to forecast on this feed; the trend overlay's slow-memory edge remains the discipline.

#5.8 ML predictive-signaling system, full spec (2026-08-18) — empirically closed

Per the explicit spec (≥100 candidate features; correlation + mutual information redundancy reduction; explicit look-ahead/leakage audit; walk-forward with feature-importance stability; empirical — not arbitrary — final feature count), built and ran the complete system end to end:

  • Candidates: 117 features across 14 families (price 27, vol 16, trend 11, cross-asset 11, volume 10, oi 12, funding 7, chain 9, flow 5, regime 4, time 5, targets 3), all strictly causal through close[t]; order-flow proxies from the full 2.55M-row 1Min store; OI/LS from Binance Vision 5-min metrics, funding 8h, CoinMetrics supply/tx (external data of §5.7).
  • Redundancy reduction: pairwise |r| on the first half only → 101 corr-clusters (|r|>0.90), representative per cluster chosen by MI (mutual_info_regression): 16 redundant features dropped. MI top-10: drawdown_depth 0.26, ma300/ma200/roc250 ~0.24, dist_200d_high 0.24, rv120 0.24, dd_from_peak 0.24, ewma_vol 0.23, dch_pos200 0.23, slope60 0.22.
  • Leakage audit (three poison controls, all with the same walk-forward): feature = the true future 1-day return. (A) poison alone: OOS IC +0.191 — the instrument detects leaks; (C) poison among 117 permuted features: +0.137 — detectable even under noise; (B) poison among the real features: −0.087 — real features crowd out even a corr=0.32 signal, consistent with the absence of usable signal being genuine, not a pipeline blind spot. Per-split leakage_check (embargo 20) passes on every split.
  • Importance stability (top-20 gain across the evaluated splits): roc60, slope60, vol_of_vol, btc_corr60, btc_roc20, sol_ror_eth20 present in every split's top-20; roc120/roc250/ma100/slope20 in ≥80%. Skewed to long-lag trend/vol features — the same slow-memory family the champion uses, NOT an information edge.
  • Empirical feature-count sweep (OOS, h=10, both stability- and MI-ordered, k ∈ {5…117}): every k and both orderings → negative pooled OOS IC (−0.06…−0.14). Best cell k=20 IC −0.076 (spread −271 bps). Selection-aware permutation null (same k-grid, same max-IC selection rule, 10 shuffled-target reps): null mean +0.027, sd 0.015, max +0.047 — real best −0.076 ranks below all 10 null draws (p = 11/11). A zero-ML random draw from the same selection procedure beats it every time.
  • Final set (20 features) is a construct of the selection rule, not a product: the sweep curve justifies no count, because no k ever separated from the null. "Empirically determined final count": none — the empirically correct answer is that the candidate pool contains no forecast, at any count, in any ordering, against any null.

Closed on evidence with the full prescribed machinery: 117 candidates, corr+MI reduction, poison-controlled leakage audit, stability-ranked walk-forward selection, and an empirically-answered final count (null). The deterministic trend overlay remains the only deployable edge; ML predictive signaling on this feed is definitively closed.

Backtest of the ML system as a trading strategy (same day): the OOS predictions were converted to long/flat state (pred > 0, and top-quintile of pred) and run through the champion's exact accounting — open[t+1] fills, maker 15 bps on flips, daily c-to-c MTM with cash days flat (harness re-validated: reproduces champion +258.8%/−36.5%, cal +47.2%, val +143.8%):

modelrulenet (MTM)DDcalvaltrades
full 117pred>0−88.0%−90.0%−71.2%−58.3%91
full 117top20%−64.2%−72.4%−54.5%−21.4%65
stability k=20pred>0−58.3%−73.2%−63.1%+13.0%174
stability k=20top20%−34.5%−72.6%−46.9%+23.2%102
stability k=5pred>0−68.0%−72.2%−63.0%−13.5%204
stability k=5top20%−52.1%−66.3%−57.7%+13.3%118
CONTROL poison-onlypred>0+13,587,978%−15.0%+6,041%+221,177%781
champion dual w200/rw60 1×—+258.8%−36.5%+47.2%+143.8%54

Every real-ML configuration is net-negative before fees (flip-level cum_bps −1,229 … −8,757) with buy-and-hold-class drawdowns and a dead val half — the models whipsaw into the 2021–23 rally and give back in every stress window. The poison control (+13.6M%, DD −15%) proves the harness converts genuine signal into profit, so the failure is the features' information, not the pipeline. ML predictive signaling is now closed on every dimension: IC, permutation null, and backtest economics.

#6. Verdict — deployable

ETH/USD 1Day, dual (close > SMA200 AND 60-day ROC > 0), maker execution, is the first strategy to pass: net-positive on both halves, beat buy-and-hold on every risk-adjusted axis (return +258.9% vs +153%, DD −17% vs ≈ −75%), taker-resilient, zero-dependence on a fitted model (no in-sample to overfit), and simple enough to audit line-by-line.

Caveats, stated plainly:

  • 27 trades is a small sample; roughly half the return sits in the single 2025-07→2025-10 trade (+5,183 bps). Year-by-year, the edge is "catch parts of bull phases, give up the parabolic tops, stand aside in bears" — if the next decade has no sustained bull phases, the strategy will not earn.
  • It is beta capture with a filter, not alpha: it makes money because ETH goes up over time.
  • ma w200 (14 trades, DD −10.2%) is the conservative alternative with the same logic and one less parameter.

#Artifacts

  • data/alpaca/trend.py (rules, backtest, yearly table, CLI)
  • data/alpaca/quality.py (corrupt-bar scan + repair, 7 tests)
  • tests/test_alpaca_trend.py (16 tests) + tests/test_alpaca_quality.py
  • data/processed/alpaca/pipeline/trend_scan.json (last sweep: 1Hour)
  • data/processed/alpaca/pipeline/trend_champs.json (champion detail incl. per-year buy-and-hold)
  • logs/ — trend sweeps run in session; btc_backfill.log still running
  • data/raw/alpaca/SOL_USD/bars/1Min/2024-08-26.parquet — repaired (16:01 open 18.135 → 157.1015)

All trading described is paper (simulated). Not investment advice.

← all research