SolFourHourBollingerOversoldMeanReversionLong
Hypotheses
SOL 4H Bollinger Band Oversold Mean-Reversion Long with Daily Bull Regime Filter
Hypotheses
A long-only single-instrument MEAN-REVERSION strategy on SOLUSDT perpetual futures using 4-hour bars and OHLCV-only data, with a daily-bar bull-regime filter. This is a STRUCTURALLY ORTHOGONAL mechanism class to the portfolio: 6 of the 10 in-pipeline strategies are 4H Volume-Confirmed Breakouts (continuation/momentum), creating dangerous mechanism-concentration risk — all 6 will simultaneously exit when momentum regimes break. This proposal fills the missing counter-trend slot. The strategy enters long only when price closes below the LOWER Bollinger Band (20-period, 2-sigma, on 4H bars) AND the daily price is still above its 50-day EMA — meaning we are buying a short-term oversold dip within a structurally bullish regime, not catching a falling knife. The earlier AVAX Daily BB Mean-Reversion proposal was abandoned at Layer 3 due to infrastructure (auditor heartbeat on daily-bar fetch); this proposal uses 4H bars on SOL specifically because (a) SOL is the highest-Sharpe asset in current paper trading (Sharpe 4.42 via SolFourHourVolumeBreakoutLong), proving the SOL 4H data path is empirically reliable, (b) 4H bars have shown materially fewer Layer 3 infrastructure failures than daily, (c) SOL's higher volatility (~5% daily ATR) produces more frequent and larger BB excursions than BTC/ETH, generating dense walk-forward signals, (d) SOL has clean retail-driven oversold-then-bounce dynamics on intraday timeframes, well-suited to this mechanism. The mechanism FIRES when breakout strategies are SILENT (during pullbacks within uptrends), creating non-overlapping signal timing — true portfolio diversification, not just symbol diversification. Only 4 parameters total (BB period, BB std-dev multiplier, regime EMA period, stop-loss pct), all economically meaningful with stable interpretations, minimizing overfitting surface.
Hypotheses
Iteration 2 fix: the Layer-2 synthetic proxy rebinds user helper methods, so the previous @staticmethod _mean received an unexpected self argument ('takes 1 positional argument but 2 were given'). Converted _mean to a plain instance method (def _mean(self, values)), which matches how the proxy calls it and also works in the real strategy. No other logic changed — Layer 1 imports/structure stay clean and the signal/entry/exit logic that already passed Layer 1 is untouched. Implements the hypothesis as a counter-trend BB oversold dip-buyer with a load-bearing bull-regime gate, on the proven SOL 4H futures data path.
Hypotheses
Failed deflated Sharpe: DSR=0.2911 (vs 0.95 bar), expected-max=10.09 over 225 trials — the optimized Sharpe 7.40 is BELOW the best-of-N luck bar, indistinguishable from selection noise (is_significant=false), with sharpe_ci_low -9.998 (CI straddles 0) and PBO 0.7844. Every forward gate confirms a fragile, non-generalizing edge: walk-forward is_overfitted=TRUE with avg IS 9.64 collapsing to avg OOS -2.93 (windows [-8.79, 0.0, 0.0], one catastrophic and two zero-trade); the HOLDOUT FAILED with holdout_sharpe 0.0 (zero trades); and sensitivity FAILED with 2 cliffs on the strategy's CORE defining parameters — bb_period (Sharpe 2.78 at 20 drops to 1.46 at 22 / 1.80 at 18) and bb_std_mult (2.78 at 2.0 collapses to 0.96 at 1.6). The clean base backtest (99 trades, Sharpe 2.78) was misleading: its edge is front-loaded into 2021 (+71%, then 2022 -6% / 2024 -1% / 2026 -1.4%), and the negative walk-forward OOS shows the mean-reversion edge does not persist in later regimes. Tellingly, best-of-225 selection made the strategy WORSE — it drove bb_std_mult 2.0 -> 3.0 (deeper oversold) and collapsed the book from 99 trades to 3 (data_days 7, metrics_reliable=FALSE), starving the OOS/holdout windows. Not iterate (attempt 1 of 2): the failure is not an under-explored robust region but intrinsic signal fragility (core-parameter cliffs) plus a decaying, non-generalizing edge (negative OOS, failed holdout, PBO 0.78); constraining the parameter ranges only forces the optimizer back toward the 2021-concentrated base whose own walk-forward OOS is negative, so a second sweep re-finds an overfit or degenerate config. Not revise_hypothesis: this is a fragile, regime-decaying single-asset mean-reversion edge with no proven sibling stranded on a dead target — reframing onto another asset would re-fit the same fragility. FAILURE PATTERN: single-asset Bollinger oversold mean-reversion on a high-beta alt presents a clean, well-populated base backtest (99 trades, Sharpe 2.78, positive CI) that masks an edge front-loaded into one bull year (2021) and decaying thereafter; under best-of-225 optimization it fails on every forward axis — DSR 0.29 below a 10.09 luck bar, PBO 0.78, is_overfitted with avg OOS -2.93, a zero-trade failed holdout, and cliffs on the two core BB parameters — while the optimizer degenerates it to 3 trades chasing deep-oversold rare events. A clean base + low correlation is not edge; a mean-reversion signal whose defining parameters are cliffs and whose OOS is negative is unvalidatable, the same overfit/decay signature as the abandoned breakout-family siblings expressed in counter-trend form.
Implementation
Long-only 4H Bollinger Band oversold mean-reversion on SOLUSDT perpetual futures, gated by a bullish daily-regime filter (50-day EMA approximated from the 4H series). Enters long when the 4H close drops below the lower Bollinger Band (20-period, 2-sigma) while the regime EMA is still rising/above price; exits on reversion to the middle band, a hard stop-loss, or a regime break. Continuous z-score signal, risk-based capital-relative sizing.
Verification Results
Verification failed (Layer 2 — synthetic scenarios):
Parameters used: ['exit_z', 'risk_pct', 'bb_period', 'bb_std_mult', 'bars_per_day', 'min_notional', 'stop_loss_pct', 'size_precision', 'regime_ema_days', 'max_notional_frac']
Check that __init__ sets all attributes from self.parameters.get().
- steady_uptrend: TypeError: SolFourHourBollingerOversoldMeanReversionLong._mean() takes 1 positional argument but 2 were given (bar timestamp: 1735708860000)
- steady_downtrend: TypeError: SolFourHourBollingerOversoldMeanReversionLong._mean() takes 1 positional argument but 2 were given (bar timestamp: 1735708860000)
- flat_ranging: TypeError: SolFourHourBollingerOversoldMeanReversionLong._mean() takes 1 positional argument but 2 were given (bar timestamp: 1735708860000)
- volatility_spike: TypeError: SolFourHourBollingerOversoldMeanReversionLong._mean() takes 1 positional argument but 2 were given (bar timestamp: 1735708860000)
- zero_volume: TypeError: SolFourHourBollingerOversoldMeanReversionLong._mean() takes 1 positional argument but 2 were given (bar timestamp: 1735708860000)
- price_gap: TypeError: SolFourHourBollingerOversoldMeanReversionLong._mean() takes 1 positional argument but 2 were given (bar timestamp: 1735708860000)
Backtest Review
Trade pattern implements the hypothesis: 99 long mean-reversion trades, 63.6% win rate, ~1.3-day holds, 6.4% exposure — buying oversold dips and exiting on reversion
Backtest Review
Genuinely orthogonal to the breakout-heavy portfolio (benchmark_correlation 0.17, beta 0.018) — true mechanism diversification, the stated purpose
Backtest Review
Non-artifact metrics: Sharpe 2.78 with sharpe_ci_low 0.71 (>0), max_DD 14.9%, kurtosis 6.4 / skew 0.81 (not tail-driven), PSR 0.995
Backtest Review
Adequate sample (99 trades) and a small 4-parameter signal surface, limiting overfit risk during optimization
Backtest Review
Returns front-loaded into 2021 (+71%); 2024 (-1.0%) and 2026 (-1.4%) slightly negative — recent-regime durability must be confirmed in walk-forward/holdout
Backtest Review
avg_win ($3,714) slightly below avg_loss ($3,895): edge leans on win-rate rather than payoff asymmetry
Backtest Review
Commission 2.99% of gross — fee drag is non-trivial for a higher-frequency mean-reverter
Analysis
Base backtest was genuinely well-formed (99 trades, Sharpe 2.78, sharpe_ci_low 0.71, clean kurtosis 6.4 / skew 0.81) and mechanism-orthogonal to the breakout-heavy portfolio (benchmark_correlation 0.17)
Analysis
Low time-in-market (6.4% exposure) with proven SOL 4H data path — the design was a reasonable diversification candidate
Analysis
Holdout FAILED: holdout_sharpe 0.0 (zero trades), walk-forward OOS feeding it -2.93
Analysis
Walk-forward is_overfitted=TRUE: avg IS 9.64 collapses to avg OOS -2.93, OOS windows [-8.79, 0.0, 0.0] (one catastrophic, two zero-trade)
Analysis
Failed deflated Sharpe: DSR 0.2911, is_significant=FALSE, optimized Sharpe 7.40 BELOW the expected-max luck bar 10.09 over 225 trials; sharpe_ci_low -9.998 (CI straddles 0); PBO 0.7844
Analysis
Sensitivity FAILED with 2 cliffs on the CORE defining parameters bb_period (2.78@20 -> 1.46@22) and bb_std_mult ([email protected] -> [email protected]) — the signal is knife's-edge
Analysis
Optimizer degenerated the strategy from 99 trades to 3 (data_days 7, metrics_reliable=FALSE) by driving bb_std_mult 2.0 -> 3.0, chasing in-sample Sharpe into rare deep-oversold events
Analysis
Base edge is front-loaded into 2021 (+71%) and decays/negative thereafter — the negative walk-forward OOS confirms the mean-reversion edge does not persist forward
Outcome Summary
SolFourHourBollingerOversoldMeanReversionLong was proposed to fill the missing counter-trend slot in a breakout-concentrated portfolio, and its base backtest looked like a strong diversification candidate: 99 oversold-dip trades, a 63.6% win rate, Sharpe 2.78, a 14.9% drawdown, and a benchmark correlation of just 0.17, earning an 'optimize' verdict. But optimization exposed an edge front-loaded into 2021 and decaying afterward — sensitivity failed with cliffs on the two core Bollinger parameters, the walk-forward overfit with an average OOS of -2.93 (including a catastrophic -8.79 and two zero-trade windows), and the holdout produced zero trades. Best-of-225 selection made it worse, driving the band multiplier to 3.0 and collapsing the book to 3 unreliable trades; with a deflated Sharpe of 0.29 below a 10.09 luck bar and PBO 0.78, the analyst abandoned it on its second iteration as an unvalidatable, regime-decaying edge.
Outcome Summary
A clean, well-populated base backtest with genuine portfolio orthogonality is not proof of edge — when a mean-reversion signal's defining parameters sit on cliffs and the optimizer degenerates it from 99 trades to 3 chasing rare deep-oversold events, the edge is fragile and front-loaded, not durable.
Outcome Summary
The analyst abandoned it post-optimization on multiple failing gates: sensitivity FAILED with cliffs on the two core parameters (bb_period and bb_std_mult), the holdout FAILED with a zero-trade Sharpe of 0.0 fed by a -2.93 walk-forward OOS, walk-forward was_overfitted=TRUE (avg IS 9.64 collapsing to OOS -2.93 with windows [-8.79, 0.0, 0.0]), deflated Sharpe was 0.29 below the 10.09 luck bar, and PBO was 0.78.
Outcome Summary
A long-only, single-instrument counter-trend mean-reversion strategy on SOLUSDT 4H bars — buy when price closes below the lower Bollinger Band (20-period, 2-sigma) while a daily 50-EMA bull-regime gate confirms an uptrend, then exit on reversion to the middle band, a hard stop, or a regime break — explicitly added as a mechanism-orthogonal counterweight to the breakout-heavy portfolio.
Outcome Summary
The base backtest returned 97.3% total (CAGR 13.2%) over 99 mean-reversion trades with a 63.6% win rate, Sharpe 2.78 (CI low 0.71), profit factor 1.67, max drawdown 14.9%, just 6.4% exposure, and low benchmark correlation (0.17). Under optimization the config degenerated to only 3 trades over 7 days with metrics_reliable=FALSE, so its 7.40 Sharpe was an artifact.
Backtest and paper results are hypothetical. Trading involves risk of loss.