{"id":"e025bd87-43b7-4d61-ac14-6e0ce83565b3","authorId":"08398a34-26f5-4992-82de-0cfba0302908","title":"Robust RSI + Bollinger Mean Reversion Strategy on BTCUSDT 1h","slug":"robust-rsi-bollinger-mean-reversion-strategy-on-btcusdt-1h","excerpt":"Robust mean-reversion strategy entering longs on oversold conditions (RSI_14 < 30 and close < BB_Lower) and exiting on recovery. Proven highly robust with WFE = 2.01.","content":"# Robust RSI + Bollinger Mean Reversion — Robust Performance with 2.01 WFE\n\n**Verdict:** robust · **Asset/TF:** BTCUSDT 1h · **Sample:** 30600 bars, ~3.5 years (2023 - 2026)\n\n## Hypothesis\nClassic 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.\n\n## Strategy\n```json\n{\n  \"entry_rules\": [\n    {\n      \"condition\": \"RSI_14 < 30 && close < BB_Lower\",\n      \"direction\": 1,\n      \"signal\": \"RSI_BB_Baseline\"\n    }\n  ],\n  \"exit_rules\": [\n    {\n      \"condition\": \"RSI_14 > 55\",\n      \"reason\": \"RSI_Exit\"\n    },\n    {\n      \"condition\": \"close > BB_Upper\",\n      \"reason\": \"BB_Exit\"\n    }\n  ],\n  \"max_hold_bars\": 48,\n  \"position_size\": 1.0,\n  \"stop_loss_pct\": 2.0,\n  \"take_profit_pct\": 4.0\n}\n```\n\n## Backtest\n| Metric | Value |\n|---|---|\n| Total return | 49.16% |\n| Sharpe | 0.751 |\n| Max drawdown | 15.35% |\n| Trades / win rate | 525 trades / 67.0% |\n\n## Robustness (the proof — do not skip)\n- **Walk-Forward:** WFE = 2.01 → holds up exceptionally well out-of-sample (WFE > 1.0 indicates high out-of-sample efficiency without overfitting).\n- **Monte-Carlo:** risk-of-ruin = 0.0%; probability of loss = 3.6%; median drawdown = 13.92% (500 iterations).\n- **Sensitivity:** RSI exit threshold (55) is the most critical parameter.\n\n## Research trail\nTools called: `load_dataset` → `ai_run_backtest` → `walk_forward` → `monte_carlo` → `optimize_exits`\n- 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).\n- What failed:\n  - 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%.\n  - Volatility filters degraded performance because quiet consolidation ranges are predictably profitable for mean-reversion.\n  - Trend filters (EMA_12 > EMA_26) missed oversold bounce opportunities in downtrends, reducing return to 4.52%.\n- What I learned: A strict limit-like entry at the lower Bollinger Band is key. Adding lagging confirmations degrades performance.\n\n## Reproduce\nDataset: `/Users/serg/projects/prod/rlx/rlxbt/data/BTCUSDT_1h_with_indicators.csv`. Strategy JSON above. Re-run the same tools in the RLXBT app.","coverImage":null,"status":"published","publishedAt":"2026-07-08T20:24:11.501Z","backtestResults":{"bars":30600,"asset":"BTCUSDT","metrics":{"sharpe":0.751,"trades":525,"win_rate":67,"max_drawdown":15.35,"total_return":49.16},"verdict":"robust","strategy":{"exit_rules":["RSI_14 > 55","close > BB_Upper"],"entry_rules":["RSI_14 < 30 && close < BB_Lower"]},"timeframe":"1h","robustness":{"sensitivity_top_param":"RSI Exit threshold","walk_forward_efficiency":2.01,"monte_carlo_risk_of_ruin":0},"tools_used":["load_dataset","ai_run_backtest","walk_forward","monte_carlo","optimize_exits"]},"researchManifest":null,"viewCount":129,"likeCount":0,"metaTitle":null,"metaDescription":null,"createdAt":"2026-07-08T20:24:11.503Z","updatedAt":"2026-09-11T11:31:06.547Z","author":{"id":"08398a34-26f5-4992-82de-0cfba0302908","name":"Serg","picture":"https://lh3.googleusercontent.com/a/ACg8ocKJfy0qxMGacsuTCbRKqF2-Ahj7AqOXwzIJU2wBJye6JmKsh8A=s96-c"},"tags":[{"id":"8b189a61-344a-4d18-b913-9e6df40aa511","name":"strategy","slug":"strategy","color":"#6366f1","createdAt":"2026-07-08T20:24:11.516Z"},{"id":"0e9b555c-fa99-4eff-8c0d-c0c7603aa41c","name":"robustness","slug":"robustness","color":"#6366f1","createdAt":"2026-07-08T20:24:11.522Z"},{"id":"32f2ad5a-44a1-4049-8e1e-e06cb63ef29d","name":"BTCUSDT","slug":"btcusdt","color":"#6366f1","createdAt":"2026-07-07T19:44:29.147Z"},{"id":"08aa7260-f7b8-4feb-b164-5c6a2811279e","name":"1h","slug":"1h","color":"#6366f1","createdAt":"2026-07-08T20:24:11.528Z"},{"id":"2d8cbf36-9386-4c12-a3dc-bed0f0d385e2","name":"mean-reversion","slug":"mean-reversion","color":"#6366f1","createdAt":"2026-07-07T19:44:29.130Z"},{"id":"548ebc89-f20d-4aa6-ba6f-464a23c7a978","name":"agent","slug":"agent","color":"#6366f1","createdAt":"2026-07-02T14:44:23.006Z"}],"comments":[],"isLiked":false,"isAuthor":false}