Le MQL5 Wizard vous permet de créer des conseillers experts prêts à l'emploi basés sur les classes de la bibliothèque standard fournies avec le terminal client (voir Créer des Conseillers Experts dans MQL5 Wizard pour plus de détails). C'est un excellent moyen 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 des signaux de trading est dérivée de CExpertSignal. Ensuite, il est nécessaire de 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) qui propose de nombreuses stratégies de trading, mais ici nous nous concentrerons sur les modèles de chandeliers de retournement, confirmés par l'Stochastique, CCI, MFI et RSI oscillateurs.
La meilleure approche consiste à créer une classe distincte, 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, confirmation par les oscillateurs).
Dans cet article, nous allons examiner les signaux basés sur les modèles de chandeliers de retournement "Étoile du Matin/Étoile du Soir" (Étoile Doji du Matin/Étoile Doji du Soir), confirmés par l'indicateur Stochastique. Le module de signaux de trading est basé sur la classe CCandlePattern, qui 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 "Étoile du Matin" et "Étoile du Soir"
1.1. Étoile du Matin
Ce modèle indique un retournement de tendance baissière et se compose de trois chandeliers (Fig. 1). Après un long chandelier noir, on trouve un chandelier (la couleur n'est pas importante) avec un petit corps, qui se situe en dehors du corps du chandelier noir. Le petit corps d'un chandelier signifie que la force des haussiers et des baissiers est égale et que le marché est prêt à changer de tendance.
Le troisième chandelier du modèle est un chandelier haussier, son corps ne chevauche pas le corps du deuxième chandelier, et le prix de clôture se situe à l'intérieur du corps du premier chandelier (baissier). Le chandelier résultant du modèle est également représenté dans la Figure 1.
Dans le cas où le deuxième chandelier est un chandelier doji, le modèle est nommé "Étoile Doji du Matin".

Figure 1. Modèles de chandeliers 'Étoile du Matin' et 'Étoile Doji du Matin'
L'identification du modèle "Étoile du Matin" est réalisée dans les méthodes CheckPatternMorningStar() et CheckPatternMorningDoji() de la classe CCandlePattern :
//+------------------------------------------------------------------+ //| Vérifier la formation du modèle "Étoile du Matin" | //+------------------------------------------------------------------+ bool CCandlePattern::CheckPatternMorningStar() { //--- Étoile du Matin if((Open(3)-Close(3)>AvgBody(1)) && // chandelier baissier, son corps est supérieur à la moyenne (MathAbs(Close(2)-Open(2)<AvgBody(1)*0.5) && // le deuxième chandelier a un petit corps (Close(2)<Close(3)) && // clôture du deuxième chandelier inférieure à celle du premier (Open(2)<Open(3)) && // ouverture du deuxième chandelier inférieure à celle du premier (Close(1)>MidOpenClose(3))) // clôture du dernier chandelier supérieure au centre du premier chandelier return(true); //--- return(false); } //+------------------------------------------------------------------+ //| Vérifier la formation du modèle "Étoile Doji du Matin" | //+------------------------------------------------------------------+ bool CCandlePattern::CheckPatternMorningDoji() { //--- Étoile Doji du Matin if((Open(3)-Close(3)>AvgBody(1)) && // chandelier baissier avec un corps supérieur à la moyenne (AvgBody(2)<AvgBody(1*0.1) && // le deuxième chandelier a un corps très petit (doji) (Close(2)<Close(3)) && // clôture du deuxième chandelier inférieure à celle du premier (Open(2)<Open(3)) && // ouverture du deuxième chandelier inférieure à celle du premier (Open(1)>Close(2)) && // écart à la hausse au dernier chandelier (Close(1)>Close(2))) // clôture du dernier chandelier supérieure à celle du deuxième chandelier return(true); //--- return(false); }
Les méthodes CheckCandlestickPattern(CANDLE_PATTERN_MORNING_STAR) et CheckCandlestickPattern(CANDLE_PATTERN_MORNING_DOJI) de la classe CCandlePattern sont utilisées pour vérifier la formation des modèles "Étoile du Matin" et "Étoile Doji du Matin".
1.2. Étoile du Soir
Ce modèle indique un retournement de tendance haussière et se compose également de trois chandeliers (Fig. 2). Après un long chandelier blanc, on trouve un chandelier (la couleur n'est pas importante) avec un petit corps, qui se situe en dehors du corps du chandelier blanc. Le petit corps d'un chandelier signifie que la force des haussiers et des baissiers est égale et que le marché est prêt à changer de tendance.
Le troisième chandelier du modèle est un chandelier baissier, son corps ne chevauche pas le corps du deuxième chandelier, et le prix de clôture se situe à l'intérieur du corps du premier chandelier (haussier). Le chandelier résultant du modèle est également représenté dans la Figure 2.
Dans le cas où le deuxième chandelier est un chandelier doji, le modèle est nommé "Étoile Doji du Soir".

Figure 2. Modèles de chandeliers 'Étoile du Soir' et 'Étoile Doji du Soir'
Voici les méthodes pour identifier les modèles "Étoile du Soir" et "Étoile Doji du Soir" :
//+------------------------------------------------------------------+ //| Vérifier la formation du modèle "Étoile du Soir" | //+------------------------------------------------------------------+ bool CCandlePattern::CheckPatternEveningStar() { //--- Étoile du Soir if((Close(3)-Open(3)>AvgBody(1)) && // chandelier haussier avec un corps supérieur à la moyenne (MathAbs(Close(2)-Open(2)<AvgBody(1)*0.5) && // le deuxième chandelier a un petit corps (Close(2)>Close(3)) && // clôture du deuxième chandelier supérieure à celle du premier (Open(2)>Open(3)) && // ouverture du deuxième chandelier supérieure à celle du premier (Close(1)<MidOpenClose(3))) // clôture du dernier chandelier inférieure au centre du premier chandelier return(true); //--- return(false); } //+------------------------------------------------------------------+ //| Vérifier la formation du modèle "Étoile Doji du Soir" | //+------------------------------------------------------------------+ bool CCandlePattern::CheckPatternEveningDoji() { //--- Étoile Doji du Soir if((Close(3)-Open(3)>AvgBody(1)) && // chandelier haussier avec un corps supérieur à la moyenne (AvgBody(2)<AvgBody(1*0.1) && // le deuxième chandelier a un corps très petit (doji) (Close(2)>Close(3)) && // clôture du deuxième chandelier supérieure à celle du premier (Open(2)>Open(3)) && // ouverture du deuxième chandelier supérieure à celle du premier (Open(1)<Close(2)) && // écart à la baisse au dernier chandelier (Close(1)<Close(2))) // clôture du dernier chandelier inférieure à celle du deuxième chandelier return(true); //--- return(false); }
Les méthodes CheckCandlestickPattern(CANDLE_PATTERN_EVENING_STAR) et CheckCandlestickPattern(CANDLE_PATTERN_EVENING_DOJI) de la classe CCandlePattern sont utilisées pour vérifier la formation des modèles "Étoile du Soir" et "Étoile Doji du Soir".
2. Signaux de trading confirmés par l'indicateur Stochastique
Les signaux de trading pour ouvrir une position longue ou courte doivent être confirmés par l'oscillateur Stochastique. La ligne %D doit être supérieure ou inférieure aux niveaux critiques correspondants (30 ou 70).
La clôture d'une position ouverte dépend des valeurs de l'indicateur %D. Cela peut se faire dans deux cas :
- si la ligne %D a atteint le niveau critique opposé (80 pour une position longue et 20 pour une position courte)
- si le signal inverse n'est pas confirmé (lorsque la ligne %D atteint les niveaux suivants : 20 pour une position longue et 80 pour une position courte)

Figure 3. Modèle 'Étoile du Soir', confirmé par l'indicateur Stochastique
- int CH_HM_Stoch::LongCondition() - vérifie les conditions pour ouvrir une position longue (retourne 80) et fermer une position courte (retourne 40);
- int CH_HM_Stoch::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 "Étoile du Matin" doit être confirmée par l'indicateur Stochastique : StochSignal(1)<30 (la valeur de la ligne de signal de l'indicateur Stochastique de la dernière barre complétée doit être inférieure à 30).
La position courte doit être fermée si la ligne de signal de l'indicateur Stochastique a franchi à la hausse les niveaux 20 ou 80.
//+------------------------------------------------------------------+ //| Vérifie les conditions d'entrée et 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 CMS_ES_Stoch::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 Étoile du Matin et ligne de signal<30 if (CheckCandlestickPattern(CANDLE_PATTERN_MORNING_STAR) && (StochSignal(1)<30)) result=80; //--- vérification des conditions pour fermer une position courte //--- croisement de la ligne de signal des niveaux de surachat/survente (vers le bas 20, vers le haut 80) if((((StochSignal(1)>20) && (StochSignal(2)<20)) || ((StochSignal(1)>80) && (StochSignal(2)<80)))) result=40; //--- retour du résultat return(result); }
2.2. Ouvrir une position courte/Fermer une position longue
La formation du modèle "Étoile du Soir" doit être confirmée par l'indicateur Stochastique : StochSignal(1)>70 (la valeur de la ligne de signal de l'indicateur Stochastique de la dernière barre complétée doit être supérieure à 70).
-
La position longue doit être fermée si la ligne de signal de l'indicateur Stochastique a franchi à la baisse les niveaux 80 ou 20.
//+------------------------------------------------------------------+ //| Vérifie les conditions d'entrée et 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 CMS_ES_Stoch::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 de l'Étoile du Soir et ligne de signal>70 if (CheckCandlestickPattern(CANDLE_PATTERN_EVENING_STAR) && (StochSignal(1)>70)) result=80; //--- vérification des conditions pour fermer une position longue //--- croisement de la ligne de signal des niveaux de surachat/survente (vers le bas 80, vers le haut 20) if((((StochSignal(1)<80) && (StochSignal(2)>80)) || ((StochSignal(1)<20) && (StochSignal(2)>20)))) result=40; //--- retour du résultat return(result); }
2.3. Créer un Expert Advisor avec MQL5 Wizard
La classe CMS_ES_Stoch 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 acms_es_stoch.mqh (voir pièces jointes) et de le sauvegarder dans le dossier client_terminal_data\MQL5\Include\Expert\Signal\MySignals. Il en est de même pour le fichier candlepatterns.mqh. Vous pourrez les 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
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 basé sur les "Étoiles du Matin/Étoile du Soir par Stochastique" :

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 gestion de l'argent de l'Expert Advisor
Concernant les propriétés de gestion de l'argent, nous allons utiliser "Trading avec 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_AMS_ES_Stoch.mq5, qui sera enregistré 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 de seuil du signal pour ouvrir [0...100] input int Signal_ThresholdClose =10 // Valeur de seuil du 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)
doivent être remplacés par :
//--- entrées pour le signal principal input int Signal_ThresholdOpen =40 // Valeur de seuil du signal pour ouvrir [0...100] input int Signal_ThresholdClose =20 // Valeur de seuil du 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 précisé les valeurs fixes du seuil :
- Ouverture de position : 80;
- Fermeture de 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 des votes du module principal sont également utilisés dans l'"averaging" des votes. Dans notre cas, nous avons : module principal + 1 module de signaux de trading, donc nous devons prendre ce fait en compte lors de la définition des valeurs seuil. En raison de ce fait, 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 clôture 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 : 2000.01.01-2011.03.16, PeriodK=12, PeriodD=8, PeriodSlow=29, MA_period=4).
Dans 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 des tests de l'Expert Advisor, basé sur les Étoiles du Matin/Étoile du Soir + Stochastique
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_ams_es_stoch.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
- Générer des Signaux de Trading avec MQL5 Wizard : Étoiles du Matin/du Soir et RSI
- Utiliser MQL5 Wizard pour des Signaux de Trading Basés sur les Étoiles du Matin/du Soir + MFI
- Créer des Signaux de Trading avec MQL5 Wizard : Étoiles du Matin/du Soir et CCI