Accueil Trading Systématique Publication

Créer des Signaux de Trading avec MQL5 Wizard : Étoiles du Matin/du Soir et CCI

Pièce jointe
322.zip (6.46 KB, Télécharger 0 fois)

Le MQL5 Wizard est un outil super pratique pour créer des Conseillers Experts prêts à l'emploi basés sur les classes de la bibliothèque standard fournies avec le terminal client. Cela permet de tester rapidement vos idées de trading, il suffit de créer votre propre classe de signaux de trading. La structure de cette classe et un exemple sont abordé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.

Un livre intéressant à lire est "Stratégies des meilleurs traders" (en russe), où de nombreuses stratégies de trading sont discutées. Nous allons nous concentrer sur les motifs de chandeliers de retournement, confirmés par les oscillateurs Stochastique, CCI, MFI et RSI.

La meilleure méthode consiste à créer une classe séparée dérivée de CExpertSignal pour vérifier la formation des motifs de chandeliers. Pour confirmer les signaux de trading générés par les motifs de chandeliers, il suffit d'écrire la classe dérivée de CCandlePattern et d'y ajouter les fonctionnalités nécessaires (par exemple, confirmation par oscillateurs).

Nous allons considérer les signaux basés sur les motifs de retournement "Étoile du Matin/Étoile du Soir" (Morning Doji Star/Evening Doji Star), confirmés par l'indicateur CCI. 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 motifs de chandeliers.

1. Motifs de chandeliers de retournement : "Étoile du Matin" et "Étoile du Soir"

1.1. Étoile du Matin

