RSI Pullback Learn — outil pédagogique M15
Outil de génération de signaux à volume élevé sur EUR/USD M15. Combine un filtre de tendance (EMA50) et un déclencheur de pullback (RSI extrême) pour produire 10-30 signaux par jour. Objectif : entraîner ton jugement "prendre/skip" sur volume réel, pas découvrir un edge.
🛑🛑 STATUT au 2026-05-12 : MÉCANIQUEMENT BROKEN — STRATÉGIE FIGÉE. Backtest 6 ans 4 mois Dukascopy : 2 trades émis sur l'ensemble de la période (1 LONG + 1 SHORT en 2022). Cause racine : les conditions LONG
close > EMA50 ET RSI ≤ 35et SHORTclose < EMA50 ET RSI ≥ 65sont mécaniquement quasi-incompatibles sur la même TF M15 (corrélation par construction entre RSI court et EMA long). La fréquence promise dans cette fiche (10-20/jour) est factuellement fausse.Verdict détaillé :
mt5/AUDIT_2026-05-12_learn_backtest.md.Conséquence opérationnelle : l'EA
RSI_Learn_v1.mq5produirait ~1 signal tous les 2 ans s'il était attaché. Ne PAS l'attacher sur MT5 — il est inutilisable même pour le pédagogique. La fiche est conservée comme cas d'école "design naïf qui ne marche pas" (anti-pattern same-TF trend filter + same-TF momentum trigger). Toute reprise R&D doit utiliser un autre filtre tendance (slope EMA, multi-TF EMA D1) sous un nouveau nom (RSI_Learn_v2), pas amender la v1.
🛑 STATUT ORIGINEL : OUTIL PÉDAGOGIQUE — PAS D'EDGE VALIDÉ. Cette mécanique n'a fait l'objet d'aucun backtest OOS, d'aucune validation walk-forward, d'aucun gate. Les paramètres (seuils RSI, EMA50, RR=2.0) sont intentionnellement permissifs pour maximiser la fréquence des signaux, pas l'expectancy.
L'EA
mt5/RSI_Learn_v1.mq5est SIGNAL_ONLY à perpétuité par construction : il n'inclut PAS le moduleLonBO_Order.mqh, aucune fonctionOrderSendn'est appelable depuis ce code. La seule façon d'exécuter ces signaux serait de réécrire l'EA — ce qui ne doit JAMAIS arriver sans passer le même gate backtest que LonBO (fiche → spec → backtest Dukascopy M15 5+ ans → 4 gates OOS verts).La valeur d'apprentissage est dans le journal manuel des décisions "prendre/skip" associées à chaque signal reçu, pas dans la stratégie elle-même.
À quoi ça sert (vraiment)
Tu reçois 100-300 signaux Telegram sur 2 semaines. Pour chacun, tu prends 10 secondes pour décider mentalement :
- ✓ "Je prendrais ce trade" — pourquoi ? (contexte, news, structure prix, autre stratégie en alignement…)
- ✗ "Je skip" — pourquoi ? (spread, news rouge imminente, contre-tendance D1, range serré, fatigue…)
Tu note ces décisions dans un journal léger. Au bout de 2 semaines, tu analyses :
- Sur quelles heuristiques de skip convergent tes décisions ? Si "je skip toujours quand le bid-ask spread dépasse 2 pips" → c'est un filtre concret.
- Sur quels contextes de prise ton instinct te poussait à entrer ? Si "je prends 80% des LONG quand le D1 EMA20 monte" → c'est un filtre directionnel.
- Quel serait le hit-rate hypothétique si tu avais effectivement pris uniquement tes "✓" ? (à comparer aux 50% par chance pure.)
Ces heuristiques sont les briques pour une stratégie validable. Si tu détectes un pattern stable, alors il vaut le travail méthodologique (spec → backtest → gate). Tant que tu n'as pas ça, ne passe rien en exécution.
Mécanique
1. Filtre tendance (EMA50 M15) :
- Si close M15 (i=1) > EMA50 (i=1) → uptrend → seuls les LONG sont autorisés
- Si close M15 (i=1) < EMA50 (i=1) → downtrend → seuls les SHORT sont autorisés
- L'égalité stricte est ignorée (cas rarissime, FP)
2. Déclencheur (RSI 14 M15, calcul Wilder) :
- LONG si RSI ≤ RSILongMax (35 par défaut) ET tendance haussière
- SHORT si RSI ≥ RSIShortMin (65 par défaut) ET tendance baissière
3. Évaluation : 1 fois au close de chaque bar M15 (i=1).
4. Cooldown global : 15 min minimum entre 2 signaux (toutes directions
confondues). Évite l'avalanche quand RSI traîne plusieurs bars sous le
seuil dans une consolidation.
5. Filtre coût : skip si spread courant > MaxSpreadPoints (10 = 1 pip
sur 5-digit). Loggé en CSV avec event "skip_spread".
6. Pas de filtre session : actif 24/5 (du lundi 00:00 au vendredi 23:59
UTC). Le but est précisément de voir comment les signaux se comportent
selon les sessions — l'apprentissage inclut cette observation.
7. Stop / Take Profit : fixes, en pips, indépendants de l'ATR.
- SL = entry − 15 pips (LONG) / entry + 15 pips (SHORT)
- TP = entry + 30 pips (LONG) / entry − 30 pips (SHORT)
- RR théorique = 2.0 (informatif, non exécuté).
8. Pas de cap journalier. Pas de drawdown stop (signal-only n'expose à aucun
capital). Le killswitch existe quand même pour pouvoir arrêter le flux de
notifications sans détacher l'EA.
Paramètres par défaut
| Paramètre | Valeur | Rôle |
|---|---|---|
EMAPeriod |
50 | Période EMA filtre tendance (M15) |
RSIPeriod |
14 | Période RSI Wilder (M15) |
RSILongMax |
35.0 | RSI ≤ X → candidat LONG (vs 30 classique : plus permissif) |
RSIShortMin |
65.0 | RSI ≥ X → candidat SHORT |
SLPips |
15.0 | Stop fixe en pips |
TPPips |
30.0 | Take profit fixe en pips (RR théorique 2.0) |
CooldownMinutes |
15 | Cooldown global post-signal |
MaxSpreadPoints |
10 | Spread max (1 pip sur 5-digit) |
MagicNumber |
50505050 | Identifiant logs (jamais utilisé pour OrderSend) |
Pourquoi RSI 35/65 et non 30/70 : à 30/70, on observerait ~3 signaux/jour sur EUR/USD M15 — pas assez pour entraîner le jugement en 2 semaines. À 35/65, on monte à 10-20 signaux/jour, soit 100-300 décisions de jugement sur la période d'observation. C'est un compromis pédagogique assumé, pas une décision optimisée.
Fréquence attendue
Estimation rough sur EUR/USD M15 :
- 96 bars M15 par jour ouvré
- ~15-25% des bars ont RSI(14) hors [35, 65] dans une volatilité normale
- ~50% du temps en uptrend, 50% en downtrend (en moyenne sur 1 mois)
- Application du filtre tendance : seuls les RSI bas en uptrend + RSI haut en downtrend passent
- Donc ~7-12% des bars génèrent un candidat, soit 7-12 signaux/jour avant cooldown
- Le cooldown 15 min réduit légèrement dans les consolidations
Plage attendue : 5-20 signaux/jour, médiane 10-12. Sur 2 semaines ouvrées : 100-200 signaux au total.
Pièges connus
1. Marché en range serré (faux positifs garantis)
Si EUR/USD oscille dans 30 pips sur la journée, le RSI(14) M15 saute entre 30 et 70 toutes les 4-6 bars. Tu vas recevoir LONG/SHORT/LONG/SHORT en alternance, tous perdants si pris. Apprends à reconnaître ce contexte (visuellement sur le chart, ou en regardant l'ADX si tu l'as installé). C'est un cas où tu dois systématiquement "✗ skip" — note-le.
2. News rouge dans 30 min
Aucun filtre news n'est intégré. Si tu reçois un signal à 12:25 et qu'à 12:30 sort un CPI US, le SL/TP théoriques n'ont aucun sens. Toujours consulter Forex Factory (déjà intégré dans le pilier A) avant de décider mentalement "prendre/skip".
3. Walk-the-band (tendance forte unidirectionnelle)
Quand EUR/USD trend fort en M15, le RSI reste collé à 70+ pendant 10-20 bars. La condition SHORT (RSI ≥ 65 + downtrend) ne se déclenche jamais (car uptrend), mais tu peux avoir des LONG en série lors des micro-pullbacks RSI vers 35. C'est bien, c'est ce que veut la mécanique. Mais le RR fixe 15/30 ne capture pas vraiment la tendance (TP atteint vite, manque les trends de 50+ pips).
4. Spread spike en news
Le filtre MaxSpreadPoints = 10 skip si spread > 1 pip. Pendant un NFP ou
CPI, le spread IC Markets peut monter à 30-50 points pendant 1-2 minutes.
Ces bars seront skipped — c'est cohérent. Si tu vois beaucoup de
skip_spread dans le CSV log, c'est un signal indirect que tu trades
juste après une news majeure.
5. Cooldown de 15 min vs bar M15
Bars M15 closent toutes les 15 min. Cooldown 15 min = au mieux 1 signal par bar M15 dans une consolidation où le RSI reste sous le seuil plusieurs bars. C'est volontaire — sinon tu reçois le même signal répété.
6. Aucune validation pédagogique du SL/TP fixe
SL=15 / TP=30 sont des nombres ronds choisis pour leur simplicité, pas pour leur edge. Sur EUR/USD M15, l'ATR(14) typique tourne autour de 8-15 pips ; un SL fixe à 15 = ~1 ATR, raisonnable mais pas adapté aux régimes de volatilité. Un TP à 30 pips = ~2-4 ATR selon le contexte. Ne pas transférer ces chiffres vers une stratégie production sans backtest.
Variantes envisagées (non testées, ne pas implémenter sans gate)
| Variante | Modification | Effet probable |
|---|---|---|
| RSI 30/70 | Seuils classiques | Moins de signaux (~3/jour), plus de qualité |
| EMA200 M15 | Trend filter plus long | Plus de skip en consolidation |
| SL/TP ATR-based | SL=1.5×ATR(14) M5, TP=3×ATR | Adapte à la volatilité |
| Filtre session [07-21) UTC | Ferme la phase Asia | -30% signaux, possiblement +qualité |
| Filtre D1 alignment | EMA50 D1 même sens | Forte réduction du volume, possiblement edge |
Toutes ces variantes sont hors scope de cet outil pédagogique. Si une d'elles te semble prometteuse après l'observation 2 semaines, le bon chemin est : nouvelle fiche → nouvelle spec → backtest Dukascopy → 4 gates OOS comme LonBO et BCMR. Pas de raccourci.
Format des messages Telegram
Chaque signal envoie un message structuré :
🟢 RSI Learn LONG EURUSD [SIGNAL ONLY]
Entry: 1.08750
SL: 1.08600 (-15 pips)
TP: 1.09050 (+30 pips, RR=2.0)
RSI M15: 33.2 | EMA50 M15: 1.08620
Trend: UP (close > EMA50)
Cooldown next: 15 min
Le bandeau [SIGNAL ONLY] est en dur dans le code — l'EA ne sait pas
afficher autre chose.
Couplage avec piliers A et B
- Pilier A (cette fiche) : la spec descriptive vit ici
- Pilier B (Hermes) : PAS d'entrée dans
hermes/src/strategies/. Outil pédagogique côté C uniquement. Si un jour la stratégie est validée par backtest, elle pourra rejoindre Hermes — mais ce serait alors un nouveau cycle complet (renommage, fiche réécrite sans le bandeau pédagogique, registry V1.5 mis à jour). - Pilier C : code MQL5 minimal, spec exécutable Python, audit statique
Méthode de journal pédagogique recommandée
Crée un Google Sheets simple (ou CSV local) avec ces colonnes :
| ts_utc | direction | rsi | trend | decision | raison_skip | contexte_pris | hit_hypothétique |
|---|---|---|---|---|---|---|---|
| 2026-05-12 13:15 | long | 33.2 | up | ✓ | — | "structure clean" | TP / SL / breakeven |
| 2026-05-12 13:30 | long | 34.1 | up | ✗ | "news USD 14:30" | — | — |
| 2026-05-12 14:45 | short | 67.5 | down | ✗ | "déjà LONG dans la journée" | — | — |
Au bout de 2 semaines, agrège :
- Hit-rate hypothétique sur tes "✓" → > 50% à RR=2.0 = bon instinct, < 50% = ton instinct produit des trades perdants
- Top-3 raisons de skip → si "news rouge proche" représente 40% des skips, c'est un filtre concret à intégrer dans une future fiche
- Top-3 contextes de prise → idem en sens inverse
Cette analyse, et pas la performance théorique du bot, est le seul livrable d'apprentissage.
Désinstallation / archivage
Quand tu auras fini les 2 semaines :
- Détache l'EA du chart
- Optionnel : supprime
MQL5\Experts\RSI_Learn\côté MT5 - Garde le CSV log (
MQL5\Files\RSI_Learn_v1_log.csv) — il complète ton journal manuel avec les timestamps précis et les valeurs RSI/EMA exactes - Rédige une note de bilan (3-5 lignes) dans ton journal général.
Référence croisée
- Spec exécutable :
mt5/tests/test_rsi_learn_spec.py(oracle de la mécanique pour la cross-val MQL5) - Code EA :
mt5/RSI_Learn_v1.mq5+mt5/include/RSILearn_*.mqh - Audit statique :
mt5/AUDIT_2026-05-11_rsi_learn.md - KANBAN : section "Pilier C ter — RSI Learn"