Le MQL5 Wizard vous permet de créer des systèmes de trading prêts à l'emploi basés sur les classes de la bibliothèque standard fournies avec le terminal client (voir Créer des systèmes de trading prêts à l'emploi dans MQL5 Wizard pour plus de détails). Cela vous permet de tester rapidement vos idées de trading ; il vous suffit de créer votre propre classe de signaux de trading. La structure de cette classe et un exemple peuvent être trouvés dans l'article MQL5 Wizard : Comment créer un module de signaux de trading.
L'idée générale est la suivante : la classe de signaux de trading dérive de CExpertSignal. Ensuite, vous devez redéfinir les méthodes virtuelles LongCondition() et ShortCondition() avec vos propres méthodes.
Il existe un livre "Stratégies des meilleurs traders" (en russe), où de nombreuses stratégies de trading sont examinées ; nous allons nous concentrer sur les modèles de chandeliers de retournement, confirmés par Stochastique, CCI, MFI et RSI.
La meilleure approche est de créer une classe distincte dérivée de CExpertSignal pour vérifier la formation de modèles de chandeliers. Pour confirmer les signaux de trading générés par ces modèles, il suffit d'écrire une classe, dérivée de CCandlePattern, et d'y ajouter les fonctionnalités nécessaires (par exemple, confirmation par des oscillateurs).
Nous allons examiner les signaux basés sur les modèles de chandeliers de "Bullish/Bearish Meeting Lines", confirmés par l'indicateur MFI (Market Facilitation Index). Le module de signaux de trading est basé sur la classe CCandlePattern, c'est un exemple simple de son utilisation pour créer des signaux de trading avec des modèles de chandeliers.
1. Modèles de chandeliers de "Meeting Lines"
1.1. Bullish Meeting Lines
Le modèle se compose de deux chandeliers (bearish et bullish) avec des prix de clôture égaux (ou très proches). Le corps des deux chandeliers doit être supérieur à la longueur moyenne du corps.
Le modèle "Bullish Meeting Lines" indique un retournement de tendance à la baisse.

Fig. 1. Modèle de "Bullish Meeting Lines"
La reconnaissance du modèle "Bullish Meeting Lines" est réalisée dans la méthode CheckPatternBullishMeetingLines() de la classe CCandlePattern :
//+--------------------------------------------------------------------+ //| Vérifie la formation du modèle "Bullish Meeting Lines" | //+--------------------------------------------------------------------+ bool CCandlePattern::CheckPatternBullishMeetingLines() { //--- Bullish Meeting Lines if((Open(2)-Close(2)>AvgBody(1)) && // long black ((Close(1)-Open(1))>AvgBody(1)) && // long white (MathAbs(Close(1)-Close(2))<0.1*AvgBody(1))) // doji close return(true); //--- return(false); }
La méthode CheckCandlestickPattern(CANDLE_PATTERN_BULLISH_MEETING_LINES) de la classe CCandlePattern est utilisée pour vérifier la formation du modèle de chandeliers "Bullish Meeting Lines".
1.1. Bearish Meeting Lines
Le modèle se compose de deux chandeliers (bullish et bearish) avec des prix de clôture égaux (ou très proches). Le corps des deux chandeliers doit être supérieur à la longueur moyenne du corps.
Le modèle "Bearish Meeting Lines" indique un retournement de tendance à la hausse.

Fig. 2. Modèle de "Bearish Meeting Lines"
La reconnaissance du modèle "Bearish Meeting Lines" est réalisée dans la méthode CheckPatternBearishMeetingLines() de la classe CCandlePattern :
//+--------------------------------------------------------------------+ //| Vérifie la formation du modèle "Bearish Meeting Lines" | //+--------------------------------------------------------------------+ bool CCandlePattern::CheckPatternBearishMeetingLines() { //--- Bearish Meeting Lines if((Close(2)-Open(2)>AvgBody(1)) && // long white ((Open(1)-Close(1)>AvgBody(1)) && // long black (MathAbs(Close(1)-Close(2))<0.1*AvgBody(1))) // doji close return(true); //--- return(false); }
La méthode CheckCandlestickPattern(CANDLE_PATTERN_BEARISH_MEETING_LINES) de la classe CCandlePattern est utilisée pour vérifier la formation du modèle de chandeliers "Bearish Meeting Lines".
2. Signaux de trading, confirmés par l'indicateur MFI
Les signaux de trading pour ouvrir des positions longues ou courtes doivent être confirmés par l'indicateur MFI. La valeur de l'indicateur MFI doit être inférieure à 40 (pour des positions longues) ou supérieure à 60 (pour des positions courtes).
La fermeture des positions ouvertes dépend des valeurs de l'indicateur MFI. Cela peut se faire dans 2 cas :
- si le MFI a atteint le niveau critique opposé (70 pour une position longue et 30 pour une position courte)
- si le signal inverse n'est pas confirmé (lorsque l'indicateur MFI atteint les niveaux suivants : 30 pour une position longue et 70 pour une position courte)