Ce motif indique un retournement de tendance baissière, il est constitué de trois bougies (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 situe 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 motif est une bougie haussière, son corps ne chevauche pas le corps de la deuxième bougie, et le prix de clôture se situe à l'intérieur du corps de la première bougie (baissière). La bougie résultante du modèle est également tracée à la Figure 1.

Dans le cas où la deuxième bougie est une bougie de type doji, le modèle est nommé "Étoile du Matin Doji".

Fig. 1. Motifs de chandeliers �Étoile du Matin et �Étoile du Matin Doji

Fig. 1. Motifs de chandeliers "Étoile du Matin" et "Étoile du Matin Doji"

L'identification du motif "Étoile du Matin" est implémentée dans les méthodes CheckPatternMorningStar() et CheckPatternMorningDoji() de la classe CCandlePattern :

//+------------------------------------------------------------------+
//| Vérifie la formation du motif "Étoile du Matin"                    |
//+------------------------------------------------------------------+
bool CCandlePattern::CheckPatternMorningStar() 
  { 
//--- Étoile du Matin
   if((Open(3)-Close(3)>AvgBody(1))             && // bougie baissière, son corps est supérieur à la taille moyenne des bougies
      (MathAbs(Close(2)-Open(2)<AvgBody(1)*0.5) && // deuxième bougie a un petit corps (inférieur à 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 à l'ouverture 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 motif "Étoile du Matin Doji"               |
//+------------------------------------------------------------------+
bool CCandlePattern::CheckPatternMorningDoji()
  { 
//--- Étoile du Matin Doji
   if((Open(3)-Close(3)>AvgBody(1)) && // bougie baissière avec un corps supérieur à la taille moyenne des bougies 
      (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 à l'ouverture 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 à la clôture 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 motifs "Étoile du Matin" et "Étoile du Matin Doji".


1.2. Étoile du Soir

Ce motif indique un retournement de tendance haussière, il est constitué de trois bougies (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 situe 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 motif est une bougie baissière, son corps ne chevauche pas le corps de la deuxième bougie, et le prix de clôture se situe à l'intérieur du corps de la première bougie (haussière). La bougie résultante du modèle est également tracée à la Figure 2.

Dans le cas où la deuxième bougie est une bougie de type doji, le modèle est nommé "Étoile du Soir Doji".

Fig. 2. Motifs de chandeliers �Étoile du Soir et �Étoile du Soir Doji

Fig. 2. Motifs de chandeliers "Étoile du Soir" et "Étoile du Soir Doji"

Voici les méthodes pour identifier les motifs "Étoile du Soir" et "Étoile du Soir Doji" :

//+------------------------------------------------------------------+
//| Vérifie la formation du motif "Étoile du Soir"                    |
//+------------------------------------------------------------------+
bool CCandlePattern::CheckPatternEveningStar() 
  {
//--- Étoile du Soir
   if((Close(3)-Open(3)>AvgBody(1))             && // bougie haussière avec corps supérieur à la taille moyenne des bougies 
      (MathAbs(Close(2)-Open(2)<AvgBody(1)*0.5) && // deuxième bougie a un petit corps (moins de la moitié de l\u2019moyenne)
      (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 à l'ouverture 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 motif "É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 à la taille moyenne 
      (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 à l'ouverture 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 à la clôture 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 motifs "Étoile du Soir" et "Étoile du Soir Doji".


2. Signaux de trading, confirmés par l'indicateur CCI

Les signaux de trading pour ouvrir une position longue ou courte doivent être confirmés par l'indicateur CCI. La valeur du CCI doit être supérieure/inférieure aux niveaux critiques (-50 pour une position longue et 50 pour une position courte).

La clôture des positions ouvertes dépend des valeurs du CCI. Cela peut se faire dans 2 cas :

  1. si la ligne CCI a atteint le niveau critique opposé (80 pour une position longue et -80 pour une position courte)
  2. si le signal inverse n'est pas confirmé (lorsque le CCI atteint les niveaux suivants : -80 pour une position longue et 80 pour une position courte)

Fig. 3. Le motif

Fig. 3. Le motif "Étoile du Soir", confirmé par l'indicateur CCI


  • int CMS_ES_CCI::LongCondition() - vérifie les conditions pour ouvrir une position longue (retourne 80) et fermer la position courte (retourne 40);
  • int CMS_ES_CCI::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

  1. La formation du motif "Étoile du Matin" doit être confirmée par l'indicateur CCI : CCI(1)<-50 (la valeur du CCI de la dernière bougie complétée doit être inférieure à -50).

  2. La position courte doit être fermée si l'indicateur CCI a franchi à la hausse le niveau critique -80 ou a franchi à la baisse le niveau 80.

//+------------------------------------------------------------------+
//| 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 CMS_ES_CCI::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 lors de nouvelles barres
   int idx   =StartIndex();
//--- vérification des conditions pour ouvrir une position longue
//--- formation du motif Étoile du Matin et CCI<-50
   if(CheckCandlestickPattern(CANDLE_PATTERN_MORNING_STAR) && (CCI(1)<-50))
     result=80;
//--- vérification des conditions pour fermer la position courte
//--- croisement de la ligne de signal des niveaux de surachat/survente (à la baisse -80, à la baisse -80)
   if(((CCI(1)>-80) && (CCI(2)<-80)) || ((CCI(1)<80) && (CCI(2)>80)))
     result=40;
//--- retour du résultat
   return(result);
  }

2.2. Ouvrir une position courte/Fermer une position longue

  1. La formation du motif "Étoile du Soir" doit être confirmée par l'indicateur CCI : CCI(1)>50 (la valeur du CCI de la dernière bougie complétée doit être supérieure à 50).

  2. La position longue doit être fermée si l'indicateur CCI a franchi à la baisse le niveau -80 ou 80.

//+------------------------------------------------------------------+
//| 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 CMS_ES_CCI::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 lors de nouvelles barres
   int idx   =StartIndex();
//--- vérification des conditions pour ouvrir une position courte
//--- formation du motif Étoile du Soir et CCI>50
   if(CheckCandlestickPattern(CANDLE_PATTERN_EVENING_STAR) && (CCI(1)>50))
     result=80;
//--- vérification des conditions pour fermer la position longue
//--- croisement de la ligne de signal des niveaux de surachat/survente (à la baisse -80, à la hausse 80)
   if(((CCI(1)<80) && (CCI(2)>80)) || ((CCI(1)<-80) && (CCI(2)>-80)))
     result=40;
//--- retour du résultat
   return(result);
  }


2.3. Créer un Conseiller Expert avec MQL5 Wizard

La classe CMS_ES_CCI 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_cci.mqh (voir les 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 du Conseiller Expert avec MQL5 Wizard

Fig. 4. Création du Conseiller Expert avec MQL5 Wizard

Spécifions le nom du Conseiller Expert :

Fig. 5. Propriétés générales 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

Fig. 6. Propriétés des signaux du Conseiller Expert

Dans notre cas, nous utilisons uniquement un module de signaux de trading.

Ajout du module Signaux basés sur les Étoiles du Matin/du Soir confirmés par CCI :

Fig. 7. Propriétés des signaux du Conseiller Expert

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

Fig. 8. Propriétés des signaux du Conseiller Expert

Vous pouvez sélectionner n'importe quelles propriétés de suivi, mais nous allons utiliser "Aucun Suivi" :

Fig. 9. Propriétés de suivi du Conseiller Expert

Fig. 9. Propriétés de suivi du Conseiller Expert

Concernant les propriétés de gestion de l'argent, nous allons utiliser "Trading avec un volume fixe" :

Fig. 10. Propriétés de gestion de l'argent du Conseiller Expert

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_CCI.mq5, il sera sauvegardé 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 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 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 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 l'ouverture et la fermeture des positions.

Dans le code des méthodes LongCondition() et ShortCondition() de la classe des signaux de trading, nous avons spécifié les valeurs fixes du seuil :

  • Ouvrir une position : 80;
  • Fermer une 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 (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 seuils. À cause de cela, 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, cela signifie que la clôture des positions ne se fera que lorsque les conditions de clôture seront vraies.


2.4. Résultats des tests de rétroaction

Examinons les tests de rétroaction du Conseiller Expert sur des données historiques (EURUSD H1, période de test : 2009.01.01-2011.03.16, PeriodCCI=25, MA_period=5).

Dans la création du Conseiller Expert, nous avons utilisé un volume fixe (Trading Volume Fixe, 0.1), l'algorithme de Trailing Stop n'est pas utilisé (Aucun Suivi).

Fig. 11. Résultats de test du Conseiller Expert, basé sur les Étoiles du Matin/du Soir + CCI

Fig. 11. Résultats de test du Conseiller Expert, basé sur les Étoiles du Matin/du Soir + CCI


Le meilleur ensemble de paramètres d'entrée peut être trouvé en utilisant le Testeur de Stratégie du terminal client MetaTrader 5.

Le code du Conseiller Expert, créé par MQL5 Wizard est joint dans expert_ams_es_cci.mq5.


Articles connexes

Commentaire (0)