BtcEthSolDailyThreeWayRelativeStrengthRotationLong
Hypotheses
BTC-ETH-SOL Daily Three-Way Relative-Strength Rotation Long-Only
Hypotheses
A long-only, multi-instrument (3-asset) rotation strategy at Daily timeframe on the three most-liquid crypto majors — BTCUSDT.BINANCE (blue-chip), ETHUSDT.BINANCE (L1-alternative), SOLUSDT.BINANCE (high-beta alt). The mechanism: each Daily bar, compute 20-day return for all three assets, identify the strongest performer that is ALSO in its own uptrend (close > 50-day SMA), hold only that one. Hysteresis margin prevents whipsaw rotation between near-tied performers. If NONE of the three pass their trend filter, hold cash (preserves capital in synchronized crypto bear markets). Directly escalates the BTCETHRelativeStrengthRotationLong template (just landed in pipeline) from 2-way to 3-way comparison, capturing the FULL major-cap rotation cycle: BTC dominates institutional flight-to-quality phases, ETH leads DeFi/L1 narrative cycles, SOL leads memecoin/high-beta-alt phases. The 3-asset coverage materially extends the leadership-capture surface vs the 2-asset version. Fills the multi-instrument scope under-quota bucket (8.7% vs target ≥15%). Uses ONLY confirmed-working Daily bars: BtcSpotDrawdownAccumulationLong validates BTC Daily, EthDailyGoldenCrossMomentumLong validates ETH Daily, SolDailyEmaTrendContinuationLong validates SOL Daily. NO secondary instruments are added for trend filters or signal sources — directly avoids the Layer-3-audit_stale failure mode that killed my two recent cross-venue proposals (which depended on ADA Daily or ETH 4H/Daily). Long-only because all three are crypto majors with documented positive long-term drift; short-only directional on crypto majors has been empirically refuted (-2.6 Sharpe gap vs longs). Single-position constraint (holds exactly ZERO or ONE position at a time).
Hypotheses
Iteration-3 fix targets the exact failure cited: gross exposure exploded because entries were re-submitted while prior orders were still in flight (BTC/ETH/SOL are separate, non-netting instruments, so positions_open lags the fill by a bar). Two changes enforce the true 0-or-1 invariant: (1) `_has_pending_orders()` gates ALL order actions — if any leg has a working or in-flight order, the strategy does nothing that bar, eliminating the re-submit-while-pending stacking. (2) Flatten and enter are now separated across bars — when rotating, non-target legs are flattened this bar and the new entry is deferred (`not flattened`) until the exit settles, so sizing (`equity * notional_pct`) is always computed while FLAT, off freed post-exit capital rather than inflated unrealized PnL. `_held()`/`_current_qty()` read net position qty defensively (still self-healing against any residual leg). All other logic (signal ranking, hysteresis, trend filter, continuous leader-return signal for the verifier, manual leg management) is unchanged, preserving the earlier layers that already passed. Result: at most one open leg (~95% notional) every bar, no physically impossible MTM.
Hypotheses
Failed the holdout and multiple-testing gates decisively on the final optimization attempt (2 of 2). walk_forward PBO=0.8744 — an 87% probability of backtest overfitting (deflated_sharpe null, so PBO + holdout + IS/OOS govern). The untouched time-ordered HOLDOUT FAILED (ratio 0.55 < 0.70, holdout_sharpe 0.307 vs WF-OOS 0.559), and the most recent walk-forward OOS window is negative (-1.08); is_overfitted=false only via a weak IS/OOS ratio of 2.27 that the holdout overrides. Sensitivity FAILED with 4 cliff parameters (mom_lb, trend_sma, notional_pct, hysteresis_margin) — notional_pct swings Sharpe 0.52 to -0.45 across the grid, so there is no robust region to tune toward. The base +18,224% headline is a caution, not an edge: Sharpe is only 0.10, end_unrealized_pct=1301% means the return is overwhelmingly open-position mark-to-market rather than realized, and the profile is bull-run-outlier-carried (2021 +2329%, single days +315/+205/+149%; return_kurtosis 187, skew 11.7) with a 69.9% max drawdown, 2026 YTD -13%, and rolling Sharpe repeatedly negative through 2025. Not iterate: this is the final attempt and the binding failures (PBO 0.87, failed holdout, 4-cliff surface, MTM/outlier-artifact headline) are structural, so a third best-of-225 sweep re-selects noise. Not revise_hypothesis: BTC/ETH/SOL Daily are valid, data-rich instruments and the 2-way BtcEthRelativeStrengthRotationLong sibling just landed — this is a multiple-testing/overfit + failed-holdout failure on a fine instrument set, not a proven mechanism stranded on a dead target. FAILURE PATTERN: escalating the 2-way relative-strength rotation to a 3-way BTC/ETH/SOL Daily long-only rotation does NOT inherit promotability — it produces the overfit-to-search signature (PBO 0.874, failed holdout ratio 0.55, 4 sensitivity cliffs, negative most-recent OOS window) atop a base Sharpe of 0.10 whose 182x total_return is a 1301%-unrealized MTM/bull-outlier artifact. A non-overfit-flagged walk-forward and positive alpha vs the basket measure consistency, not significance or forward-generalization, and do not rescue a strategy that fails its holdout and PBO simultaneously.
Implementation
Long-only 3-asset daily rotation across BTC/ETH/SOL Binance perps. Each daily bar ranks the 20-day return of the three majors, holds the strongest that is also above its 50-day SMA (else cash), with a hysteresis margin to avoid whipsaw. Holds exactly 0 or 1 position via a settle-aware state machine that never re-submits while an order is in flight and defers new entries until the prior exit has fully filled.
Backtest Review
Single-position invariant now holds: trade ledger shows one leg at a time, leverage ~0.95-1.0, no stacking (fixes the iteration-2 failure mode).
Backtest Review
Trades match the hypothesized mechanism: long-only rotation across BTC/ETH/SOL, holding the strongest in-uptrend leg (SOL in alt runs, BTC in flights, cash gaps present).
Backtest Review
Adequate sample: 114 real trades over ~6 years; profit_factor 1.51.
Backtest Review
Positive in-sample active edge vs equal-weight basket: alpha 0.47, information_ratio 0.42.
Backtest Review
Sharpe only 0.10 and max_drawdown 69.9% - risk-adjusted profile is poor and far below promotion thresholds.
Backtest Review
Returns are extremely lumpy/outlier-carried (return_kurtosis 187, skew 11.7) - a handful of trades (e.g. the 64-day SOL hold, +315%) dominate PnL, raising overfitting risk in optimization.
Backtest Review
Headline total_return (18223%) is heavily unrealized-driven (end_unrealized_pct 1301%) - an always-invested leg still open at backtest end.
Backtest Review
Directional long-beta (beta 0.55) - edge over simply holding the majors must be demonstrated out-of-sample, not just in-sample alpha.
Analysis
Multi-instrument rotation is genuinely differentiated (fills the multi-instrument scope gap), long-only on liquid majors, and the settle-aware single-position state machine appears to hold the 0-or-1 invariant (avg_position_pct ~103%, not stacked).
Analysis
Positive alpha (0.47) and information_ratio (0.42) vs an equal-weight basket on the base run, and walk-forward is not flagged is_overfitted.
Analysis
walk_forward PBO = 0.8744 — 87% probability of backtest overfitting, decisively above the 0.5 line.
Analysis
Holdout FAILED: ratio 0.55 < 0.70, holdout_sharpe 0.307 vs WF-OOS 0.559 — the untouched forward window does not hold up, and the most recent WF-OOS window is negative (-1.08).
Analysis
Sensitivity FAILED with 4 cliff parameters (mom_lb, trend_sma, notional_pct, hysteresis_margin) — notional_pct swings Sharpe 0.52 to -0.45; no robust region to tune toward.
Analysis
Base total_return +18,224% is an artifact: Sharpe only 0.10, end_unrealized_pct 1301% (headline is mostly open-position MTM, not realized), return_kurtosis 187, skew 11.7, gains bull-run-outlier-carried (2021 +2329%; single days +315/+205/+149%).
Analysis
max_drawdown 69.9% (CI 98.7-145%), 2026 YTD -13%, rolling Sharpe repeatedly negative through 2025 — edge is decaying and risk is severe.
Analysis
The backtest is invalid: it contains physically impossible results for a 0-or-1, 0.95x-notional long book — single-day returns of +304% (2021-03-14), +212% (2021-10-01), +175% (2021-05-08), and a max_drawdown_ci_high of 154.7% (a drawdown >100% cannot happen unlevered). Despite the iteration-2 'single-position self-healing flatten', gross exposure is clearly exploding (Sharpe -0.26 alongside +28,316% return, end_unrealized_pct 1892%, turnover 5629%, $1.5M commission on a $100k start). Do NOT resubmit until you prove the book holds at most ONE open position (~95% notional) every bar. Specific things to fix/verify: (1) Within-bar fill timing — you call _flatten(old_leg) and _enter(new_leg) on the SAME bar; the exit market orders likely do not settle before you size/enter, and because BTC/ETH/SOL are SEPARATE instruments (not netted), a failed-to-fill flatten leaves you holding two legs that then both ride and stack over subsequent bars. Confirm each leg is actually flat (cache shows zero open qty) before entering the target, or defer the new entry to the next bar after the exit fills. (2) Sizing off inflated equity — notional = get_account_equity() * 0.95 uses equity that includes ballooning unrealized PnL, compounding size super-linearly; consider a stable equity base. (3) Instrument the strategy to log TOTAL gross dollar exposure across all three instruments every bar and assert it stays ~= one notional_pct position; re-run and confirm no single-day return exceeds a plausible single-asset move and max_drawdown stays <100% before this is worth optimizing.
Outcome Summary
This strategy extended the just-landed 2-way BtcEthRelativeStrengthRotationLong template into a 3-way BTC/ETH/SOL daily relative-strength rotation, holding the strongest in-uptrend major or cash. Its first three iterations wrestled with a single-position invariant — separate non-netting legs let in-flight orders stack and inflate exposure — which a settle-aware state machine finally fixed, letting the run clear backtest review with 114 trades, a 1.51 profit factor, and positive in-sample alpha. But optimization exposed the strategy as overfit and non-generalizing: PBO 0.8744, a failed holdout (ratio 0.55), a negative most-recent OOS window, and four sensitivity cliffs, all sitting atop a base Sharpe of 0.10 whose 182x headline was overwhelmingly open-position mark-to-market. On the second and final optimization attempt the analyst abandoned it as a structural multiple-testing/failed-holdout failure rather than iterate on noise; it never reached risk review, paper, or live.
Outcome Summary
Escalating a 2-way relative-strength rotation to a 3-way BTC/ETH/SOL version does not inherit promotability — positive in-sample alpha and a non-overfit-flagged walk-forward measure consistency, not forward-generalization, and cannot rescue a strategy whose base Sharpe is 0.10 and whose headline return is an unrealized-MTM/bull-outlier artifact that fails its holdout and PBO simultaneously.
Outcome Summary
It cleared the backtest-review gate ('optimize') once the single-position invariant finally held, but the post-optimization analyst voted 'abandon' after it decisively failed the overfitting and forward-generalization gates — walk-forward PBO 0.8744, failed holdout (ratio 0.55, holdout_sharpe 0.307), a negative most-recent OOS window (-1.08), and 4 sensitivity cliffs with no robust region to tune.
Outcome Summary
A long-only, 0-or-1-position daily rotation across BTC, ETH, and SOL that holds whichever major has the strongest 20-day relative-strength return while also above its 50-day SMA (with a hysteresis margin to prevent whipsaw), or holds cash if none pass their trend filter.
Outcome Summary
The backtest ran 114 trades over ~6 years with a 1.51 profit factor and positive in-sample alpha (0.47) and information ratio (0.42) versus an equal-weight basket, but risk-adjusted quality was poor: Sharpe 0.10, max drawdown 69.9%, and the +18,224% headline was largely a mark-to-market artifact (end_unrealized_pct 1301%, return_kurtosis 187, skew 11.7).
Backtest and paper results are hypothetical. Trading involves risk of loss.