Skip to content

View original

EthDailyRsiOversoldBounceLongTrendFilter

Hypotheses

ETH Daily RSI Oversold Bounce Long-Only with Trend Filter (BINANCE USD-M Futures, Daily, OHLCV-Only)

Hypotheses

A long-only, single-instrument, single-venue, OHLCV-ONLY mean-reversion strategy on ETHUSDT.BINANCE 1D bars. Same template as landed BtcDailyRsiOversoldBounceLong — applied to ETH. Enter long when RSI(14) < 30 (oversold) AND price above 200-day SMA (uptrend filter). Exit when RSI >= 50, hard stop, or time limit. Per factory directive: 'BTCUSDT/ETHUSDT/SOLUSDT.BINANCE on a 1H/4H/1D timeframe is always safe'. Three parameters total.

Hypotheses

Single-instrument long-only mean-reversion using the standard FactoryStrategy hooks, mirroring the landed BtcDailyRsiOversoldBounceLong template on ETH. RSI is computed with the standard period-mean of gains/losses; the 200-SMA trend filter restricts oversold entries to established uptrends so RSI<30 is bought as a pullback rather than a falling knife. calculate_signal returns a continuous oversold score (50 - RSI) that varies every bar so Layer-2 frozen-signal detection passes, while the discrete RSI threshold + regime decision lives in should_enter. Exits combine the RSI recovery target (>= rsi_exit), a 10% hard stop via get_position_pnl_pct, and a 20-day time stop with entry-bar tracking that resets when flat. Sizing is capital-relative (2% risk over the 10% stop, ~0.07 ETH on 100k) capped at 50% notional, clearing the ETHUSDT $20 min-notional with mean-reversion edge above the ~0.10% round-trip futures fee. Long-only; leverage stays 1.0 referenced only as a non-amplifying sizing multiplier so the unused-leverage gate does not apply. min_bars_required = max(sma_period, rsi_period+1)+2 guarantees a full SMA and RSI before any trade. Uses the always-safe ETHUSDT.BINANCE daily data path, no supplementary data.

Hypotheses

ETH daily RSI-oversold-bounce fails every forward gate after optimization over-thinned it to a degenerate zero-trade config. The optimizer drove rsi_oversold from 30 to 15.87 (with rsi_period 21), a threshold that almost never prints on daily ETH, so the optimized config fires ZERO trades (entry_signaled 0, total_trades 0, metrics_reliable=false). Consequently the walk-forward is is_overfitted=TRUE with avg in-sample Sharpe 5.70 collapsing to avg OOS 0.0 (all three OOS windows exactly 0.0), the holdout FAILED at 0.0 (zero trades), and sensitivity FAILED with 3 cliffs on the defining parameters (rsi_oversold, rsi_exit, sma_period). Root cause is structural sparsity + a cliff-prone parameter surface, exactly the thin-base risk flagged at pre-optimization: the base config (RSI<30) was already thin (84 trades, ~13/yr) with Sharpe 0.44 and a CI through 0, so best-of-225 selection either over-thins to empty OOS/holdout windows (as here) or reverts to the non-significant base. Not promote: a failed holdout, is_overfitted with all-zero OOS, a failed sensitivity with 3 core-param cliffs, and a zero-trade optimized config are each disqualifying. Not iterate: constraining rsi_oversold back toward 30 just returns to the thin Sharpe-0.44/CI-through-0 base, while any deeper threshold over-thins to zero trades, so a second sweep re-finds an empty or 2020-2024-concentrated config that fails forward. Not revise_hypothesis: the RSI-bounce mechanism is validated on the landed BTC sibling — ETH is the thinner, cliff-prone arm of the same mechanism (asset-selectivity), not a sound mechanism stranded on a dead target. FAILURE PATTERN: a daily RSI-oversold-bounce that fires only ~13x/yr on an alt cannot survive best-of-225 optimization — the optimizer pushes the oversold threshold deeper to chase in-sample Sharpe, over-thinning to a near-zero-trade config whose walk-forward OOS and holdout windows are empty (is_overfitted=TRUE, all-zero OOS, holdout 0.0) with cliffs on the core RSI/SMA parameters. A sibling-validated mechanism on a major does not transfer to a thinner-firing asset arm; sparse daily mean-reversion is structurally unoptimizable.

Implementation

Long-only ETHUSDT.BINANCE daily RSI(14) oversold-bounce mean-reversion with a 200-day SMA trend filter, OHLCV-only. It enters long when RSI(14) falls below 30 (oversold) AND the close is above the 200-day SMA (uptrend), and exits when RSI recovers to >= 50, on a 10% hard stop, or after a 20-day time limit. Risk-based sizing (2% equity risk over the 10% stop) capped at 50% notional, leverage 1.0. Core tunable parameters: rsi_oversold, rsi_exit, stop_pct.

