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 vérifier 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, puis il est nécessaire de remplacer les méthodes LongCondition() et ShortCondition() par vos propres méthodes.
Il existe un livre intitulé "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 consiste à créer une classe séparée, dérivée de CExpertSignal, pour vérifier la formation des modèles de chandeliers. Pour confirmer les signaux de trading générés par les modèles de chandeliers, il suffit d'écrire une classe dérivée de CCandlePattern et d'y ajouter les fonctionnalités nécessaires (par exemple, la confirmation par des oscillateurs).
Ici, nous allons examiner les signaux basés sur le modèle de chandeliers de retournement "Englobant haussier/Englobant baissier", confirmé par l'indicateur Market Facilitation Index (MFI). 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 retournement "Englobant Haussier" et "Englobant Baissier"
1.1. Englobant Haussier
Le modèle de retournement "Englobant Haussier" se forme en tendance baissière lorsque une petite chandelle noire est suivie par une grande chandelle blanche qui engloutit complètement la chandelle de la veille. Les ombres (queues) de la petite chandelle sont courtes, ce qui permet au corps de la grande chandelle de recouvrir toute la chandelle de la veille.

Fig. 1. Modèle de chandelier 'Englobant Haussier'
La reconnaissance du modèle "Englobant Haussier" est réalisée dans la méthode CheckPatternBullishEngulfing() de la classe CCandlePattern :
//+------------------------------------------------------------------+ //| Vérifie la formation du modèle de chandelier "Englobant Haussier" | //+------------------------------------------------------------------+ bool CCandlePattern::CheckPatternBullishEngulfing() { //--- Englobant Haussier if((Open(2)>Close(2)) && // la chandelle précédente est baissière (Close(1)-Open(1)>AvgBody(1)) && // le corps de la chandelle haussière est supérieur à la valeur moyenne du corps (Close(1)>Open(2)) && // le prix de clôture de la chandelle haussière est supérieur au prix d'ouverture de la chandelle baissière (MidOpenClose(2)<CloseAvg(2)) && // tendance baissière (Open(1)<Close(2))) // le prix d'ouverture de la chandelle haussière est inférieur au prix de clôture de la chandelle baissière return(true); //--- return(false); }
La méthode CheckCandlestickPattern(CANDLE_PATTERN_BULLISH_ENGULFING) de la classe CCandlePattern est utilisée pour vérifier la formation du modèle de chandelier "Englobant Haussier".
1.2. Englobant Baissier
Le modèle de retournement "Englobant Baissier" se forme en tendance haussière lorsqu'une petite chandelle blanche est suivie par une grande chandelle noire qui engloutit complètement la chandelle de la veille. Les ombres (queues) de la petite chandelle sont courtes, ce qui permet au corps de la grande chandelle de recouvrir toute la chandelle de la veille.

Fig. 2. Modèle de chandelier 'Englobant Baissier'
La reconnaissance du modèle "Englobant Baissier" est réalisée dans la méthode CheckPatternBearishEngulfing() de la classe CCandlePattern :
//+------------------------------------------------------------------+ //| Vérifie la formation du modèle de chandelier "Englobant Baissier" | //+------------------------------------------------------------------+ bool CCandlePattern::CheckPatternBearishEngulfing() { //--- Englobant Baissier if((Open(2)<Close(2)) && // la chandelle précédente est haussière (Open(1)-Close(1)>AvgBody(1)) && // le corps de la chandelle est supérieur à la valeur moyenne du corps (Close(1)<Open(2)) && // le prix de clôture de la chandelle baissière est inférieur au prix d'ouverture de la chandelle haussière (MidOpenClose(2)>CloseAvg(2)) && // tendance haussière (Open(1)>Close(2))) // le prix d'ouverture de la chandelle baissière est supérieur au prix de clôture de la chandelle haussière return(true); //--- return(false); }
La méthode CheckCandlestickPattern(CANDLE_PATTERN_BEARISH_ENGULFING) de la classe CCandlePattern est utilisée pour vérifier la formation du modèle de chandelier "Englobant Baissier".
2. Signaux de trading, confirmés par l'indicateur MFI
Les signaux de trading pour ouvrir une position longue ou courte doivent être confirmés par l'indicateur MFI. La valeur de l'indicateur MFI doit être inférieure à 40 (pour les positions longues) ou supérieure à 60 (pour les positions courtes).
La fermeture de la position ouverte 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)