Figure 3. Modèle de "Bearish Meeting Lines", confirmé par l'indicateur MFI
- int CML_MFI::LongCondition() - vérifie les conditions d'ouverture d'une position longue (retourne 80) et de fermeture de la position courte (retourne 40);
- int CML_MFI::ShortCondition() - vérifie les conditions d'ouverture d'une position courte (retourne 80) et de fermeture de la position longue (retourne 40).
2.1. Ouvrir une position longue/Fermer une position courte
La formation du modèle "Bullish Meeting Lines" doit être confirmée par l'indicateur MFI : MFi(1)<40 (la valeur de l'indicateur MFI de la dernière barre complétée doit être inférieure à 40).
La position courte doit être fermée si l'indicateur MFI a franchi à la hausse les niveaux critiques (70 ou 30).
//+------------------------------------------------------------------+ //| Vérifie les conditions d'entrée et de sortie du marché | //| 1) Entrée sur le marché (ouvrir une position longue, résultat=80) | //| 2) Sortie du marché (fermer position courte, résultat=40) | //+------------------------------------------------------------------+ int CML_MFI::LongCondition() { int result=0; //--- idx peut être utilisé pour déterminer le mode de fonctionnement de l'Expert Advisor //--- idx=0 - dans ce cas, l'EA vérifie les conditions de trading à chaque tick //--- idx=1 - dans ce cas, l'EA vérifie les conditions de trading uniquement aux barres de nouvelles int idx =StartIndex(); //--- vérification des conditions pour ouvrir une position longue //--- formation du modèle Bullish Meeting Lines et MFI<40 if(CheckCandlestickPattern(CANDLE_PATTERN_BULLISH_MEETING_LINES) && (MFI(1)<40)) result=80; //--- vérification des conditions pour fermer la position courte //--- croisement de la ligne de signal des niveaux de surachat/survente (à la hausse 30, à la hausse 70) if(((MFI(1)>30) && (MFI(2)<30)) || ((MFI(1)>70) && (MFI(2)<70))) result=40; //--- retourner le résultat return(result); }
2.2. Ouvrir une position courte/Fermer une position longue
La formation du modèle "Bearish Meeting Lines" doit être confirmée par l'indicateur MFI : MFI(1)>60 (la valeur de l'indicateur MFI de la dernière barre complétée doit être supérieure à 60).
La position longue doit être fermée si l'indicateur MFI a franchi à la hausse/à la baisse les niveaux critiques (70 ou 30).
//+------------------------------------------------------------------+ //| Vérifie les conditions d'entrée et de sortie du marché | //| 1) Entrée sur le marché (ouvrir une position courte, résultat=80) | //| 2) Sortie du marché (fermer position longue, résultat=40) | //+------------------------------------------------------------------+ int CML_MFI::ShortCondition() { int result=0; //--- idx peut être utilisé pour déterminer le mode de fonctionnement de l'Expert Advisor //--- idx=0 - dans ce cas, l'EA vérifie les conditions de trading à chaque tick //--- idx=1 - dans ce cas, l'EA vérifie les conditions de trading uniquement aux barres de nouvelles int idx =StartIndex(); //--- vérification des conditions pour ouvrir une position courte //--- formation du modèle Bearish Meeting Lines et MFI>60 if(CheckCandlestickPattern(CANDLE_PATTERN_BEARISH_MEETING_LINES) && (MFI(1)>60)) result=80; //--- vérification des conditions pour fermer la position longue //--- croisement de la ligne de signal des niveaux de surachat/survente (à la hausse 70, à la baisse 30) if(((MFI(1)>70) && (MFI(2)<70)) || ((MFI(1)<30) && (MFI(2)>30))) result=40; //--- retourner le résultat return(result); }
2.3. Créer un Expert Advisor avec MQL5 Wizard
La classe CML_MFI n'est pas incluse dans les classes de la bibliothèque standard ; pour l'utiliser, il est nécessaire de télécharger le fichier aml_mfi.mqh (voir les pièces jointes) et de l'enregistrer dans le dossier client_terminal_data\MQL5\Include\Expert\Signal\MySignals. Il en va de même pour le fichier acandlepatterns.mqh. Vous pourrez l'utiliser dans MQL5 Wizard après avoir redémarré le MetaEditor.
Pour créer un Expert Advisor, lancez le MQL5 Wizard :

Fig. 4. Création d'un Expert Advisor avec MQL5 Wizard
Spécifions le nom de l'Expert Advisor :

Fig. 5. Propriétés générales de l'Expert Advisor
Ensuite, nous devons sélectionner les modules de signaux de trading utilisés.