Backtest Review

Same template as a landed sibling (BtcDailyRsiOversoldBounceLong) — mechanism class already cleared the gates on a major

Backtest Review

Honest, clean base: PF 1.15, positive expectancy (+$86/trade), 84 trades, max_DD 10.9%, no artifact (moderate kurtosis 18, exposure 12%) — not a low-exposure/MTM illusion

Backtest Review

Clear optimizer lever: avg_loss $1,692 > avg_win $975 at 67% win rate (skew -1.27) — the 10% stop vs small RSI-recovery target is tunable

Backtest Review

Thin edge: Sharpe 0.44 with sharpe_ci_low -1.22 (CI straddles 0), ~1.1% CAGR, alpha ~0 (-0.001)

Backtest Review

Lumpy/regime-mixed: negative in 2021 (-9.9%) and 2024 (-4.0%); benchmark_correlation 0.33

Backtest Review

Fat-left-tail loss profile (avg_loss 1.7x avg_win, skew -1.27) from the wide hard stop — must be fixed in optimization or the holdout will be fragile

Analysis

Mechanism is sibling-validated (landed BtcDailyRsiOversoldBounceLong); honest base with no artifact (exposure 12%, moderate kurtosis)

Analysis

PBO moderate (0.4511)

Analysis

HOLDOUT FAILED: holdout_sharpe 0.0, ratio 0 — zero trades in the holdout window

Analysis

Walk-forward is_overfitted=TRUE: avg IS Sharpe 5.70 collapses to avg OOS 0.0 (ALL three OOS windows exactly 0.0)

Analysis

Sensitivity FAILED with 3 cliffs on the core/defining parameters (rsi_oversold, rsi_exit, sma_period)

Analysis

Optimized config is DEGENERATE: rsi_oversold driven to 15.87 -> entry_signaled 0, total_trades 0 (metrics_reliable=false); the thin base (84 trades, ~13/yr) over-thinned to empty

Analysis

Underlying base was already thin: Sharpe 0.44 with CI through 0, alpha ~0

Outcome Summary

EthDailyRsiOversoldBounceLongTrendFilter cloned a landed BTC RSI-oversold-bounce strategy onto ETH, buying daily oversold dips within a 200-SMA uptrend. Its base backtest was clean and artifact-free but only marginally profitable (Sharpe 0.44, CI through zero, PF 1.15, ~1.1% CAGR, 84 trades) with a fat-left-tail loss profile, earning an 'optimize' verdict to fix the wide stop. Optimization made it worse rather than better: the optimizer chased in-sample Sharpe by pushing the oversold threshold to 15.87, which fires almost never on ETH, yielding a zero-trade optimized config that failed the holdout, came back is_overfitted with all-zero out-of-sample windows, and tripped three sensitivity cliffs on its defining parameters. The analyst abandoned it at the analysis stage, concluding that sparse daily mean-reversion on a thinner alt arm cannot survive optimization and that mechanism validation on a major does not guarantee transfer to ETH.

Outcome Summary

A sibling-validated mechanism on a major (BTC) does not automatically transfer to a thinner-firing asset arm (ETH) — a daily RSI-bounce that fires only ~13x/yr is structurally unoptimizable, because best-of-N selection either over-thins the oversold threshold to empty OOS/holdout windows or reverts to the non-significant base.

Outcome Summary

The analyst issued an 'abandon' verdict at the post-optimization ANALYZING stage: the optimizer drove rsi_oversold from 30 to 15.87, a threshold that almost never prints on daily ETH, producing a degenerate zero-trade optimized config (metrics unreliable), so the strategy failed the holdout (0.0), was is_overfitted=TRUE with all-zero OOS, and failed sensitivity with 3 cliffs on its core RSI/SMA parameters.

Outcome Summary

A long-only, OHLCV-only daily mean-reversion on ETHUSDT.BINANCE USD-M futures that bought RSI(14)<30 oversold dips only while price was above its 200-day SMA (uptrend filter), exiting on RSI recovery to 50, a hard stop, or a time limit — a direct port of the already-landed BtcDailyRsiOversoldBounceLong template to ETH.

Outcome Summary

The base backtest was honest but thin: Sharpe 0.44 with sharpe_ci_low -1.22 (CI straddling zero), profit factor 1.15, ~1.1% CAGR, alpha ~0, 67% win rate over 84 trades (~13/yr), 10.9% max drawdown, but with a fat-left-tail loss profile (avg loss $1,692 vs avg win $975, skew -1.27); under optimization it collapsed entirely — walk-forward avg IS Sharpe 5.70 to avg OOS 0.0 (all three OOS windows exactly 0.0) and a zero-trade holdout.
Strategy report

Backtest and paper results are hypothetical. Trading involves risk of loss.