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 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 est dérivée de CExpertSignal. Ensuite, il est nécessaire de remplacer les méthodes virtuelles 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 abordées. Nous allons nous concentrer sur les modèles de chandeliers de retournement, confirmés par des oscillateurs comme Stochastique, CCI, MFI et RSI.
La meilleure façon est de 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, confirmation par des oscillateurs).
Nous allons examiner les signaux basés sur les modèles de chandeliers "Étoile du Matin/Étoile du Soir" (Morning Doji Star/Evening Doji Star), confirmés par l'indicateur RSI. 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 : "Étoile du Matin" et "Étoile du Soir"
1.1. Étoile du Matin
Ce modèle indique un retournement de tendance à la baisse. Il se compose de trois chandeliers (Fig. 1). Après une longue bougie noire, il y a une bougie (la couleur n'est pas importante) avec un petit corps qui se trouve en dehors du corps de la bougie noire. Le petit corps d'une bougie signifie que les forces des acheteurs et des vendeurs sont égales et que le marché est prêt à changer de tendance.
La troisième bougie du modèle est une bougie haussière, son corps ne chevauche pas celui de la deuxième bougie, et le prix de clôture se trouve à l'intérieur du corps de la première bougie (baissière). La bougie résultante du modèle est également représentée à la Figure 1.
Dans le cas où la deuxième bougie est de type doji, le modèle est nommé "Étoile du Matin Doji".

Fig. 1. Modèles de chandeliers “Étoile du Matin” et “Étoile du Matin Doji”
L'identification du modèle "Étoile du Matin" se fait dans les méthodes CheckPatternMorningStar() et CheckPatternMorningDoji() de la classe CCandlePattern :
//+------------------------------------------------------------------+ //| Vérifie la formation du modèle “Étoile du Matin” | //+------------------------------------------------------------------+ bool CCandlePattern::CheckPatternMorningStar() { //--- Étoile du Matin if((Open(3)-Close(3)>AvgBody(1)) && // bougie baissière, son corps est plus grand que le corps moyen (MathAbs(Close(2)-Open(2)<AvgBody(1)*0.5) && // la deuxième bougie a un petit corps (moins de la moitié du corps moyen) (Close(2)<Close(3)) && // la clôture de la deuxième bougie est inférieure à celle de la première (Open(2)<Open(3)) && // l'ouverture de la deuxième bougie est inférieure à celle de la première (Close(1)>MidOpenClose(3))) // la clôture de la dernière bougie complétée est supérieure au centre de la première return(true); //--- return(false); } //+------------------------------------------------------------------+ //| Vérifie la formation du modèle “Étoile du Matin Doji” | //+------------------------------------------------------------------+ bool CCandlePattern::CheckPatternMorningDoji() { //--- Étoile du Matin Doji if((Open(3)-Close(3)>AvgBody(1)) && // bougie baissière avec corps plus grand que le corps moyen (AvgBody(2)<AvgBody(1)*0.1) && // la deuxième bougie a un corps très petit (doji) (Close(2)<Close(3)) && // la clôture de la deuxième bougie est inférieure à celle de la première (Open(2)<Open(3)) && // l'ouverture de la deuxième bougie est inférieure à celle de la première (Open(1)>Close(2)) && // écart à la hausse de la dernière bougie complétée (Close(1)>Close(2))) // la clôture de la dernière bougie complétée est supérieure à celle de la deuxième 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 de chandeliers "Étoile du Matin" et "Étoile du Matin Doji".
1.2. Étoile du Soir
Ce modèle indique un retournement de tendance à la hausse. Il se compose de trois chandeliers (Fig. 2). Après une longue bougie blanche, il y a une bougie (la couleur n'est pas importante) avec un petit corps, qui se trouve en dehors du corps de la bougie blanche. Le petit corps d'une bougie signifie que les forces des acheteurs et des vendeurs sont égales et que le marché est prêt à changer de tendance.
La troisième bougie du modèle est une bougie baissière, son corps ne chevauche pas celui de la deuxième bougie, et le prix de clôture se trouve à l'intérieur du corps de la première bougie (haussière). La bougie résultante du modèle est également représentée à la Figure 2.
Dans le cas où la deuxième bougie est de type doji, le modèle est nommé "Étoile du Soir Doji".

Fig. 2. Modèles de chandeliers “Étoile du Soir” et “Étoile du Soir Doji”
Voici les méthodes pour identifier les modèles "Étoile du Soir" et "Étoile du Soir Doji" :
//+------------------------------------------------------------------+ //| Vérifie la formation du modèle “Étoile du Soir” | //+------------------------------------------------------------------+ bool CCandlePattern::CheckPatternEveningStar() { //--- Étoile du Soir if((Close(3)-Open(3)>AvgBody(1)) && // bougie haussière avec corps supérieur au corps moyen (MathAbs(Close(2)-Open(2)<AvgBody(1)*0.5) && // la deuxième bougie a un petit corps (moins de la moitié du corps moyen) (Close(2)>Close(3)) && // la clôture de la deuxième bougie est supérieure à celle de la première (Open(2)>Open(3)) && // l'ouverture de la deuxième bougie est supérieure à celle de la première (Close(1)<MidOpenClose(3))) // la clôture de la dernière bougie complétée est inférieure au centre de la première return(true); //--- return(false); } //+------------------------------------------------------------------+ //| Vérifie la formation du modèle “Étoile du Soir Doji” | //+------------------------------------------------------------------+ bool CCandlePattern::CheckPatternEveningDoji() { //--- Étoile du Soir Doji if((Close(3)-Open(3)>AvgBody(1)) && // bougie haussière avec corps supérieur au corps moyen (AvgBody(2)<AvgBody(1)*0.1) && // la deuxième bougie a un corps très petit (doji) (Close(2)>Close(3)) && // la clôture de la deuxième bougie est supérieure à celle de la première (Open(2)>Open(3)) && // l'ouverture de la deuxième bougie est supérieure à celle de la première (Open(1)<Close(2)) && // écart à la baisse de la dernière bougie complétée (Close(1)<Close(2))) // la clôture de la dernière bougie complétée est inférieure à celle de la deuxième 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 de chandeliers "Étoile du Soir" et "Étoile du Soir Doji".
2. Signaux de trading confirmés par l'indicateur RSI
Les signaux de trading pour ouvrir une position longue ou courte doivent être confirmés par l'indicateur RSI. La valeur du RSI doit être inférieure/superieure à des niveaux critiques (40 pour une position longue et 60 pour une position courte).
La fermeture d'une position ouverte dépend des valeurs du RSI. Cela peut se faire dans 2 cas :
- si le RSI 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 le RSI atteint les niveaux suivants : 30 pour une position longue et 70 pour une position courte)

Fig. 3. Modèle “Étoile du Matin”, confirmé par l'indicateur RSI
- int CMS_ES_RSI::LongCondition() - vérifie les conditions pour ouvrir une position longue (retourne 80) et fermer la position courte (retourne 40);
- int CMS_ES_RSI::ShortCondition() - vérifie les conditions pour ouvrir une position courte (retourne 80) et fermer la 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 RSI :
RSI(1)<40 (la valeur du RSI de la dernière bougie complétée doit être inférieure à 40).La position courte doit être fermée si l'indicateur RSI 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 position longue, résultat=80) | //| 2) Sortie du marché (fermer position courte, résultat=40) | //+------------------------------------------------------------------+ int CMS_ES_RSI::LongCondition() { int result=0; //--- idx peut être utilisé pour déterminer le mode de travail 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 nouvelles bougies int idx =StartIndex(); //--- vérification des conditions pour ouvrir une position longue //--- formation du modèle Étoile du Matin et RSI<30 if(CheckCandlestickPattern(CANDLE_PATTERN_MORNING_STAR) && (RSI(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(((RSI(1)>30) && (RSI(2)<30)) || ((RSI(1)>70) && (RSI(2)<70))) 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 RSI : RSI(1)>60 (la valeur de l'indicateur RSI de la dernière bougie complétée doit être supérieure à 60).
La position longue doit être fermée si l'indicateur RSI a franchi à 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 position courte, résultat=80) | //| 2) Sortie du marché (fermer position longue, résultat=40) | //+------------------------------------------------------------------+ int CMS_ES_RSI::ShortCondition() { int result=0; //--- idx peut être utilisé pour déterminer le mode de travail 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 nouvelles bougies int idx =StartIndex(); //--- vérification des conditions pour ouvrir une position courte //--- formation du modèle Étoile du Soir et RSI>60 if(CheckCandlestickPattern(CANDLE_PATTERN_EVENING_STAR) && (RSI(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 baisse 70, à la baisse 30) if(((RSI(1)<70) && (RSI(2)>70)) || ((RSI(1)<30) && (RSI(2)>30))) result=40; //--- retour du résultat return(result); }
2.3. Créer un Conseiller Expert avec MQL5 Wizard
La classe CMS_ES_RSI 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_rsi.mqh (voir pièces jointes) et de le sauvegarder dans le dossier client_terminal_data_folder\MQL5\Include\Expert\Signal\MySignals. Il en va de même pour le fichier candlepatterns.mqh. Vous pouvez l'utiliser dans MQL5 Wizard après le redémarrage de MetaEditor.
Pour créer un conseiller expert, lancez le MQL5 Wizard :