Fig. 6. Propriétés des signaux de l'Expert Advisor
Dans notre cas, nous n'utilisons qu'un seul module de signaux de trading.
Ajout du module de signaux de trading : Signaux basés sur les Bullish/Bearish Meeting Lines par MFI :

Fig. 7. Propriétés des signaux de l'Expert Advisor
Module de signaux de trading ajouté :

Fig. 8. Propriétés des signaux de l'Expert Advisor
Vous pouvez sélectionner n'importe quelle propriété de trailing, mais nous allons utiliser "Trailing Stop non utilisé" :

Fig. 9. Propriétés de trailing de l'Expert Advisor
Concernant les propriétés de gestion de l'argent, nous allons utiliser "Trading avec un volume de trade fixe" :

Fig. 10. Propriétés de gestion de l'argent de l'Expert Advisor
En appuyant sur le bouton "Terminer", nous obtiendrons le code de l'Expert Advisor généré, situé dans Expert_AML_MFI.mq5, qui sera enregistré dans terminal_data_folder\MQL5\Experts\.
Les paramètres d'entrée par défaut de l'Expert Advisor généré :
//--- entrées pour le signal principal input int Signal_ThresholdOpen =10; // Valeur de seuil de signal pour ouvrir [0...100] input int Signal_ThresholdClose =10; // Valeur de seuil de signal pour fermer [0...100] input double Signal_PriceLevel =0.0; // Niveau de prix pour exécuter un deal input double Signal_StopLevel =50.0; // Niveau de Stop Loss (en points) input double Signal_TakeLevel =50.0 // Niveau de Take Profit (en points)
doit être remplacé par :
//--- entrées pour le signal principal input int Signal_ThresholdOpen =40; // Valeur de seuil de signal pour ouvrir [0...100] input int Signal_ThresholdClose =20; // Valeur de seuil de signal pour fermer [0...100] input double Signal_PriceLevel =0.0 // Niveau de prix pour exécuter un deal input double Signal_StopLevel =0.0 // Niveau de Stop Loss (en points) input double Signal_TakeLevel =0.0 // Niveau de Take Profit (en points)
Les paramètres d'entrée Signal_ThresholdOpen/Signal_ThresholdClose permettent de spécifier les niveaux de seuil pour l'ouverture et la fermeture des positions.
Dans le code des méthodes LongCondition() et ShortCondition() de la classe de signaux de trading, nous avons spécifié les valeurs fixes du seuil :
- Ouvrir une position : 80;
- Fermer une position : 40.
L'Expert Advisor, généré par MQL5 Wizard, ouvre et ferme des positions en utilisant les "votes" des modules de signaux de trading. Le vote du module principal (en tant que conteneur, il se compose de tous les modules ajoutés) est également utilisé, mais ses méthodes LongCondition() et ShortCondition() renvoient toujours 0.
Les résultats des votes du module principal sont également utilisés dans l'"average des votes". Dans notre cas, nous avons : module principal + 1 module de signaux de trading, donc nous devons tenir compte de ce fait lors de la définition des valeurs de seuil. À cause de cela, les ThresholdOpen et ThresholdClose doivent être définis comme 40=(0+80)/2 et 20=(0+40)/2.
Les valeurs des paramètres d'entrée Signal_StopLevel et Signal_TakeLevel sont définies à 0, ce qui signifie que la fermeture des positions ne se fera que lorsque les conditions de fermeture seront vraies.
2.4. Résultats de backtesting historique
Examinons le backtesting de l'Expert Advisor sur des données historiques (EURUSD H1, période de test : 2000.01.01-2011.03.16, PeriodMFI=12, MA_period=4).
Lors de la création de l'Expert Advisor, nous avons utilisé un volume fixe (Trading Fixed Lot, 0.1), l'algorithme de Trailing Stop n'est pas utilisé (Trailing non utilisé).

Fig. 11. Résultats de test de l'Expert Advisor, basé sur les Bullish/Bearish Meeting Lines + MFI
Le meilleur ensemble de paramètres d'entrée peut être trouvé en utilisant le Strategy Tester du terminal client MetaTrader 5.
Le code de l'Expert Advisor, créé par MQL5 Wizard, est joint dans expert_aml_mfi.mq5.
Articles connexes
- Utiliser MQL5 Wizard pour Créer un Expert Advisor Basé sur les Modèles de Chandeliers Englobants et MFI
- Développez un Expert Advisor avec MQL5 : Signaux de Trading 3 Corbeaux Noirs / 3 Soldats Blancs + RSI
- Créez un EA sur MetaTrader 5 avec le MQL5 Wizard : Signaux de Trading basés sur les 3 Corbeaux Noirs/3 Soldats Blancs + MFI
- Utiliser MQL5 Wizard pour des Signaux de Trading Basés sur les Étoiles du Matin/du Soir + MFI
- Créer un Expert Advisor avec MQL5 Wizard : Signaux de Trading Basés sur Bullish et Bearish Harami + MFI