Créer un Expert Advisor avec MQL5 Wizard : Signaux de Trading Basés sur les Candlesticks Engulfing et le CCI

Mike 2011.03.10 19:54 18 0 0
Pièce jointe

Le MQL5 Wizard vous permet de créer des Conseillers Experts (Expert Advisors) prêts à l'emploi basés sur les classes de la bibliothèque standard fournies avec le terminal client. Cela 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 sont décrits 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 redéfinir les méthodes virtuelles LongCondition() et ShortCondition() avec vos propres méthodes.

Un livre intitulé "Stratégies des meilleurs traders" (en russe) traite de nombreuses stratégies de trading. Nous allons nous concentrer sur les modèles de chandeliers de retournement, confirmés par les oscillateurs tels que 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 (comme la confirmation par les oscillateurs).

Nous allons examiner les signaux basés sur le modèle de chandelier de retournement "Bullish Engulfing/Bearish Engulfing", confirmé par l'indicateur CCI. Le module de signaux de trading est basé sur la classe CCandlePattern, un exemple simple de son utilisation pour créer des signaux de trading avec des modèles de chandeliers.

1. Modèles de chandelier de retournement "Bullish Engulfing" et "Bearish Engulfing"

1.1. Bullish Engulfing

Le modèle de retournement "Bullish Engulfing" se forme lors d'une tendance baissière lorsque une petite bougie noire est suivie d'une grande bougie blanche qui engloutit complètement la bougie de la journée précédente. Les ombres de la petite bougie sont courtes, ce qui permet au corps de la grande bougie de couvrir complètement la bougie de la journée précédente.

Fig. 1. Modèle de chandelier

Fig. 1. Modèle de chandelier "Bullish Engulfing"

La reconnaissance du modèle "Bullish Engulfing" est implémentée dans la méthode CheckPatternBullishEngulfing() de la classe CCandlePattern :

//+------------------------------------------------------------------+
//| Vérifie la formation du modèle de chandelier "Bullish Engulfing" |
//+------------------------------------------------------------------+
bool CCandlePattern::CheckPatternBullishEngulfing()
  {
//--- Bullish Engulfing
   if((Open(2)>Close(2))             &&  // la bougie précédente est baissière
      (Close(1)-Open(1)>AvgBody(1))  &&  // le corps de la bougie haussière est supérieur à la valeur moyenne du corps
      (Close(1)>Open(2))             &&  // le prix de clôture de la bougie haussière est supérieur au prix d'ouverture de la bougie baissière
      (MidOpenClose(2)<CloseAvg(2))  &&  // tendance baissière
      (Open(1)<Close(2)))                // le prix d'ouverture de la bougie haussière est inférieur au prix de clôture de la bougie 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 "Bullish Engulfing".


1.2. Bearish Engulfing

Le modèle de retournement "Bearish Engulfing" se forme lors d'une tendance haussière lorsque une petite bougie blanche est suivie d'une grande bougie noire qui engloutit complètement la bougie de la journée précédente. Les ombres de la petite bougie sont courtes, ce qui permet au corps de la grande bougie de couvrir complètement la bougie de la journée précédente.

Fig. 2. Modèle de chandelier

Fig. 2. Modèle de chandelier "Bearish Engulfing"

La reconnaissance du modèle "Bearish Engulfing" est implémentée dans la méthode CheckPatternBearishEngulfing() de la classe CCandlePattern :

//+------------------------------------------------------------------+
//| Vérifie la formation du modèle de chandelier "Bearish Engulfing" |
//+------------------------------------------------------------------+
bool CCandlePattern::CheckPatternBearishEngulfing()
  {
//--- Bearish Engulfing
   if((Open(2)<Close(2))            &&  // la bougie précédente est haussière
      (Open(1)-Close(1)>AvgBody(1)) &&  // le corps de la bougie est supérieur à la valeur moyenne du corps
      (Close(1)<Open(2))            &&  // le prix de clôture de la bougie baissière est inférieur au prix d'ouverture de la bougie haussière
      (MidOpenClose(2)>CloseAvg(2)) &&  // tendance haussière
      (Open(1)>Close(2)))               // le prix d'ouverture de la bougie baissière est supérieur au prix de clôture de la bougie 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 "Bearish Engulfing".


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 ou inférieure aux niveaux critiques (-50 pour une position longue et 50 pour une position courte).

La clôture de la position ouverte dépend des valeurs du CCI. Cela peut être fait dans deux cas :

  • si la ligne CCI a atteint le niveau critique opposé (80 pour une position longue et -80 pour une position courte)
  • 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. Modèle

Fig. 3. Modèle "Bullish Engulfing", confirmé par l'indicateur CCI


  • int CBE_BE_CCI::LongCondition() - vérifie les conditions pour ouvrir une position longue (renvoie 80) et clôturer une position courte (renvoie 40);
  • int CBE_BE_CCI::ShortCondition() - vérifie les conditions pour ouvrir une position courte (renvoie 80) et clôturer une position longue (renvoie 40).

2.1. Ouvrir une position longue / Clôturer une position courte

  1. La formation du modèle "Bullish Engulfing" doit être confirmée par l'indicateur CCI : CCI(1)<-50 (la valeur du CCI de la dernière barre complétée doit être inférieure à -50).

  2. La position courte doit être clôturée si l'indicateur CCI a franchi vers le haut le niveau critique -80 ou a franchi vers le bas le niveau critique 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é (clôturer la position courte, résultat=40)                 |
//+------------------------------------------------------------------+
int CBE_BE_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 aux nouvelles barres
   int idx   =StartIndex();
//--- vérification des conditions pour ouvrir une position longue
//--- formation du modèle Bullish Engulfing et CCI<-50
   if(CheckCandlestickPattern(CANDLE_PATTERN_BULLISH_ENGULFING) && (CCI(1)<-50))
     result=80;
//--- vérification des conditions pour clôturer la position courte
//--- croisement de la ligne du signal des niveaux de surachat/survente (vers le bas -80, vers le bas -80)
   if(((CCI(1)>-80) && (CCI(2)<-80)) || ((CCI(1)<80) && (CCI(2)>80)))
     result=40;
//--- retourner le résultat
   return(result);
  }

2.2. Ouvrir une position courte / Clôturer une position longue

  1. La formation du modèle "Bearish Engulfing" doit être confirmée par l'indicateur CCI : CCI(1)>50 (la valeur de l'indicateur CCI de la dernière barre complétée doit être supérieure à 50).

  2. La position longue doit être clôturée si l'indicateur CCI a franchi vers le bas les niveaux -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é (clôturer une position longue, résultat=40)                |