Fig. 4. Création d'un Conseiller Expert avec MQL5 Wizard
Spécifions le nom du Conseiller Expert :

Fig. 5. Propriétés générales du Conseiller Expert
Après cela, nous devons sélectionner les modules de signaux de trading utilisés.

Fig. 6. Propriétés des signaux du Conseiller Expert
Dans notre cas, nous n'utilisons qu'un seul module de signaux de trading.
Ajout du module de signal : "Signaux basés sur les Étoiles du Matin/du Soir confirmés par RSI" :

Fig. 7. Propriétés des signaux du Conseiller Expert
Module de signaux de trading ajouté :

Fig. 8. Propriétés des signaux du Conseiller Expert
Vous pouvez sélectionner n'importe quelle propriété de suivi, mais nous allons utiliser "Aucun Trailing Stop" :

Fig. 9. Propriétés de gestion de l'argent du Conseiller Expert
Concernant les propriétés de gestion de l'argent, nous utiliserons "Trading avec un volume de transaction fixe" :

Fig. 10. Propriétés de gestion de l'argent du Conseiller Expert
En appuyant sur le bouton "Terminer", nous obtiendrons le code du Conseiller Expert généré, situé dans Expert_AMS_ES_RSI.mq5, qui sera enregistré dans terminal_data_folder\MQL5\Experts\.
Les paramètres d'entrée par défaut du Conseiller Expert généré :
//--- entrées pour le signal principal input int Signal_ThresholdOpen =10; // Valeur seuil du signal pour ouvrir [0...100] input int Signal_ThresholdClose =10; // Valeur seuil du signal pour fermer [0...100] input double Signal_PriceLevel =0.0; // Niveau de prix pour exécuter une opération 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 du signal pour ouvrir [0...100] input int Signal_ThresholdClose =20; // Valeur seuil du signal pour fermer [0...100] input double Signal_PriceLevel =0.0 // Niveau de prix pour exécuter une opération 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é les valeurs fixes des seuils :
- Ouvrir position : 80;
- Fermer position : 40.
Le Conseiller Expert 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 (comme 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'"average des votes". Dans notre cas, nous avons : module principal + 1 module de signaux de trading, donc nous devons prendre en compte ce fait lors de la définition des valeurs seuils. À cause de ce fait, les ThresholdOpen et ThresholdClose doivent être fixés à 40=(0+80)/2 et 20=(0+40)/2.
Les valeurs des paramètres d'entrée Signal_StopLevel et Signal_TakeLevel sont fixées à 0, ce qui signifie que la fermeture des positions ne sera effectuée que lorsque les conditions de fermeture seront vraies.
2.4. Résultats des tests de rétrotest
Considérons le rétrotest du Conseiller Expert sur des données historiques (EURUSD H1, période de test : 01.01.2010-04.03.2011, PeriodK=47, PeriodD=9, PeriodSlow=13, MA_period=5).
Lors de la création du Conseiller Expert, nous avons utilisé un volume fixe (Trading Fixed Lot, 0.1), l'algorithme Trailing Stop n'est pas utilisé (Trailing not used).

Fig. 11. Résultats des tests du Conseiller Expert, basé sur les Étoiles du Matin/du Soir + RSI
Le meilleur ensemble de paramètres d'entrée peut être trouvé en utilisant le Testeur de Stratégie du terminal client MetaTrader 5.
L'étude des paramètres est considérablement simplifiée grâce au mode de visualisation 3D du Testeur de Stratégie, ajouté à partir de la version 419 (Fig. 12):

Fig. 12. Solde en fonction des paramètres d'entrée PeriodRSI et MA_period
Le code du Conseiller Expert, créé par MQL5 Wizard, est joint dans expert_ms_es_rsi.mq5.
Articles connexes
- Utiliser MQL5 Wizard pour Créer un Expert Advisor Basé sur les Modèles de Chandeliers Englobants et MFI
- 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