Rejoignez notre page de fans
- Vues:
- 50
- Note:
- Publié:
-
Besoin d'un robot ou d'un indicateur basé sur ce code ? Commandez-le sur Freelance Aller sur Freelance
Présentation
Cet Expert Advisor exploite le cadre de l'Average Mobile Relative (RMA) présenté par le Dr Daniel Alexandre Bloch dans son ouvrage « A Course on Systematic Trading with RMA ». Il met en œuvre les quatre stratégies de croisement décrites dans cet article, ainsi que sa stratégie de sortie adaptative « Adaptive Crossover Exit », et chaque entrée et sortie est exprimée en espace fractile plutôt qu'en prix.
Le principe repose sur l’idée qu’une fenêtre de cours est plus informative sous forme de distribution que sous forme de moyenne. Sur chaque barre, la RMA prend la fenêtre glissante de W clôtures, les reformule en rendements par rapport à leur propre moyenne, puis indique où se situe la plus récente dans cette distribution sous forme de fractile compris entre [0, 1]. L’objectif de l’article est alors de tirer parti des oscillations de ce rang entre les extrêmes de la distribution : en position longue lorsqu’il évolue du minimum vers le maximum, et en position courte lorsqu’il s’inverse. Comme un fractile est un rang plutôt qu’une distance, un seuil tel que 0,9 a la même signification pour chaque titre et dans chaque régime de volatilité, ce qui rend ces règles transposables.
L’EA ne contient aucune formule mathématique. Tout réside dans l’indicateur associé RMA_Engine, que l’EA charge via iCustom et lit à l’aide de CopyBuffer à chaque barre clôturée. Cette séparation est délibérée et offre deux avantages non négligeables : l’EA ne peut pas être en désaccord avec le graphique quant à la valeur du fractile sur une barre donnée, car il n’y a qu’un seul calcul ; et les règles n’interviennent jamais sur un ordre, ce qui permet de les rejouer sur l’historique à l’aide d’un script sans intervention d’un courtier.
Comment il négocie
Les quatre étapes. La stratégie s’appuie sur les traversées de la distribution propre à la fenêtre. L'atteinte d'un extrême déclenche un côté, ce qui constitue le test d'origine de la stratégie, et l'entrée se déclenche lorsque le fractile traverse par la suite un intervalle de quantile dans le sens de la traversée. Ce n’est pas l’extrême qui sert de déclencheur, mais le franchissement ; une entrée peut donc se déclencher n’importe où le long de la traversée. Les noms décrivent le mouvement du cours, et non la position :
- Long-cross-reverse. Le fractile quitte le maximum et se dirige vers le minimum. L’EA exploite cette baisse en prenant une position courte.
- Short-cross-reverse. Le cas inverse. La fractile quitte le minimum et remonte vers le maximum ; l’EA suit ce mouvement en prenant une position longue.
- Long-cross-revert. Une baisse qui a débuté au maximum repart à la hausse avant d’atteindre le minimum. L’EA suit ce mouvement de retour vers le maximum, en position longue.
- Short-cross-revert. Une remontée qui a débuté au minimum repart à la baisse avant d’atteindre le maximum ; l’EA suit ce mouvement à la baisse, en position courte.
À elles quatre, ces positions couvrent les deux sens dans lesquels un mouvement partiel peut se résoudre. Chaque position ouverte appartient à une jambe nommée, et c’est cette jambe qui détermine quel test de sortie s’applique et en quoi se transforme un renversement ; ainsi, une même lecture de fractile clôt une position et en maintient une autre.

