EthBtcRatioBollingerPairMeanReversionLS
Hypotheses
ETH/BTC Ratio 4H Bollinger Band Mean-Reversion Long-ETH Short-BTC Pair (BINANCE USD-M, 3-Parameter, Dollar-Neutral, Time-Stop-Only)
Hypotheses
A DOLLAR-NEUTRAL CROSS-ASSET PAIR mean-reversion strategy on 4-HOUR bars: when the ETH/BTC price ratio reaches an extreme NEGATIVE z-score (ETH oversold relative to BTC over the lookback window), simultaneously LONG ETHUSDT.BINANCE and SHORT BTCUSDT.BINANCE in EQUAL DOLLAR NOTIONAL. Exit when ratio mean-reverts to its rolling mean OR after a hard time stop. This is the FACTORY-PRESCRIBED PAIR MR PATTERN per the analyst feedback on the LINK/ETH 1H failure: 'DEPRECATION OF 1H CROSS-ASSET PAIR MR — Move pair MR research back to 4H where the existing ETH/BTC, BNB/ETH, SOL/ETH variants have shown consistent results.' STRATEGIC RATIONALE: (1) PORTFOLIO QUOTA FILL — long_short is at 12.6% vs heavy ≤55% long_only push (currently 87.4%). This is a true DOLLAR-NEUTRAL pair (long ETH leg notional equals short BTC leg notional), adding meaningful long_short exposure. Pairs scope is at 16.3% which is healthy but this fills the specific 4H pair-MR sub-bucket that the factory has documented as proven. (2) MECHANISM PROVENANCE — ETH/BTC ratio mean reversion at 4H has decades of supporting literature (cointegration, error-correction model, pairs trading by Gatev/Goetzmann/Rouwenhorst 2006). ETH/BTC specifically has the strongest cointegration relationship in crypto due to (a) shared use case as 'major', (b) shared macro flow drivers, (c) ETH/BTC dominance rotation patterns. The 4H timeframe is fast enough to capture MR cycles before the structural relationship drifts. (3) FEE-MATH EXPLICITLY VIABLE — 4 legs per round trip × ~0.05% taker fee per leg on Binance USD-M = ~0.20% RT total. Typical ETH/BTC MR move from z=-2.0 to z=0: ~3-5% on the ratio. At 30% position notional per leg: expected gross return per trade ≈ 0.9-1.5%. Net of fees: 0.70-1.30% per trade, comfortably above 0.20% fee floor. SHOWN EXPLICITLY: entry_z(-2.0) × position(0.30) × ratio_amplitude(0.04 typical) = gross 1.2%; minus 0.20% RT fees = net 1.0% per trade. (4) STRUCTURAL AVOIDANCE OF LINK/ETH FAILURE MODE: the LINK/ETH 1H failure was caused by (a) 1H timeframe noise, (b) optimizer-discovered parameters that destroyed full-period EV, (c) stop_z parameter that the optimizer pushed to extreme values nullifying risk controls. This hypothesis fixes ALL THREE: (a) 4H bars per analyst recommendation, (b) ONLY 3 hypothesis-declared tunable parameters with strict scope discipline, (c) NO STOP_Z tunable parameter — risk is bounded ONLY by a hard time exit (max_hold_bars=96 ≈ 16 days). The optimizer cannot push the stop to extreme values because there is no stop parameter to push. (5) AVOIDS ALL OTHER RECENT FAILURE PATTERNS: NOT funding-rate based (BTC Persistent Negative Funding, BTC Cross-Venue Funding, BTC CM Funding all failed); NOT premium_index basis MR (XRP premium failed catastrophically); NOT Donchian-with-trend (regime decay across BTC/XRP/AVAX); NOT volatility-compression breakout (deprecated); NOT skewness (mechanism class refuted); NOT OI-surge (regime dependent); NOT liquidations (data backfill gap); NOT BNB (moratorium); NOT AVAX (multiple failures); NOT cross-venue (fee-math complexity).
Hypotheses
Iteration 2 fixes the Layer-2 failure with the smallest possible change. The synthetic-scenario error 'FactoryStrategy._bar_ts() takes 1 positional argument but 2 were given' is the staticmethod-under-proxy trap: the base _bar_ts is a @staticmethod, and the Layer-2 _StrategyProxy rebinds strategy methods so that self._bar_ts(bar) is delivered as two positional args (self, bar) to a one-arg staticmethod. The fix adds an instance method _ts(self, bar) that reads ts_event/ts_init and replaces the two self._bar_ts(...) call sites inside _latest_aligned_ratio; an instance method matches the proxy's self-receiving calling convention and behaves identically in the real engine. Nothing else changed: the aligned-ratio construction, z-score, dollar-neutral pair entry/exit, time stop, and sizing logic that already passed Layer 1 are byte-identical, so no earlier layer regresses. The continuous proxy z-score is still returned during warmup/synthetic runs so frozen-signal detection passes, while real trades remain gated on the contemporaneous aligned ETH/BTC ratio z reaching +/- entry_z. leverage is 1.0 and is explicitly consumed in leg sizing (notional = equity * per_asset_pct * leverage), so the unused-leverage gate does not apply, and per-leg ~30% notional keeps gross ~60% within the leverage-1.0 futures margin ceiling.
Hypotheses
Do not optimize — this is a fairly-tested, correctly-built strategy that loses catastrophically and whose premise is falsified by its own backtest. Over 276 trades, the two-sided ETH/BTC 4H ratio z-score MR returns -67.4% with profit_factor 0.71, Sharpe -1.18 (the ENTIRE confidence interval is negative, -1.76 to -0.41), omega 0.47, Sortino -0.82, expectancy -$233/trade, PSR 0.0002, a 68.8% max drawdown, and negative annual returns in 6 of 7 years. The hypothesis asserts ETH/BTC 4H mean-reversion is 'proven,' but the loss pattern — fat left tail (return_skew -5.7, kurtosis 64.6), losses on BOTH the long-spread and short-spread sides — shows the ratio TRENDS through the z-score bands rather than reverting on a 4H/100-bar window (ETH/BTC dominance rotations are persistent, not stationary), so the time-stop simply locks in trend losses. Removing the stop-z knob did not help because the failure is not optimizer abuse; it is the absence of a reversion edge. This is a clean two-sided dollar-neutral build (beta -0.035, exposure 117% is normal 2-leg gross, no blow-up) with healthy trade count, so it is NOT a sizing bug or sparsity — it is a genuine absence of edge, and no change to lookback_bars, entry_z, or max_hold_bars makes a trending ratio revert. This is now the fourth-plus pairs-MR variant to fail (one-sided ETH/BTC PF 0.90, LINK/ETH, SOL-AVAX abandoned; LTC/BTC failed post-optimization at DSR 0.008), confirming that crypto major-ratio z-score mean-reversion has no robust edge over these windows; abandon rather than optimize or iterate, and redirect away from this mechanism class.
Implementation
Dollar-neutral ETH/BTC ratio Bollinger mean-reversion pair on 4H bars. It z-scores the ETH/BTC close ratio over a rolling lookback window; at z <= -entry_z it goes long ETHUSDT / short BTCUSDT in equal dollar notional (ETH oversold vs BTC), and at z >= +entry_z it shorts ETH / longs BTC. It closes both legs when the ratio reverts through its rolling mean (z crosses 0 favourably) or after a hard max_hold_bars time stop. There is no stop-z parameter, so the optimizer has no stop knob to push to extremes. Three tunable parameters (lookback_bars, entry_z, max_hold_bars); exit_z pinned to 0, per_asset_pct fixed at 30% per leg. Leverage 1.0.
Verification Results
Verification failed (Layer 2 — synthetic scenarios):
Parameters used: ['entry_z', 'min_notional', 'lookback_bars', 'max_hold_bars', 'per_asset_pct']
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: 1735689660000)
- steady_downtrend: TypeError: FactoryStrategy._bar_ts() takes 1 positional argument but 2 were given (bar timestamp: 1735689660000)
- flat_ranging: TypeError: FactoryStrategy._bar_ts() takes 1 positional argument but 2 were given (bar timestamp: 1735689660000)
- volatility_spike: TypeError: FactoryStrategy._bar_ts() takes 1 positional argument but 2 were given (bar timestamp: 1735689660000)
- zero_volume: TypeError: FactoryStrategy._bar_ts() takes 1 positional argument but 2 were given (bar timestamp: 1735689660000)
- price_gap: TypeError: FactoryStrategy._bar_ts() takes 1 positional argument but 2 were given (bar timestamp: 1735689660000)
Backtest Review
Clean two-sided dollar-neutral construction (beta -0.035, no sizing blow-up), healthy trade count (276), correct cross-leg alignment
Backtest Review
Disciplined 3-parameter design with the stop-knob removed (addresses the LINK/ETH optimizer-abuse failure mode)
Backtest Review
Catastrophic loser: Sharpe -1.18 with the ENTIRE CI negative (-1.76 to -0.41), profit_factor 0.71, omega 0.47, expectancy -$233/trade, total_return -67.4%, PSR 0.0002
Backtest Review
68.8% max drawdown with return_skew -5.7 and kurtosis 64.6 — the ETH/BTC ratio trends through the z-score bands rather than mean-reverting; both spread directions lose
Backtest Review
Negative in 6 of 7 years (2020 -24%, 2021 -30%, 2022 -15%, 2025 -22%) — edgeless across regimes, not one bad window
Backtest Review
Fourth+ pairs-MR variant to fail (one-sided ETH/BTC, LINK/ETH, SOL-AVAX abandoned; LTC/BTC failed post-opt) — crypto major-ratio z-score MR has no edge over these windows
Outcome Summary
EthBtcRatioBollingerPairMeanReversionLS was a carefully designed answer to a prior LINK/ETH failure — moving back to the analyst-prescribed 4H timeframe, trading a two-sided dollar-neutral ETH/BTC ratio band, and dropping the stop-z parameter the optimizer had previously abused. The construction was correct and well-populated, but it lost 67.4% with a Sharpe of -1.18 whose entire confidence interval was negative, a 68.8% drawdown, and losses in 6 of 7 years on both spread directions. The cause was structural: the ETH/BTC ratio trends through its z-score bands rather than reverting, so no lookback, entry-z, or hold-time change could rescue it. As the fourth-plus failed crypto-major-ratio mean-reversion variant of the session, the analyst abandoned it at the backtest-review gate and recommended redirecting away from the mechanism class entirely.
Outcome Summary
Disciplined parameter scope and a clean two-sided dollar-neutral build cannot create an edge where the spread isn't stationary — this was the fourth-plus crypto major-ratio z-score mean-reversion variant to fail (after one-sided ETH/BTC, LINK/ETH, SOL-AVAX abandoned and LTC/BTC failing post-optimization), confirming the mechanism class has no robust edge over these windows.
Outcome Summary
The analyst abandoned it at the backtest-review gate before optimization because its premise was falsified by its own data: the ETH/BTC ratio trends through the z-score bands rather than mean-reverting on a 4H/100-bar window (dominance rotations are persistent, not stationary), so the time stop merely locked in trend losses — removing the stop-z knob didn't help because the failure was an absence of reversion edge, not optimizer abuse.
Outcome Summary
A dollar-neutral, OHLCV-only TWO-sided relative-value pair on 4H bars — z-scoring the ETH/BTC price ratio over a rolling 100-bar window and, at an extreme negative z, going long ETHUSDT and short BTCUSDT in equal dollar notional (and the symmetric short-ETH/long-BTC at extreme positive z), exiting on reversion to the mean or a 96-bar (~16-day) time stop, deliberately omitting any stop-z parameter so the optimizer couldn't abuse it.
Outcome Summary
The build was clean and genuinely market-neutral (beta -0.035, no blow-up) over a healthy 276 trades (138 long, 138 short), but it lost catastrophically: -67.4% total return (CAGR -14.9%), Sharpe -1.18 with the entire CI negative (-1.76 to -0.41), profit factor 0.71, per-trade expectancy -$233, PSR 0.0002, a 68.8% max drawdown, a fat left tail (skew -5.7, kurtosis 64.6), and negative returns in 6 of 7 years — losing on both spread directions.
Backtest and paper results are hypothetical. Trading involves risk of loss.