//+------------------------------------------------------------------+
int CBE_BE_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 aux nouvelles barres
   int idx   =StartIndex();
//--- vérification des conditions pour ouvrir une position courte
//--- formation du modèle Bearish Engulfing et CCI>50
   if(CheckCandlestickPattern(CANDLE_PATTERN_BEARISH_ENGULFING) && (CCI(1)>50))
     result=80;
//--- vérification des conditions pour clôturer la position longue
//--- croisement de la ligne du signal des niveaux de surachat/survente (vers le bas -80, vers le bas 80)
   if(((CCI(1)<80) && (CCI(2)>80)) || ((CCI(1)<-80) && (CCI(2)>-80)))
     result=40;
//--- retourner le résultat
   return(result);
  }


2.3. Créer un Expert Advisor avec MQL5 Wizard

La classe CBE_BE_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 acbe_be_cci.mqh (voir pièces jointes) et de le sauvegarder dans le dossier terminal_client_data\MQL5\Include\Expert\Signal\MySignals. Il faut faire de même avec le fichier candlepatterns.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

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

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 du signal de l'Expert Advisor

Fig. 6. Propriétés du signal de l'Expert Advisor

Dans notre cas, nous n'utilisons qu'un seul module de signaux de trading.

Ajout du module de signaux Basés sur Bullish Engulfing/Bearish Engulfing confirmés par CCI :

Fig. 7. Propriétés du signal de l'Expert Advisor

Fig. 7. Propriétés du signal de l'Expert Advisor

Module de signaux de trading ajouté :

Fig. 8. Propriétés du signal de l'Expert Advisor

Fig. 8. Propriétés du signal 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

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 transaction fixe" :

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

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_ABE_BE_CCI.mq5, qui sera sauvegardé 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 seuil du signal pour ouvrir [0...100]
input int            Signal_ThresholdClose  =10;     // Valeur seuil du signal pour clôturer [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 clôturer [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 clôture 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 :

  • Ouverture de position : 80;
  • Clôture de position : 40.

L'Expert Advisor, généré par MQL5 Wizard, ouvre et clôture des positions en utilisant les "votes" des modules de signaux de trading. Le vote du module principal (en tant que conteneur, il consiste en 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'"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. En raison de ce fait, les ThresholdOpen et ThresholdClose doivent être fixées à 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 se fera que lorsque les conditions de clôture seront vraies.


2.4. Résultats des tests de backtesting

Examinons le backtesting de l'Expert Advisor sur des données historiques (EURUSD H1, période de test : 2010.01.01-2011.03.16, PeriodCCI=49, MA_period=11).

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 not used).

Fig. 11. Résultats des tests de l'Expert Advisor, basé sur Bullish Engulfing/Bearish Engulfing + CCI

Fig. 11. Résultats des tests de l'Expert Advisor, basé sur Bullish Engulfing/Bearish Engulfing + CCI


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_cci.mq5.

Liste
Commentaire 0