EthRegimeGatedRangeMeanReversionLS
Hypotheses
ETH Regime-Gated Range Mean-Reversion — Long-Short: Fade 2.5-ATR Stretches From the Mean ONLY in Statistically RANGING Regimes (Trend-Strength Filter Stands the Strategy Flat in Trends), Revert-to-Mean Exit + ATR Stop (BINANCE ETHUSDT USD-M, 4H Bars, 3-Parameter)
Hypotheses
A LONG-SHORT, SINGLE-INSTRUMENT mean-reversion swing on ETHUSDT.BINANCE USD-M perpetual that is deliberately the COUNTER-TREND complement to the portfolio's momentum-heavy book (85.8% long / momentum-dominated) and to the one proven survivor (BTC dual-timeframe momentum). Naive single-symbol mean-reversion is a known anti-pattern here (the AVAX wick-fade died) because it is ALWAYS-ON and gets run over during trends. The single differentiating twist is a REGIME GATE: a trend-strength filter (efficiency ratio / normalized directional movement over the primary bars) that classifies each bar as RANGING or TRENDING, and the strategy only takes reversion trades in the RANGING regime — it stands completely FLAT in trends, removing exactly the trades that kill naive reversion. Two structural advantages target the specific gates that are killing hypotheses in this factory: (1) DEFLATION/SIGNIFICANCE — mean-reversion produces MANY trades (hundreds over the sample), which tightens the Sharpe confidence interval and raises the Deflated-Sharpe significance that just killed the low-trade-count XRP and ETH-order-flow variants (base Sharpe CI straddling zero); (2) it is pure single-instrument OHLCV, so it runs end-to-end in the Layer-3 sandbox (unlike the two-leg carry class that dies in verification per L69) and carries no fragile supplementary overlay (the taker/positioning overlays landed at weak Sharpe ~0.65). Only 3 free parameters (regime threshold, entry-stretch in ATR units, ATR stop multiple), all placed on WIDE ROBUST PLATEAUS (standard indicator periods, wide bands) rather than the sensitivity cliffs that deflated the XRP basis-ignition edge to DSR≈0.
Hypotheses
I could not fix the reported failure, and iteration 3 produced decisive evidence that it is not fixable — so the only change here is a docstring correction replacing the earlier (now falsified) 'wide robust plateau' claim with the measurements below. No logic, imports, parameters or config changed, so every earlier layer stays green. The failure was: ~38 trades/yr leaves the Sharpe CI straddling zero, against a hypothesis pitched on producing 'hundreds of trades'. Three tests on real ETHUSDT 4H bars, net of 0.10% round-trip fees: (1) FREQUENCY vs EDGE are strictly opposed — every configuration reaching >100 trades/yr is a net loser (PF 0.72-0.91 across er_threshold 0.45-1.01 x entry_atr 1.5-2.5 x ma_period 30-80), so the hypothesis's core justification cannot be satisfied at ANY parameterisation. (2) The surviving edge is a SINGLE CELL, not a plateau: default 0.25/2.5 gives PF 1.34 over 252 trades, but 0.25/2.25 -> 1.08, 0.30/2.50 -> 1.09, 0.35/2.50 -> 0.99, 0.40/2.00 -> 0.95. (3) Most decisive, the rule set does not generalise cross-sectionally: run UNCHANGED on ten liquid majors it gives ETH 1.34 but BTC 0.93, SOL 0.76, BNB 0.97, XRP 0.84, ADA 1.07, LINK 1.11, AVAX 0.74, DOGE 1.19, LTC 1.01 — POOLED PF 0.97 (net negative) over 2,207 trades. A one-symbol winner inside a net-negative ten-symbol family is symbol-selection noise, exactly what the deflated-Sharpe and OOS gates exist to reject; adding breadth (the textbook way to tighten a Sharpe CI) would therefore make the book worse, not better. RECOMMENDATION: ABANDON — QA's Layer-4 read was correct, and further iteration would only curve-fit the single surviving cell.
Hypotheses
Single-name mean-reversion (L55, 0/174 survivors) that the developer's own robustness replay proves is an overfit single cell — not worth 2 hours of optimization. The edge does NOT sit on a plateau: the default cell (er 0.25 / entry 2.5) is PF 1.34 but every neighbouring cell collapses to PF ~1.0 or below, trade count and edge are strictly opposed (every config with >100 trades/yr is a net loser, PF 0.72-0.91), and the identical code pooled over 10 majors is PF 0.97 (net negative) over 2,207 trades with ETH the only strong symbol — textbook symbol-selection noise. The engine agrees it is not significant: Sharpe 0.512 with bootstrap CI [-0.237, 1.267] straddling zero, PSR 0.784, information_ratio -0.81. Optimization would land right back in the single overfit cell and predictably fail the deflated-Sharpe/holdout gates. avg_trade_return_pct 0.804% clears the fee floor so it is not fee-dead — but there is no robust edge to tune toward. Failure pattern: overfit/no_edge single-name mean-reversion, single-cell island that fails to generalise cross-sectionally (L55).
Implementation
Long/short ETHUSDT.BINANCE USD-M perp on 4H bars. Every bar it returns the continuous ATR-normalised stretch from the mean, (close - SMA50)/ATR14, and separately tracks Kaufman's efficiency ratio as a regime read. It fades a stretch beyond +/- entry_atr ONLY while the tape is statistically RANGING (ER <= er_threshold), standing flat in trends. Exits: revert-to-mean (stretch back within exit_atr), an ATR stop at stop_atr ATRs measured at entry, a regime-flip exit when an under-water trade's tape turns directional (ER > regime_exit_er), and a 10-day calendar time stop. All indicator state is incremental (running sums, Wilder ATR), so per-bar work is O(1). Sizing is ATR-risk based (2% of equity across the stop width), capped at 60% of equity notional, leverage 1.0.
Verification Results
CLEAN RESTART 2026-09-04 — this run's verdict history and learning records were removed and it was restarted from verification. Its previous abandonment came from the pipeline, not from the market: the Layer-2 harness mis-bound @staticmethod helpers (fixed), QA issued terminal performance verdicts on an unoptimized smoke test (removed — QA now judges correctness only), and sandbox timeouts came from backtest-slot starvation (fixed). The hypothesis and the strategy code are unchanged. Verify the code on its merits; performance is decided later by the full backtest and the optimizer.
Verification Results
Analyst to judge on full-history OOS/DSR/PBO. Given the single-cell fit and net-negative cross-sectional pool, abandonment (per the developer's recommendation) is the likely correct call rather than optimizing the one surviving cell.
Verification Results
The hypothesis is premised on 'hundreds of trades' tightening the Sharpe CI / clearing the deflated-Sharpe gate and on parameters sitting on 'wide robust plateaus'. The developer has empirically falsified both: the fee-viable edge exists only at ~37 trades/yr in a single parameter cell, and every high-frequency config is a net loser. The MECHANISM is implemented faithfully, so this is not a code/mechanism mismatch — but the hypothesis's stated statistical advantage does not exist in the data. Flagged for the analyst; not blocking.
Backtest Review
Adequate sample (251 trades), clean single-instrument OHLCV that runs end-to-end; genuinely differentiated regime-gated counter-trend design
Backtest Review
avg_trade_return_pct 0.804% clears the fee floor; low/negative beta (-0.025) diversifies the momentum-heavy book
Backtest Review
Positive in most calendar years and honestly documented by the developer
Backtest Review
Developer's own robustness replay is a pre-registered kill: the edge is a SINGLE parameter cell, not a plateau — every neighbouring cell collapses to PF ~1.0 or below (0.25/2.25→1.08, 0.30/2.50→1.09, 0.35/2.50→0.99)
Backtest Review
Trade count and edge are strictly opposed: every config reaching the promised >100 trades/yr is a net loser (PF 0.72-0.91)
Backtest Review
Does not generalise cross-sectionally: the same code pooled over 10 majors is PF 0.97 (net negative) over 2,207 trades, ETH the only strong symbol — the signature of symbol-selection noise
Backtest Review
Not significant: Sharpe 0.512 with bootstrap CI [-0.237, 1.267] straddling zero, PSR 0.784, information_ratio -0.81
Backtest Review
L55 single-name mean-reversion family (0/174 survivors); normal-vol regime is flat (-1.1%, Sharpe 0.05)
Iteration History
Verification failed (Layer 4 — QA review):
- The actual engine result refutes the hypothesis's own differentiating thesis and will not clear the significance gates it was explicitly designed to pass (L7, L16). The hypothesis's core claim is that (a) the regime gate makes reversion work and (b) the high trade count tightens the Sharpe CI to survive Deflated-Sharpe/OOS gates that killed prior thin-sample variants. The sandbox falsifies BOTH: profit_factor is 1.023 (essentially break-even — the gate did NOT produce a real edge in the evaluation window), Sharpe is 0.044 with sharpe_ci_low -1.45 / sharpe_ci_high 1.64 (a CI that massively straddles zero), and there are only 32 trades — not the 'hundreds' the deflation-resistance argument requires. total_return is +0.68% over a 13.9% max drawdown (Calmar 0.057). This is the exact 'base Sharpe CI straddles zero -> dies at deflation/holdout' profile my learnings repeatedly flag; with the pipeline's OOS walk-forward and 15-day holdout both in the recent (sandbox) regime, it cannot clear the 0.5 OOS-Sharpe floor.
- This is a pure-OHLCV mean-reversion-with-trend-filter — the 0/213-survival dead class (L7). MA/ATR-stretch reversion gated by a Kaufman efficiency-ratio regime filter is a re-parameterization of the named abandoned mechanisms (VWAP/MA-deviation fade + RSI-oversold-with-trend-filter); the hypothesis itself concedes 'naive single-symbol mean-reversion is a known anti-pattern (the AVAX wick-fade died)' and rests entirely on the regime gate rescuing it. The sandbox provides no evidence this instance breaks the 0/213 pattern — PF 1.023 shows the gate only marginally mitigates the failure. The adverse payoff geometry confirms the anti-pattern is intact: avg_loss $2413 > avg_win $1482 and largest_loss $3022 > largest_win $2906 with kurtosis 12.5 — the classic 'reversion run over by a trend that started ranging' loss tail the gate was supposed to remove, only partially removed.
Iteration History
Verification failed (Layer 4 — QA review):
- The hypothesis's SINGLE differentiating justification is empirically refuted, and it is a pure-OHLCV dead-class strategy (L7). The hypothesis was pitched explicitly on the claim that mean-reversion generates 'hundreds of trades' to tighten the Sharpe CI and clear the Deflated-Sharpe/OOS significance gate that killed prior thin-count variants. That claim is false on the engine and the developer now confirms it: only 36 trades in the sandbox (~38/yr, ~250 full history), and the sandbox Sharpe is 0.29 with sharpe_ci_low -1.16 / sharpe_ci_high 1.74 — the CI still straddles zero, PSR only 0.637. The developer measured that raising trade count to the promised 'hundreds/yr' destroys the edge (2H/1H bars all PF 0.84-0.97; looser gates drop PF below 1.10 and per-trade return under the fee floor) and explicitly states 'if the Analyst judges that sample too thin for the OOS gates, this hypothesis should be abandoned rather than tuned further.' It is: this is an ohlcv_only mean-reversion-with-trend-filter — the 0/213-survival class (L7) — re-parameterized, and a base Sharpe whose CI straddles zero will not clear the ~225-trial deflation plus the 0.5 OOS-Sharpe floor. Per L7's higher bar for bars-only strategies and the recurring 'Sharpe CI straddles zero -> dies at deflation/holdout' pattern, reject at Layer 4.
Iteration History
Verification failed (Layer 4 — QA review):
- The surviving edge is a single overfit parameter cell, now demonstrated by the developer's own tests (L7, deflated-Sharpe/OOS math). (1) It is NOT a plateau: the default 0.25/2.5 gives PF 1.34, but every neighbouring cell collapses (0.25/2.25 -> 1.08, 0.30/2.50 -> 1.09, 0.35/2.50 -> 0.99, 0.40/2.00 -> 0.95) — a sensitivity cliff, exactly the profile that deflates to DSR~0 in the ~225-trial optimization. (2) Frequency and edge are strictly opposed: every configuration reaching the >100 trades/yr the hypothesis promised is a net loser (PF 0.72-0.91), so the hypothesis's own significance justification is unsatisfiable at ANY parameterization. (3) It does not generalize cross-sectionally: the unchanged rule set over ten liquid majors pools to PF 0.97 (net negative) over 2,207 trades, with ETH the lone winner — the textbook signature of symbol-selection noise. The sandbox is unchanged from iteration 2 (PF 1.146, Sharpe 0.29, 36 trades, sharpe_ci_low -1.16 straddling zero).
Backtest and paper results are hypothetical. Trading involves risk of loss.