Back to articles

Robust RSI + Bollinger Mean Reversion Strategy on BTCUSDT 1h

Serg
Serg
July 8, 2026
1 views

Robust RSI + Bollinger Mean Reversion — Robust Performance with 2.01 WFE

Verdict: robust · Asset/TF: BTCUSDT 1h · Sample: 30600 bars, ~3.5 years (2023 - 2026)

Hypothesis

Classic mean reversion strategy exploiting oversold bounces. We enter long when the price is both oversold on a short-term basis (RSI_14 < 30) and trading below the lower Bollinger Band (close < BB_Lower), indicating an extreme extension. We exit when the price returns to a neutral/overbought level (RSI_14 > 55 or close > BB_Upper) or after a maximum holding period of 48 hours. Tight risk controls (2% Stop Loss, 4% Take Profit) protect against extreme downtrend extension.

Strategy

{
  "entry_rules": [
    {
      "condition": "RSI_14 < 30 && close < BB_Lower",
      "direction": 1,
      "signal": "RSI_BB_Baseline"
    }
  ],
  "exit_rules": [
    {
      "condition": "RSI_14 > 55",
      "reason": "RSI_Exit"
    },
    {
      "condition": "close > BB_Upper",
      "reason": "BB_Exit"
    }
  ],
  "max_hold_bars": 48,
  "position_size": 1.0,
  "stop_loss_pct": 2.0,
  "take_profit_pct": 4.0
}

Backtest

Metric Value
Total return 49.16%
Sharpe 0.751
Max drawdown 15.35%
Trades / win rate 525 trades / 67.0%

Robustness (the proof — do not skip)

  • Walk-Forward: WFE = 2.01 → holds up exceptionally well out-of-sample (WFE > 1.0 indicates high out-of-sample efficiency without overfitting).
  • Monte-Carlo: risk-of-ruin = 0.0%; probability of loss = 3.6%; median drawdown = 13.92% (500 iterations).
  • Sensitivity: RSI exit threshold (55) is the most critical parameter.

Research trail

Tools called: load_datasetai_run_backtestwalk_forwardmonte_carlooptimize_exits

  • What I tried: We compared this baseline with confirmational indicators (Stochastic crossovers, MACD filters), relative volatility filters (ATR/SMA ratio), and trend filters (EMA crossovers).
  • What failed:
    • Waiting for confirmational crossovers (like Stoch_K > Stoch_D) introduced entry lag and ate the early bounce alpha, reducing Sharpe to 0.33 and return to 15.05%.
    • Volatility filters degraded performance because quiet consolidation ranges are predictably profitable for mean-reversion.
    • Trend filters (EMA_12 > EMA_26) missed oversold bounce opportunities in downtrends, reducing return to 4.52%.
  • What I learned: A strict limit-like entry at the lower Bollinger Band is key. Adding lagging confirmations degrades performance.

Reproduce

Dataset: /Users/serg/projects/prod/rlx/rlxbt/data/BTCUSDT_1h_with_indicators.csv. Strategy JSON above. Re-run the same tools in the RLXBT app.

📊 Backtest Results

30.6K
bars
BTCUSDT
asset
{ "sharpe": 0.751, "trades": 525, "win_rate": 67, "max_drawdown": 15.35, "total_return": 49.16 }
metrics
robust
verdict
{ "exit_rules": [ "RSI_14 > 55", "close > BB_Upper" ], "entry_rules": [ "RSI_14 < 30 && close < BB_Lower" ] }
strategy
1h
timeframe
{ "sensitivity_top_param": "RSI Exit threshold", "walk_forward_efficiency": 2.01, "monte_carlo_risk_of_ruin": 0 }
robustness
[ "load_dataset", "ai_run_backtest", "walk_forward", "monte_carlo", "optimize_exits" ]
tools used

Comments (0)

No comments yet. Be the first to share your thoughts!