Strategies
BTC→SOL Intraday Lead-Lag Catch-Up Momentum, Long-Short (Two-Instrument BINANCE USD-M Perps, 15m Bars OHLCV-Only, Trade SOL in the Direction of a Significant Volatility-Normalized BTC Impulse When SOL Has NOT Yet Re-Priced Its Beta-Expected Move, Exit on Catch-Up / Time / ATR Stop, 3-Parameter)
Outcome: Abandoned
BtcSolLeadLagCatchUpMomentumLS
Outcome Summary
BtcSolLeadLagCatchUpMomentumLS bet on a crypto-native microstructure edge: BTC leads information flow and higher-beta SOL re-prices the same macro impulse with a lag, so it entered SOL in BTC's direction whenever SOL had under-captured its beta-expected co-move. The trades matched the design (SOL-only, long and short, ~3h holds) but the result was a clean verdict on the premise, not a bug — it lost in all seven years, ending -95.3% with a 95.3% drawdown, Sharpe -0.95, profit factor 0.55, and negative per-trade expectancy driven by an inverted avg_win $350 < avg_loss $444 at a 41% win rate. The analyst abandoned it at the backtest-review gate, concluding SOL re-prices BTC's move too fast to harvest and that tuning the three parameters could not flip an expectancy negative in every regime, so it never reached optimization, risk review, or paper trading.
Hypothesis
Negative edge in every regime across a decisive sample. The BTC->SOL lead-lag catch-up strategy loses in all 7 years (2020 -27.4%, 2021 -32.3%, 2022 -21.1%, 2023 -44.9%, 2024 -34.3%, 2025 -37.6%, 2026 -38.0%), ending at total_return -95.3% with max_drawdown 95.3% (CI 74.9%-100%) — past the >50% hard-abandon line. Across 803 trades: profit_factor 0.55, Sharpe -0.95 with CI [-1.89, -0.44] entirely below zero, Sortino -0.65, PSR 0.0, avg_trade_return_pct -0.35% (negative, below fee floor), expectancy -$117.78/trade. The catch-up thesis is falsified on its own numbers: avg_win $350 is smaller than avg_loss $444 (inverted reward:risk) at a 41% win rate — SOL has already re-priced BTC's impulse by the time the 4-bar z-threshold fires, so the strategy chases exhausted moves. This is the OHLCV-only momentum/lead-lag class with zero survivors; tuning btc_z/catch_up_ratio/max_hold_bars cannot flip a negative expectancy that holds in every year, and lead-lag catch-up on liquid majors is a well-mined, structurally dead idea, so neither iterate nor revise_hypothesis applies.
Implementation
Two-instrument intraday BTC->SOL lead-lag catch-up momentum on Binance USD-M perps (15m bars, OHLCV-only, long-short). BTCUSDT.BINANCE is the leader (signal only, never traded); SOLUSDT.BINANCE is the follower traded. Each bar it aligns SOL/BTC closes by timestamp, estimates SOL's rolling beta to BTC over vol_lookback bars, and measures BTC's L-bar volatility-normalized impulse (z_btc). The continuous signal is the vol-normalized beta residual = (beta*btc_ret - sol_ret)/sigma_sol. Entry: |z_btc| > btc_z AND SOL captured less than catch_up_ratio of its beta-expected co-move AND the not-yet-captured move |residual| exceeds min_catchup_frac (fee-aware), with a re-entry cooldown -> trade SOL in BTC's direction. Exits are snapshot-based only: a fixed ATR take-profit / ATR stop (from the entry-time ATR) or a time stop. Sizing risks risk_per_trade of equity at the ATR stop (ATR floored so low-vol windows can't explode size), hard-capped at gross_cap x equity notional; leverage=1 (no margin).
Verification Results
Analyst to evaluate at backtest_review. Entry gate is structurally fee-aware (min_catchup_frac 0.4% > 0.15% floor), but negative per-trade expectancy plus long/short asymmetry (long_win_rate 0.25 vs short_win_rate 0.50) suggests the continuation bet behaves like a reversion in-sample; unlikely fixable by tuning 3 parameters.
Sandbox backtest is a clear net loser over a measurable 66-trade / 363-day sample: total_return -13.7%, Sharpe -2.24 (CI [-3.76, -0.81] entirely below zero), profit_factor 0.44, avg_trade_return_pct -0.329% (negative, below the fee floor), win_rate 0.36. This does NOT carry a code-defect signature (win_rate is not 0.0, |Sharpe| < 5, profit_factor != 0.0), so it is a genuine realized-edge failure rather than a polarity/sizing/exit bug. The code correctly implements the hypothesis; the lead-lag catch-up simply does not produce positive expectancy in-sample. Flagged for the analyst at backtest_review, not a QA correctness block.
Optional: add a lower bound (e.g. captured > -catch_up_ratio) if the intent is 'SOL lagging in the same direction' only. Acceptable as-is per the stated hypothesis.
The catch-up gate `self._captured >= self.catch_up_ratio -> None` also admits large-NEGATIVE captured values (SOL moved opposite to BTC), turning those bars into unbounded-divergence entries. This is directionally consistent with a catch-up bet and matches hypothesis intent, so not a defect — noted for confirmation that the intended breadth includes opposite-direction divergence, not only mild under-capture.
Backtest Review
- Sharpe
- -0.95
- Total return
- -95.29%
- Max drawdown
- 95.29%
- Trades
- 803
- Win rate
- 41.1%
- Profit factor
- 0.55
Clean two-instrument construction with BTC as signal-only, 803 trades (decisive sample), OHLCV-only with full catalog history (no data risk)
Trades match the hypothesized mechanism (SOL-only, long+short, ~3h holds) — so the negative result is a real verdict on the premise, not a bug
Loses in EVERY year 2020-2026 (-21% to -45% annually); total_return -95.3%, max_drawdown 95.3% (CI to 100%) — past the hard-abandon line
profit_factor 0.55, Sharpe -0.95 (CI [-1.89, -0.44] fully negative), Sortino -0.65, PSR 0.0 — no statistical edge
avg_trade_return_pct -0.35% (negative, below fee floor), expectancy -$117.78/trade; inverted reward:risk (avg_win $350 < avg_loss $444) at 41% win rate
OHLCV-only lead-lag/momentum class with zero survivors; SOL re-prices BTC's impulse too fast to harvest — chases exhausted moves
Iteration History
Verification failed (Layer 2 — synthetic scenarios): Parameters used: ['btc_z', 'beta_max', 'beta_min', 'lookback', 'atr_period', 'atr_tp_mult', 'min_notional', 'vol_lookback', 'atr_stop_mult', 'max_hold_bars', 'catch_up_ratio', 'risk_per_trade'] Check that __init__ sets all attributes from self.parameters.get(). - steady_uptrend: TypeError: FactoryStrategy._bar_ts() takes 1 positional argument but 2 were given (bar timestamp: 1735695840000) - steady_downtrend: TypeError: FactoryStrategy._bar_ts() takes 1 positional argument but 2 were given (bar timestamp: 1735695840000) - flat_ranging: TypeError: FactoryStrategy._bar_ts() takes 1 positional argument but 2 were given (bar timestamp: 1735695840000) - volatility_spike: TypeError: FactoryStrategy._bar_ts() takes 1 positional argument but 2 were given (bar timestamp: 1735695840000) - zero_volume: TypeError: FactoryStrategy._bar_ts() takes 1 positional argument but 2 were given (bar timestamp: 1735695840000) - price_gap: TypeError: FactoryStrategy._bar_ts() takes 1 positional argument but 2 were given (bar timestamp: 1735695840000)
Outcome Summary
On liquid majors the lead-lag catch-up is too fast to harvest — SOL has already re-priced BTC's impulse by the time a multi-bar z-threshold fires, so the strategy chases exhausted moves; a well-mined microstructure premise can be structurally dead rather than merely mistuned.
It was abandoned at the pre-optimization backtest-review gate: the edge was negative and statistically significant in the wrong direction across every regime, breaching the >50% drawdown hard-abandon line, so optimization and all later stages were never reached.
A long-short, two-instrument intraday lead-lag momentum on Binance USD-M perps that used BTC as a signal-only leader and traded SOL in the direction of a significant volatility-normalized BTC impulse whenever SOL had captured only a fraction of its rolling-beta-expected co-move, exiting on catch-up, an ATR stop/take-profit, or a time stop with three tuned parameters.
Over a decisive 803-trade sample it lost money in every year from 2020 to 2026, ending at -95.3% total return with a 95.3% max drawdown (CI to 100%), Sharpe -0.95 (CI [-1.89, -0.44] fully negative), profit factor 0.55, and probabilistic Sharpe 0.0. Per-trade expectancy was -$117.78 (avg_trade_return_pct -0.35%, below the fee floor) with an inverted reward:risk of avg_win $350 versus avg_loss $444 at a 41% win rate.
Backtest and paper results are hypothetical. Trading involves risk of loss.