Bollinger Confluence Mean-Reversion — scalping multi-TF
Stratégie scalping mean-reversion intraday sur EUR/USD avec triple confluence M30 → M15 → M5. Le marché s'écarte statistiquement (touche bande Bollinger), un indicateur extrême confirme (RSI), un chandelier valide le retournement — on parie sur le retour à la médiane mobile.
🛑 Statut au 2026-05-11 : baseline OOS failed — stratégie rejetée. Backtest 6 ans 4 mois Dukascopy EUR/USD M5 → OOS expectancy −0.167 R (sous le seuil de rejet +0.10 R), sous deux variantes TP. Verdict :
mt5/AUDIT_2026-05-11_bcmr_baseline_failed.md. Toute reprise doit recommencer par tester les 7 variantes pré-listées plus bas, avec IS/OOS strict, et passer les 4 gates avant tout nouvel EA. La fiche ci-dessous reste valable comme spec descriptive ; elle ne décrit pas une stratégie validée à mettre en production.
🎓 La version pédagogique avec analogies n'aura pas lieu — la stratégie n'a pas survécu au gate OOS, et la méthode du repo refuse de pédagogiser une stratégie non validée.
Mécanique
Idée : 3 timeframes en cascade pour filtrer les faux signaux mean-reversion.
M30 = régime (range only). M15 = setup (extrême BB). M5 = trigger (RSI + chandelier).
1. Filtre régime M30 (sur dernier bar M30 fermé, i=1) :
- ADX(14) M30 < 20 → marché en range (pas de tendance)
- |close M30 − SMA20 M30| < ATR(14) M30 → pas de walk-the-band (le prix
n'est pas en train de tirer
continûment sur une bande M30)
Si l'une des deux conditions échoue → SKIP la journée jusqu'au prochain
bar M30 fermé.
2. Setup M15 (sur dernier bar M15 fermé, i=1) :
- LONG candidate : close M15 ≤ BB_lower(20, 2.0) M15
- SHORT candidate : close M15 ≥ BB_upper(20, 2.0) M15
La touche/pénétration de la bande 2σ est le signe statistique de
l'écart vs médiane mobile.
3. Trigger M5 (sur dernier bar M5 fermé, i=1) :
- LONG trigger :
· RSI(14) M5 ≤ 30 (survente)
· close M5 > open M5 (chandelier haussier)
· low M5 ≤ low M5 du bar précédent (i=2) (rejection wick : new low fait
puis rebond intra-bar)
- SHORT trigger : conditions symétriques (RSI ≥ 70, close < open,
high ≥ high i=2)
4. Entrée : close du bar M5 i=1 si toutes les conditions des étapes 1-2-3
sont satisfaites simultanément au close.
5. Stop / Take profit (cf. section dédiée plus bas) :
- SL = min(low i=1, low i=2) − 1.5 × ATR(14) M5 (LONG ; symétrique SHORT)
- TP1 = SMA20 M15 (médiane mobile = target conservateur)
→ 50% de la position fermée à TP1
→ SL remonté à breakeven sur les 50% restants
- TP2 = bande opposée BB M15 (target full mean-reversion)
→ 50% restants fermés à TP2
6. Cooldown :
- 1 position simultanée maximum
- Re-entry par direction interdite < 30 min après dernier exit (TP ou SL)
- 5 trades / jour calendaire UTC max
Paramètres baseline candidats
| Paramètre | Valeur | Rôle |
|---|---|---|
BBPeriod |
20 | Période Bollinger M15 |
BBStdDev |
2.0 | Écart-type Bollinger (95% normal) |
RSIPeriod |
14 | Période RSI M5 (Wilder) |
RSILongMax |
30 | Seuil survente |
RSIShortMin |
70 | Seuil surachat |
ADXPeriod |
14 | Période ADX M30 (Wilder) |
ADXMaxRange |
20 | ADX < 20 = range autorisé |
WalkBandATRMult |
1.0 | Largeur zone "pas de walk-the-band" |
ATRPeriodM5 |
14 | Période ATR M5 (Wilder) |
SLATRMult |
1.5 | Multiplicateur ATR pour buffer SL |
RiskPctEquity |
0.5 | % equity risqué par trade (vs 1.0 LonBO) |
MaxDailyLossPct |
3.0 | Killswitch DD jour |
MaxSpreadPoints |
15 | Spread max 1.5 pip (vs 30 LonBO) |
CooldownMinutes |
30 | Cooldown post-exit par direction |
MaxTradesPerDay |
5 | Cap quotidien |
SessionStartUTC |
7 | Début London (skip Asian) |
SessionEndUTC |
21 | Fin NY |
Ces valeurs doivent être verrouillées par le backtest avant tout
.mq5. Conformément à la méthode LonBO : sans chiffres OOS sur 5+ ans, ce sont des hypothèses, pas des paramètres.
Conditions favorables
- Sessions London + NY (07-21 UTC) — liquidité maximale, écarts BB significatifs (l'Asian session est skippée par défaut : volume faible, mean-reversion noisy)
- Régime range M30 — ADX < 20 historiquement présent ~50-60% du temps sur EUR/USD
- Pas de news rouge majeure dans ±15 minutes (FOMC, NFP, CPI, ECB) — la mean-reversion est annulée par le repricing fondamental
- Spread serré (< 1.5 pip EUR/USD) — sur scalping le spread mange l'edge ; au-dessus de 1.5 pip on skippe
Stop / Take Profit
- Stop dynamique ATR-based. Le SL est posé sous le low extrême du setup (i=1 ou i=2, le plus bas) avec un buffer de
1.5 × ATR(14) M5. Cela laisse de la place à la mèche de rejection sans donner trop de SL distance. - TP1 = SMA20 M15 (médiane mobile, le "centre de gravité" de la fenêtre M15). Target naturel mean-reversion. 50% de la position fermée, SL des 50% restants remonté à breakeven.
- TP2 = bande opposée BB(20, 2.0) M15 (statistiquement, l'écart inverse). Target full mean-reversion, à atteindre rarement (~30-40% des cas selon littérature).
- Pas de trailing actif sur les 50% de TP2 (au-delà du BE déjà posé) — testé en backtest, le trailing tue souvent les TP2.
R:R effectif attendu (à vérifier OOS) :
- Si TP1 hit puis TP2 hit :
+1.0R**(0.5 × R_TP1 + 0.5 × R_TP2)≈+0.5R + +1.5Rpondérés = ** - Si TP1 hit puis BE :
+0.5R × 0.5 + 0R × 0.5= +0.25R - Si SL avant TP1 : −1R
Avec un hit-rate de mean-reversion classique (55-65%), expectancy théorique baseline = hit × R̄_win − (1 − hit) × 1R. Cible minimale : +0.20R net pour valider la stratégie OOS.
Indicateurs utilisés
- Bollinger Bands(20, 2.0) sur close M15 — definition du setup. Bandes +2σ statistique au-dessus / sous SMA20.
- RSI(14) sur close M5 — confirmation extrême. Wilder smoothing (RMA), pas EMA.
- ADX(14) sur high/low/close M30 — filtre régime. Wilder.
- ATR(14) sur high/low/close M5 et M30 — buffer SL (M5) et bande "no walk-the-band" (M30). Wilder.
- SMA20 M30 — centre de la zone "no walk-the-band" et utilisé pour la guard.
- Aucun MACD, aucun Stoch, aucun pattern engulfing — minimalisme délibéré pour limiter l'overfitting.
TF privilégiés
M5 / M15 / M30 simultanés requis — c'est le cœur de la stratégie. Aucun TF seul ne marche :
- M5 seul : bruit dominant, hit-rate ~50% (= bruit pur).
- M15 seul : faux signaux en trend caché (BB walks).
- M30 seul : trop peu de signaux pour alimenter du scalping.
Pas de version H1 ou H4 envisagée — la stratégie est délibérément intraday scalping.
Pièges
- Mean-reversion en trend = saigne. Le filtre
ADX < 20+ walk-the-band guard sont là pour ça mais pas parfaits sur les transitions range→trend. Le SL serré (ATR buffer) limite la casse. - BB squeeze (volatilité comprimée). Quand BB width est très faible (avant breakout), les touches sont fréquentes mais sans signification. Filtre additionnel possible (BB_width minimum) à tester en variante.
- Sessions Asian (00-07 UTC) ≠ scope V1.5. Volume faible, faux signaux fréquents. Skip par défaut via
SessionStartUTC=7. - Spread spike news. À l'ouverture NY 14:30 UTC ou sur news rouge, spread peut passer 1 pip → 5+ pips. Le filtre
MaxSpreadPoints=15skippe automatiquement. - Convention bar i=1 (fermé) vs i=0 (en cours). Tous les calculs se font sur le dernier bar fermé de chaque TF. Comme LonBO post-hotfix 2026-05-07, ne jamais utiliser le bar courant en formation.
- Synchronisation multi-TF. Au close d'un bar M5, le bar M15 actuel peut ne pas être encore fermé (ex : close M5 à 14:00 UTC, le bar M15 13:45-14:00 vient de fermer aussi ; mais close M5 à 14:05, le bar M15 14:00-14:15 est en cours → on lit le bar M15 fermé i=1 qui est 13:45-14:00). La spec exécutable verrouille ce comportement.
- DST / timezone broker. Comme LonBO : toujours
TimeGMT()MQL5, jamaisTimeCurrent(). - Surcoût slippage en scalping. Un slippage de 1 pip sur entrée + 1 pip sur sortie = 2 pips perdus sur des trades qui visent +5 à +15 pips. C'est le principal facteur de mort en scalping. À mesurer en démo avant promotion réelle.
Hit-rate / R:R cible (à valider OOS)
⚠️ Chiffres espérés, pas mesurés. Le backtest 5+ ans Dukascopy doit confirmer ou réfuter.
- Hit-rate cible : 55-65% (mean-reversion intraday).
- R̄_win cible : +0.6 à +1.0R moyenne pondérée (TP1 50% + TP2 50% / TP1 + BE).
- Edge cible : ≥ +0.20R net par trade après spread + slippage.
- Fréquence : 3-8 trades/jour sur EUR/USD M5 pendant sessions London+NY (à confirmer).
- Robustesse cible : ≥ 5/5 années positives sur 2020-2025 OOS.
Si le backtest OOS ressort < +0.10R ou DD > 20%, la stratégie est jetée. Pas de tuning post-hoc — c'est exactement le pattern qui a fait échouer 90% des EA Bollinger publics.
Variantes à backtester (avant gel des paramètres)
| Variante | Param touché | Hypothèse |
|---|---|---|
| BB(14, 2.0) | BBPeriod=14 |
Plus de signaux, hit-rate inférieur ? |
| RSI 25/75 | RSILongMax=25, RSIShortMin=75 |
Moins de signaux mais plus extrêmes |
| ADX < 25 | ADXMaxRange=25 |
Inclure régimes "weakly trending" |
| Pas de filtre walk-the-band | WalkBandATRMult=∞ |
Mesurer son apport réel |
| TP single = middle | TP2=None |
Plus simple, tester perf |
| Sessions London-only | SessionEndUTC=12 |
Mesurer apport NY |
| SL = swing pur (sans buffer ATR) | SLATRMult=0 |
Mesurer apport buffer |
L'objectif du sweep n'est pas de trouver le combo le plus rentable IS (overfit), mais d'identifier un plateau OOS robuste comme pour LonBO #12.
Comment exécuter en pratique
🛑 Rejetée OOS au 2026-05-11. État final de la chaîne :
- ✅ Fiche pédagogique (ce document)
- ✅ Spec exécutable Python (
mt5/tests/test_bollinger_spec.py) — gel des propriétés métier - ✅ Backtest Hermes Python sur 6 ans 4 mois Dukascopy (
hermes/scripts/backtest_bollinger_confluence.py) - ❌ GATE OOS échoué sous variante A (TP unique) et variante B (partial TP1+BE+TP2). Pas de champion sélectionné.
- 🟡 EA MQL5
mt5/Bollinger_Confluence_v1.mq5livré au commit 2026-05-09 — reste enEnableTrading=falseà perpétuité tant qu'aucune variante ne passe le gate OOS. - ✅ Audit statique pré-rejet (
mt5/AUDIT_2026-05-09_bollinger.md) + audit rejet (mt5/AUDIT_2026-05-11_bcmr_baseline_failed.md) - ⛔ Cross-val Python ↔ MT5 et forward signal-only : ANNULÉES (pas d'edge à cross-valider).
Pour reprendre la stratégie : recommencer par exécuter les 7 variantes ci-dessous avec IS/OOS strict, et seulement passer en cross-val si l'une d'elles franchit les 4 gates de la section précédente.
Liens
- Famille scalping — à créer
- News scalping — autre stratégie scalping (event-driven)
- Opening range — autre stratégie scalping (structure)
- London Breakout #12 — référence méthodologique du repo
- Range trading — cousine H1 mean-reversion
- Spec exécutable — oracle Python ↔ MQL5