Les quatre phases d’une même distribution : les phases « reverse » suivent une traversée complète d’un extrême à l’autre, tandis que les phases « revert » sont prises lorsqu’une traversée fait demi-tour avant d’atteindre l’extrême opposé.
La sortie adaptative. C’est là que le détecteur de régime prend tout son sens. L’article définit deux sorties de base, puis une troisième qui choisit entre les deux :
- Traversée complète de la distribution. Part du principe que la traversée s’achève, de sorte que la sortie d’un côté coïncide avec l’entrée de l’autre. Une position courte prise à partir du maximum n’est clôturée que lorsque le quantile atteint effectivement le minimum et s’inverse à la hausse ; et comme ce renversement est lui-même à l’origine d’une nouvelle transaction dans le sens opposé, la sortie s’inverse directement vers celle-ci.
- Déclencheur de retour à l’extrémum. Ne fait aucune hypothèse concernant l’extrémum le plus éloigné. La position est clôturée dès le premier signe concret indiquant que le mouvement sur lequel elle s’était engagée s’est arrêté : une série de pas de quantiles dans la mauvaise direction, un retour à travers la zone médiane, ou un seul pas suffisamment important pour être significatif.
- Sortie par croisement adaptatif. Règle décrite dans l’article, et mise en œuvre par l’EA : le déclencheur de retour en arrière est utilisé pendant l’expansion et la transition, où des traversées partielles sont probables, puis on passe au croisement complet dès qu’une contraction est identifiée. Les phases de retour en arrière utilisent toujours le déclencheur de retour en arrière, quel que soit le régime.
Le test de longueur de série empêche le déclencheur de retour en arrière de s’activer en raison du bruit. Une série signée de pas de bin s’accumule tant que le fractile continue d’évoluer dans la même direction et se réinitialise lorsque la direction change ; ainsi, « deux bins en arrière » signifie que le mouvement a réellement changé de direction plutôt qu’il ne s’est simplement interrompu.
La sortie de sécurité. En amont et avant toute sortie de stratégie se trouve un contrôle de mouvement défavorable. Une position de retour à la moyenne est, par nature, « hors jeu » pendant un certain temps ; être « hors jeu » ne peut donc pas constituer le critère de sortie ; le véritable signal d’alerte est d’être « hors jeu » et de constater que le fractile continue de s’éloigner davantage de la médiane. C’est précisément ce que décrit une valeur D_k faible du mauvais côté de la médiane, et c’est la seule sortie qui ignore totalement le paramètre de profit minimum, car elle ne cherche pas à atteindre un objectif mais à cesser d’alimenter une tendance qui s’est déjà retournée contre la position.
Lorsqu’elle se déclenche sur une perte, elle bloque également toute réentrée du même côté jusqu’à ce que le fractile repasse au-dessus de la médiane ; ainsi, la stratégie ne peut pas immédiatement refaire la même opération perdante sur le marché. Si la fourchette s’élargit à ce moment-là, l’EA prend plutôt le côté opposé, partant du principe qu’un signal de retour à la moyenne qui ne cesse d’échouer est la preuve d’une tendance plutôt que d’un meilleur prix. Ces deux phases de suivi de tendance sont la seule partie du système qui ne soit pas symétrique.
Configuration recommandée
| Paramètres | Valeur recommandée | Remarques |
|---|---|---|
| Symbole | EURUSD | L'instrument de développement et de test. L'échelle des fractiles est auto-normalisante, ce qui signifie que les règles s'appliquent à d'autres symboles sans réétalonnage, mais les paramètres ci-dessous n'ont été testés que sur ce symbole. |
| Période du graphique | H2 | La période de test. La fenêtre est mesurée en barres ; ainsi, une période plus courte avec le même W correspond simplement à un intervalle de marché plus court. La durée moyenne de détention sur H2 était d’environ un jour. |
| Type de compte | Compensation ou couverture | L'EA ne détient qu'une seule position à la fois et inverse sa position en clôturant puis en rouvrant la position ; les deux types de compte sont donc compatibles. |
| Prérequis | RMA_Engine doit être compilé | Compilez Indicators\RMA\RMA_Engine.mq5 avant d'associer l'EA. En l'absence du fichier .ex5, l'appel iCustom échoue et l'EA refuse de s'initialiser en affichant un message indiquant le nom du fichier. |
| Historique requis | W plus la période de rétrospective du régime | L'EA reste bloqué sur toute barre pour laquelle le moteur ne peut pas encore fournir de réponse ; ainsi, un historique court entraîne une perte de signaux plutôt que la génération de signaux erronés. |
Caractéristiques principales
Fidèle à l’article
- Les quatre stratégies de croisement sont toutes implémentées : les deux jambes inversées et les deux jambes de retour, et non une paire simplifiée.
- La fonction « Adaptive Crossover Exit » bascule entre le « Full Distribution Crossover » et le « Extremum Revert Trigger » en fonction du régime, exactement comme le précise l’article.
- Le fractile correspond à la définition donnée dans l’annexe de l’article, à savoir la fonction de distribution cumulative (CDF) empirique simple de la fenêtre. En cas de divergence entre le texte de l’article et son annexe, c’est l’annexe qui prévaut et la divergence est documentée dans le code source plutôt que corrigée en silence.
Un seul calcul, à un seul endroit
- Chaque nombre lu par les règles provient de RMA_Engine via CopyBuffer, de sorte que le graphique et les transactions ne peuvent pas diverger. Il n’y a pas de deuxième implémentation des calculs mathématiques pour assurer la synchronisation.
- Les règles résident dans une classe qui n’appelle jamais OrderSend, ne lit jamais de position et n’affiche jamais rien. Elle reçoit une structure de barre à dix champs et renvoie une instruction, ce qui rend la stratégie testable sans courtier.
- Le placement des ordres, la comptabilité et la gestion des risques sont gérés dans une classe distincte, séparée des règles pour la même raison.
Décisions basées uniquement sur les données définitives
- Les tampons sont lus à partir de la position 1, jamais de 0. La barre zéro est encore en cours de formation et chaque règle est écrite pour une barre dont le cours de clôture est définitif.
- Une barre de préchauffage, un écart dans l’historique ou un moteur qui n’a pas encore effectué ses calculs produisent tous le même résultat : aucune décision n’est prise sur cette barre. Aucune conclusion n’est tirée d’une lecture manquante.
- La question de savoir si le compte était ouvert est tranchée avant toute action sur celui-ci ; ainsi, une barre est soit une barre de sortie, soit une barre d’entrée, jamais les deux à la fois.
Une exécution qui résiste à un courtier réel
- Une opération « close-and-reverse » demande au courtier de liquider la position au moment où la transaction opposée doit être exécutée, et le courtier ne s’y conforme pas toujours dès la première tentative. Les clôtures refusées sont mises en attente et réessayées à chaque tick jusqu’à ce qu’elles soient exécutées, plutôt que d’être abandonnées, et une inversion n’est jamais superposée à une position encore en cours.
- L’entrée est comptabilisée au prix effectivement exécuté, et non au prix demandé ; ainsi, le glissement n’affecte pas les valeurs en pips qui alimentent les règles de sortie et le score d’optimisation.
- La taille du lot est limitée aux valeurs minimale, maximale et au pas du symbole.
- La position ouverte est enregistrée dans des variables globales ; ainsi, une position qui survit au redémarrage du terminal est reprise telle qu’elle était réellement, et non comme une position orpheline.
Contrôles opérationnels
- Stop loss et take profit fixes en pips (facultatifs), un filtre de session facultatif qui gère correctement une fenêtre s’étendant jusqu’à minuit, et un aplatissement de position en fin de session facultatif. Il s’agit de contrôles de déploiement plutôt que d’éléments intégrés au framework : l’article se concentre sur le signal et laisse la gestion de l’enveloppe de risque à l’opérateur.
- Un bloc d’état optionnel sur le graphique affichant le fractile, le régime et la jambe actuels, avec des marqueurs d’entrée et de sortie, ainsi qu’un mode détaillé qui consigne chaque refus et sa raison. Les deux sont désactivés par défaut, de sorte que l’EA négocie en silence.
- Un critère d’optimisation personnalisé renvoyant le nombre de pips nets pondéré par la racine carrée du nombre de transactions et du taux de réussite ; ainsi, une série de quatre cents transactions est mieux classée qu’une série de quarante pour un même résultat net, sans pour autant laisser le nombre de transactions dominer de manière absolue. Les séries de moins de dix transactions obtiennent un score de zéro.
Résultats du backtest
Une seule simulation sur la paire EURUSD, en H2, du 01/05/2025 au 26/07/2026, soit environ quatorze mois, sur des ticks 100 % réels avec un dépôt de 10 000 USD à un effet de levier de 1:500.
| Indicateur | Valeur |
|---|---|
| Bénéfice net total | 362,51 pour un dépôt de 10 000 |
| Nombre total de transactions | 138 |
| Facteur de profit | 1,15 |
| Ratio de Sharpe | 0,82 |
| Dépréciation maximale du capital | 463,87 (4,52 %) |
| Transactions bénéficiaires | 46,38 % |
| Gain moyen / perte moyenne | 42,80 / -30,82 |
| Taux de réussite des positions longues / courtes | 46,58 % / 46,15 % |
Le taux de réussite est légèrement inférieur à la moitié, et le système reste rentable car le gain moyen est supérieur à la perte moyenne. Il s'agit là du profil de rendement d'une stratégie de retour à la moyenne qui laisse les renversements de tendance se dérouler. Les positions longues et courtes affichent des performances presque identiques, comme on peut s'y attendre d'un cadre symétrique de par sa conception.

