RSI + Stochastique + Bollinger M5 — reversal sur extrêmes confluents
Stratégie de retour à la moyenne à triple confirmation. L'idée : quand trois indicateurs d'extrême concordent simultanément, la probabilité d'un retournement à court terme est statistiquement supérieure à chacun pris isolément.
⛔ Rejetée OOS — backtest 2026-06-14. Testée sur 14 ans de vraies données EUR/USD M5 Dukascopy (1 139 703 barres, 2012→2026, 5 377 trades), la stratégie perd de l'argent net de spread, en IS comme en OOS, chaque année sans exception :
Cohorte n avg/trade total hit Profit Factor ALL 5 377 −0.67 pip −3 622 pips 17.3 % 0.71 Tradable (stop ≥ 3 pips) 1 113 −0.74 pip −824 pips 25.5 % 0.83 IS (2012→~2022) 3 373 −0.64 pip −2 148 pips 17.3 % 0.73 OOS (~2022→2026) 2 004 −0.74 pip −1 474 pips 17.4 % 0.68 Deux causes structurelles :
- Géométrie SL/TP non viable :
SL = bande − 1×ATR,entry = closeà un extrême → stop médian de 1.44 pip, et 79 % des signaux ont un stop sous le spread (non tradables). Le R par trade explose artificiellement (un trade à 8 148 R sur un stop sous-pip) — d'où la mesure en pips net de spread, seule unité honnête ici.- Pas d'edge même sur le sous-ensemble tradable : PF 0.83 < 1, toutes années négatives, long et short perdants. La triple confluence ne sauve pas le timing.
Artefacts reproductibles :
hermes/scripts/backtest_rsi_stoch_bb_m5.py,hermes/data/rsi_stoch_bb_m5_backtest.json,hermes/data/backtests/rsi_stoch_bb_m5_trades.csv.Conséquence : ne pas trader. Conservée comme cas pédagogique (visualisable via l'overlay
▲▽ Stratégie MRdu pilier A) et exemple d'une triple confluence qui semble solide mais ne survit pas au coût de transaction. Rejoint le registre des stratégies rejetées OOS du repo.
Mécanique
Indicateurs :
BB(20, 2σ) → upper, middle (SMA20), lower
RSI(14) → 0-100
Stoch(14) → 0-100 (%K)
Signal ACHAT — les 3 conditions doivent être vraies simultanément :
low ≤ BB.lower (la mèche touche ou passe sous la bande basse)
RSI < 30 (momentum survendu)
Stoch < 20 (momentum survendu confirmation)
Signal VENTE — les 3 conditions doivent être vraies simultanément :
high ≥ BB.upper (la mèche touche ou passe au-dessus de la bande haute)
RSI > 70 (momentum suracheté)
Stoch > 80 (momentum suracheté confirmation)
⚠️ La touche de bande est mesurée sur la MÈCHE (low/high), pas sur le close.
Un close atteint très rarement sa propre bande à 2σ (le close est le prix
central qui sert à calculer la bande) ; la mèche est l'usage standard pour
"le prix touche la bande". Vérifié empiriquement : close-touch = 0 signal
sur données simulées, mèche-touch = 0-3 signaux (triple confluence rare
par conception).
Entrée : close de la bougie qui remplit les 3 conditions
Stop : au-delà de la bande d'1 ATR(14)
LONG → SL = BB.lower − 1×ATR
SHORT → SL = BB.upper + 1×ATR
TP : BB.middle (SMA20) — retour à la moyenne statistique
→ sortir 100% ou 50/50 : 50% à la moyenne, 50% à la bande opposée
Filtre régime obligatoire (voir Pièges) :
ADX(14) < 25 OU Choppiness > 55
Sinon : signal ignoré même si les 3 conditions sont vraies
Logique de la triple confluence
| Indicateur | Ce qu'il mesure | Pourquoi insuffisant seul |
|---|---|---|
| Bollinger | Écart statistique au prix courant | Walking the bands en trend fort |
| RSI | Vitesse et magnitude du mouvement | Peut rester < 30 pendant 20+ barres en chute libre |
| Stochastique | Position relative dans le range N-périodes | Même problème que RSI, légèrement plus réactif |
La conjonction des trois réduit les faux signaux en tendance : quand le prix "walk the bands", RSI et Stoch tendent à rester en zone extrême mais ils divergent souvent de Bollinger (price structure ≠ momentum). La troisième condition filtre ~40% des faux positifs attendus sur BB seul.
Conditions favorables
- Marché en range ou légèrement directionnel — ADX < 25 est le filtre numéro 1
- Choppiness > 55 — confirme absence de trend
- Spread faible — sur M5, le spread représente souvent 20-40% du mouvement prévu
- Session London overlap ou début NY — liquidité suffisante pour l'exécution
- Pas de news HVCAL dans la prochaine heure — un NFP/CPI détruit le setup en 10 secondes
Stop / Take Profit
- Stop : BB.lower − 1×ATR (long) / BB.upper + 1×ATR (short)
- Ne pas mettre le stop à la bande elle-même — wicks fréquents sur M5
- TP principal : BB.middle (SMA20) — ratio R:R typiquement 0.8-1.5
- TP étendu : bande opposée — ratio R:R 2-3, hit-rate divisé par 2
- Trailing stop : déplacer à break-even quand price > SMA20 puis suivre au close M5
Indicateurs utilisés
- Bollinger 20 — déclencheur prix
- Bollinger %B — version normalisée, utile pour scanner
- RSI 14 — confirmation momentum
- Stochastique 14 — confirmation momentum secondaire
- ADX 14 — filtre régime obligatoire
- ATR 14 — calibrer le stop
TF privilégiés
M5 est le TF cible de cette stratégie, mais c'est aussi le plus bruyant. Recommandation pratique : utiliser M15 comme filtre directionnel. Ne prendre que les setups M5 dans le sens du bias M15 (RSI M15 entre 40-60 = pas de trend clair = setup M5 valide).
Sur M1 : trop de bruit, spread trop coûteux. Sur M15 ou H1 : setup plus rare mais qualité supérieure.
Pièges
- Walking the bands sur M5 en news : un CPI ou NFP peut envoyer le prix "walk" la bande supérieure pendant 30 barres M5. Trois conditions réunies à chaque bougie = 30 signaux SELL perdants. Le filtre ADX est non-négociable.
- Spread > TP potentiel : si la distance entre le close et la SMA20 est de 5 pips et que le spread est de 3 pips, le setup est non-rentable mécaniquement. Calculer avant d'entrer.
- RSI et Stoch convergent mais Bollinger pas encore touché : attendre. La condition Bollinger est la plus sélective des trois — forcer l'entrée avant la touche de bande revient à la stratégie RSI-seul, moins filtrée.
- Aucune bougie de confirmation : ce setup peut être complété par l'exigence d'un Hammer ou Engulfing bullish/bearish sur la bougie signal. Réduit le nombre de trades mais améliore la qualité.
- Multiple signaux consécutifs : si le prix reste 3 barres sous la BB lower avec RSI < 30 et Stoch < 20, prendre uniquement le premier signal. Les suivants sont souvent des re-entrées dans un marché qui continue à tomber (trapping).
Backtest — statut et next step
| Étape | Statut |
|---|---|
| Spec stratégie | ✅ Ce document |
| Implémentation visuelle pilier A | ✅ Overlay ▲▽ Stratégie MR sur le chart (toggle OVERLAY) — forex-assistant.tsx::mrSignals |
| Backtest Python Dukascopy EUR/USD M5 | ✅ 2026-06-14 — backtest_rsi_stoch_bb_m5.py, 14 ans, 5 377 trades |
| Validation IS/OOS (split 70/30) | ✅ REJETÉE — PF 0.73 IS / 0.68 OOS, toutes années négatives |
| Intégration Hermes | ⛔ Abandonnée — pas d'edge, conditionnel non rempli |
Règle du repo respectée : les chiffres publiés ci-dessus proviennent du backtest Python avec artefacts complets (CSV trades + script reproductible + métriques JSON), sur données réelles Dukascopy. Voir
docs/strategies/breakout/london-breakout.mdpour une fiche post-backtest à edge (modeste mais positif).
Tentative de raffinement (2026-06-14) — aucun filtre ne sauve la strat
Question posée : peut-on exclure des trades sous certaines conditions pour retrouver un edge ? Analyse disciplinée (découverte sur IS, validation OOS, pour éviter le data-mining) + recoupement avec les autres backtests du repo.
1. Recoupement inter-stratégies (famille mean-reversion EUR/USD M5) — toute la famille counter-trend du repo est sans edge robuste :
| Stratégie | IS | OOS | Note |
|---|---|---|---|
| BCMR (BB+RSI+ADX, mêmes indicateurs, multi-TF) | +0.30 R | −0.167 R | a paru bon IS, mort OOS — le parallèle cautionnaire |
| range_trading | −0.02 R | +0.06 R | PF ~1.0, bruit |
| ny_reversal | −0.02 R | +0.05 R | PF 0.99, rien |
| divergence_rsi | −0.14 R | −0.14 R | mort partout (comme nous) |
2. Aucune dimension d'exclusion stable (avg pnl_pips, négatif en IS et OOS) :
- Session : Asia −0.58/−0.97, London −1.03/−0.83 (la pire !), Overlap −0.62/−0.56, NY −0.36/−0.11, Late −0.27/−0.74. Toutes perdantes — et London la pire, ce qui contredit l'hypothèse « London/NY favorable » de la fiche.
- Direction : buy −0.58/−0.94, sell −0.69/−0.55. Les deux perdent.
- Stop : tous les buckets perdent, sauf
≥10 pips(+1.93/+2.17)… qui est un mirage à 1 trade : total +70 pips dont +71 sur le seul meilleur trade ; sans lui −0.9 pip, médiane −12 pips, 5 années positives/10, 2.3 trades/an.
Conclusion : les trades perdants ne se regroupent sous aucune condition stable et économiquement sensée. Tout filtre construit ici fitterait du bruit.
3. Grille de sortie pré-enregistrée (stop / TP) — sweep_rsi_stoch_bb_m5_exits.py.
La géométrie de stop d'origine (bande − 1×ATR) est un vrai défaut (stops sous-pip),
donc on teste des stops sains : 3 stops (bande−1ATR, ATR×1.5, ATR×2.5) × 4 TP
(SMA20, bande opposée, RR1.5, RR2.5) = 12 combos, plancher 5 pips, tuning IS
→ verdict OOS sans retouche.
Les 12 combos sont négatifs en IS (meilleur :
ATR×2.5 / RR2.5, avg −0.479 pip, PF 0.943). La config gagnante IS reste négative en OOS (avg −0.598 pip, PF 0.923). Aucune config n'atteint PF > 1 en IS. Une seule cellule montre un OOS marginalement positif (bande−1ATR / RR2.5: +0.069 pip, PF 1.013) mais elle est négative en IS sur 251/105 trades — la retenir serait de l'overfitting (bruit sur petit échantillon ayant échoué l'IS).
Verdict final : même en réparant le défaut de stop, la stratégie n'a aucun edge. Rejet OOS définitif.
4. Test des hypothèses économiques a priori — confirm_rsi_stoch_bb_m5_hypotheses.py.
Deux hypothèses formulées avant de regarder les résultats, pour épuiser la dernière
porte ouverte :
- H1 — régime strict : le fade ne marche que dans un vrai range calme, donc on
exige
ADX<20 ET Choppiness>60 ET ATR ≤ médiane causale(au lieu du OU permissif). → 0 trade sur 14 ans. Le touch de bande à 2σ + RSI<30 et un régime calme sont mutuellement exclusifs par construction : atteindre la bande exige déjà une expansion de volatilité. Le « range calme idéal » est un ensemble vide. - H2 — inversion : et si le signal est bon mais la direction fausse (breakout au lieu de reversal) ? → pire : −1.35 R IS / −1.19 R OOS (vs −0.88 / −0.65 pour le fade). Suivre le mouvement perd plus que le fader.
Conclusion la plus forte : le signal ne porte aucune information directionnelle (fade ET follow perdent), et sa prémisse (extrême 2σ dans un range calme) est auto-contradictoire. Il n'y a rien à exploiter, dans aucune direction, sous aucun régime. Dossier clos. Ne pas re-creuser sans une hypothèse d'une autre nature (autre paire, autre TF, autre source d'edge — pas un réglage de cette strat).
Liens
- Famille retour à la moyenne
- Bollinger reversal — version single-indicator (moins filtrée)
- RSI extrêmes — version single-indicator RSI
- ADX — filtre régime de référence