Fig. 3. Modèle 'Englobant Haussier', confirmé par l'indicateur MFI
- int CBE_BE_MFI::LongCondition() - vérifie les conditions pour ouvrir une position longue (retourne 80) et fermer une position courte (retourne 40);
- int CBE_BE_MFI::ShortCondition() - vérifie les conditions pour ouvrir une position courte (retourne 80) et fermer une position longue (retourne 40).
2.1. Ouvrir une position longue/Fermer une position courte
La formation du modèle "Englobant Haussier" doit être confirmée par l'indicateur MFI : MFI(1)<40 (la valeur de l'indicateur MFI de la dernière barre clôturée doit être inférieure à 40).
La position courte doit être fermée si l'indicateur MFI a franchi vers le haut 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 une position courte, résultat=40) | //+------------------------------------------------------------------+ int CBE_BE_MFI::LongCondition() { int result=0; //--- idx peut être utilisé pour déterminer le mode de fonctionnement de l'EA //--- 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 Englobant Haussier et MFI<40 if(CheckCandlestickPattern(CANDLE_PATTERN_BULLISH_ENGULFING) && (MFI(1)<40)) result=80; //--- vérification des conditions pour fermer une position courte //--- croisement de la ligne de signal des niveaux surachetés/survendus (vers le haut 30, vers le haut 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 "Englobant Baissier" doit être confirmée par l'indicateur MFI : MFI(1)>60 (la valeur de l'indicateur MFI de la dernière barre clôturée doit être supérieure à 60).
La position longue doit être fermée si l'indicateur MFI a franchi vers le bas 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 une position longue, résultat=40) | //+------------------------------------------------------------------+ int CBE_BE_MFI::ShortCondition() { int result=0; //--- idx peut être utilisé pour déterminer le mode de fonctionnement de l'EA //--- 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 Englobant Baissier et MFI>60 if(CheckCandlestickPattern(CANDLE_PATTERN_BEARISH_ENGULFING) && (MFI(1)>60)) result=80; //--- vérification des conditions pour fermer une position longue //--- croisement de la ligne de signal des niveaux surachetés/survendus (vers le haut 70, vers le bas 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 CBE_BE_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 abe_be_mfi.mqh (voir pièces jointes) et de l'enregistrer dans le dossier terminal_client_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 le redémarrage de 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
Après cela, 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 modèles Englobants Haussiers/Baissiers confirmés 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 quelles propriétés 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 des fonds, nous allons utiliser "Trading avec un volume de trade fixe" :

Fig. 10. Propriétés de gestion des fonds de l'Expert Advisor
En appuyant sur le bouton "Terminer", nous obtiendrons le code de l'Expert Advisor généré, situé dans Expert_ABE_BE_MFI.mq5, qui sera sauvegardé dans le dossier 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 seuil de signal pour ouvrir [0...100] input int Signal_ThresholdClose =10 // Valeur 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 seuil de signal pour ouvrir [0...100] input int Signal_ThresholdClose =20 // Valeur 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 seuils pour ouvrir et fermer des positions.
Dans le code des méthodes LongCondition() et ShortCondition() de la classe de signaux de trading, nous avons spécifié des valeurs fixes des seuils :
- Ouvrir position : 80;
- Fermer 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() retournent toujours 0.
Les résultats de vote du module principal sont également utilisés dans l'avg de 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 seuils. À cause de ce fait, les valeurs ThresholdOpen et ThresholdClose doivent être définies à 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, cela signifie que la fermeture des positions sera effectuée uniquement lorsque les conditions de fermeture seront vraies.
2.4. Résultats du backtesting historique
Examinons le backtesting de l'Expert Advisor sur des données historiques (EURUSD H1, période de test : 2010.01.01-2011.03.16, PeriodMFI=37, MA_period=5).
Dans la création de l'Expert Advisor, nous avons utilisé le volume fixe (Trading Fixed Lot, 0.1), l'algorithme de Trailing Stop n'est pas utilisé (Trailing non utilisé).

Fig. 11. Résultats du test de l'Expert Advisor, basé sur Englobant Haussier/Baissier + 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_abe_be_mfi.mq5.
Articles connexes
- Générer des Signaux de Trading avec MQL5 Wizard : Étoiles du Matin/du Soir et RSI
- Générez des Signaux de Trading avec MQL5 Wizard : Dark Cloud Cover et Piercing Line
- Développez un Expert Advisor avec MQL5 : Signaux de Trading 3 Corbeaux Noirs / 3 Soldats Blancs + RSI
- AOCCI : Un Expert pour MetaTrader 5
- Générez des Signaux de Trading avec l'Indicateur Alligator sur MetaTrader 5