La courbe de capital sur la période de test : une participation régulière avec des baisses modérées plutôt qu’une seule série chanceuse.

Le rapport complet du Strategy Tester pour cette simulation, présentant les paramètres, les statistiques de trading, ainsi que les courbes de solde et de capital.
Installation et structure des fichiers
Un Expert Advisor, un indicateur obligatoire, un panneau optionnel et sept en-têtes. La structure est importante : l’EA charge le moteur via le chemin relatif RMA\RMA_Engine et les en-têtes sont inclus sous la forme <RMA\...>, chaque fichier doit donc se trouver dans son sous-dossier RMA. Compilez les indicateurs avant l’EA.
| Fichier | Rôle | Description |
|---|---|---|
| Experts\RMA\RMA.mq5 | Orchestrateur | Toutes les entrées, l'appel iCustom, la lecture de l'état du moteur à chaque barre, ainsi que l'ordre d'exécution du moteur de signaux, du gestionnaire de transactions et de l'affichage. Ne contient aucune logique de stratégie propre. |
| Indicateurs\RMA\RMA_Engine.mq5 | Indicateur requis | Calcule toutes les séries RMA et publie dix-neuf tampons. L'EA ne s'initialisera pas sans lui. |
| Indicateurs\RMA\RMA_Panel.mq5 | Panneau facultatif | Affiche un groupe de tampons du moteur dans une sous-fenêtre dotée de sa propre échelle, pour les séries illisibles sur l'axe 0 à 1 du moteur. Affichage uniquement. |
| Include\RMA\RmaTypes.mqh | Vocabulaire partagé | Les énumérations de régimes et d’états croisés, ainsi que la carte des tampons. Le seul point sur lequel l’EA, le moteur et les panneaux s’accordent. |
| Include\RMA\RmaCore.mqh | Noyau numérique | Le SMA, la famille RMA, la distribution des rendements normalisés et la fonction fractile. |
| Include\RMA\RegimeDetector.mqh | Classification des régimes | Expansion, contraction et les deux états de transition, à partir des ratios d’extrêmes relatifs corroborés par la pente, le z-score et le coefficient de variation. C’est ce qui détermine la règle de sortie. |
| Include\RMA\AdverseMonitor.mqh | Cohérence directionnelle | d_med_w, le fractile centré sur la médiane, et D_k, la part haussière de ses dernières étapes. Alimente la sortie de sécurité. |
| Include\RMA\SignalEngine.mqh | Les règles | L'armement, les quatre phases d'entrée, les trois sorties et la commutation adaptative entre celles-ci, la sortie de sécurité, le bloc de réentrée et le renversement. Prend une barre, renvoie une instruction, ne touche à rien d'autre. |
| Include\RMA\TradeManager.mqh | Exécution | Passation d’ordres, limitation des lots, stops et objectifs, synchronisation des positions, nouvelle tentative de clôture, contrôles de session, persistance des jambes, comptabilisation des pips et score d’optimisation. |
| Include\RMA\RmaDisplay.mqh | Statut sur le graphique | Le bloc d’état et les marqueurs d’entrée et de sortie. Les libellés sont créés une seule fois et mis à jour sur place, ce qui évite les objets en double et les scintillements liés au rafraîchissement. |
Paramètres d’entrée
Neuf groupes d’entrée. Les deux premiers sont transmis au moteur et modifient ses calculs ; les autres régissent les règles, les ordres et l’affichage.
| Groupe | Paramètres clés | Valeurs par défaut |
|---|---|---|
| Fenêtre | InpWindowSize, InpSmoothingPeriod | 106 barres, 10 |
| Détection de régime | InpEpsilonLow, InpEpsilonHigh, InpSlopeThreshold, InpRegimeLookback, InpVariationRatioLow, InpZScoreExpansion, InpRangeHistoryLookback | 0,15, 3,0, 0,0001, 20, 0,1, 1,0, 100 |
| Mouvement défavorable | InpUseAdverseExit, InpAdverseLookback, InpAdverseThresholdDown, InpAdverseThresholdUp | true, 10 barres, 0,3, 0,7 |
| Entrées | InpEntryUpperThreshold, InpEntryLowerThreshold, InpEntryMinDiff, InpCloseThreshold | 0,9, 0,1, 0,0 (tout changement de tendance est pris en compte), 0,1 |
| Sorties | InpExitTargetUpper, InpExitTargetLower, InpExitProfitMinPips | 0,0, 0,0 (les deux valeurs à zéro activent la logique d'extrêmes), 0,0 (désactivé) |
| Trading | InpLotSize, InpMagicNumber, InpTradeComment | 0,1 lot, 20251230, « RMA » |
| Risque | InpStopLossPips, InpTakeProfitPips, InpUseTimeFilter, InpStartHour, InpEndHour, InpEODClosePositions | 0 (aucun), 0 (aucun), faux, 8, 20, faux |
| Sur le graphique | InpShowDisplay, InpAttachEngine, InpShowPanels, InpPanelAdverse, InpPanelRmaValues, InpShowRegimeBand, InpVerbose | toutes désactivées par défaut, l’EA négocie donc en silence |
Base de recherche
La mise en œuvre s’appuie sur :
- Daniel Alexandre Bloch, « A Course on Systematic Trading with RMA », disponible sur SSRN.
Cet article apporte le cadre théorique et ses mécanismes : la représentation par fractiles, les quatre stratégies croisées et la sortie par croisement adaptatif qui choisit entre elles en fonction du régime. Il ne fournit pas de historique de performance, puisque sa section « Résultats » est laissée comme sujet de travaux futurs dans la version actuelle. La valeur ajoutée réside dans une stratégie exprimée sur une échelle qui a la même signification pour tous les instruments, ainsi que dans une base permettant de réaliser vos propres tests sur d’autres symboles et horizons temporels, ou avec une fenêtre calibrée par actif, comme le prévoit l’article.
Un article complémentaire en déduit les fondements mathématiques, passe en revue la mise en œuvre de chaque module et explique en détail chacun des quatre volets ainsi que la logique de sortie : « Mise en œuvre du cadre de la moyenne mobile relative (RMA) de Bloch en MQL5 ».
Traduit de l’anglais par MetaQuotes Ltd.
Code original : https://www.mql5.com/en/code/75473
Session Scalping Zones
Indicateur de scalping basé sur les sessions pour MetaTrader 5. Il identifie automatiquement les plus hauts et les plus bas de la session asiatique, puis génère des signaux de scalping à l'ouverture de Londres lorsque le cours franchit ou reteste ces niveaux. L'indicateur trace des fourchettes de séance dynamiques, envoie des alertes et des notifications push, et intègre des filtres optionnels de tendance, de volume et de temps. Fonctionne sur les graphiques M1, M5 et M15 pour n'importe quel symbole.
Market Session Separator Indicator
Marks the start/end of up to three trading sessions (Asian, London, New York, or any custom windows) with vertical separators and/or shaded background boxes, repeated daily across a rolling recent window. Purely visual — no calculations, no signals, just clean session boundaries.
IronHawk Fibonacci Structure Map
Free MT5 indicator that automatically maps Fibonacci levels across multiple timeframes and highlights confluence zones, market structure, premium/discount areas and key price reactions.
RSI Histogram
Il s'agit d'un indicateur personnalisé MQL5 pour MetaTrader 5, appelé « RSI Histogram ». Il affiche la courbe RSI standard dans une fenêtre distincte, ainsi qu'une version sous forme d'histogramme, avec un code couleur, des mêmes valeurs RSI, dont la couleur varie en fonction de la dynamique :