MQL5 Wizard : Créez un Expert Advisor pour Signaux de Trading avec Engulfing et Stochastique

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

Le MQL5 Wizard permet de générer des Experts Advisors prêts à l'emploi basés sur les classes de la bibliothèque standard fournies avec le terminal client (voir Créer des Experts Advisors avec MQL5 Wizard pour plus de détails). C'est un outil idéal pour 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 sont disponibles 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.

Dans le livre "Stratégies des meilleurs traders" (en russe), de nombreuses stratégies de trading y sont abordées, et nous allons nous concentrer sur les modèles de chandeliers de retournement, confirmés par l'indicateur Stochastique, CCI, MFI et RSI.

Le meilleur moyen est de 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, la confirmation par des oscillateurs).

Nous allons examiner les signaux basés sur le modèle de chandelier de retournement "Bullish Engulfing/Bearish Engulfing", confirmés par l'indicateur Stochastique. 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 chandelier de retournement : "Bullish Engulfing" et "Bearish Engulfing"

1.1. Bullish Engulfing

Le modèle de retournement "Bullish Engulfing" se forme dans une tendance baissière lorsque un petit chandelier noir est suivi par un grand chandelier blanc qui engloutit complètement le chandelier de la veille. Les ombres (queues) du petit chandelier sont courtes, ce qui permet au corps du grand chandelier de couvrir l'ensemble du chandelier de la veille.

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))             &&  // le chandelier précédent est baissier
      (Close(1)-Open(1)>AvgBody(1))  &&  // le corps du chandelier haussier est supérieur à la valeur moyenne du corps
      (Close(1)>Open(2))             &&  // le prix de clôture du chandelier haussier est supérieur au prix d'ouverture du chandelier baissier
      (MidOpenClose(2)<CloseAvg(2))  &&  // tendance baissière
      (Open(1)<Close(2)))                // le prix d'ouverture du chandelier haussier est inférieur au prix de clôture du chandelier baissier
      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 dans une tendance haussière lorsque un petit chandelier blanc est suivi par un grand chandelier noir qui engloutit complètement le chandelier de la veille. Les ombres (queues) du petit chandelier sont courtes, ce qui permet au corps du grand chandelier de couvrir l'ensemble du chandelier de la veille.

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))             &&  // le chandelier précédent est haussier
      (Open(1)-Close(1)>AvgBody(1)) &&  // le corps du chandelier est supérieur à la valeur moyenne du corps
      (Close(1)<Open(2))            &&  // le prix de clôture du chandelier baissier est inférieur au prix d'ouverture du chandelier haussier
      (MidOpenClose(2)>CloseAvg(2)) &&  // tendance haussière
      (Open(1)>Close(2)))                // le prix d'ouverture du chandelier baissier est supérieur au prix de clôture du chandelier haussier
      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 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 au niveau critique correspondant (30 ou 70).

La fermeture d'une position ouverte dépend des valeurs de l'indicateur %D. Cela peut se faire dans deux cas :

  1. si la ligne %D a atteint le niveau critique opposé (80 pour une position longue et 20 pour une position courte)
  2. 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)

Fig. 3. Modèle

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


La vérification des conditions de trading pour l'entrée et la sortie s'effectue dans deux méthodes :

  • int CBE_BE_Stoch::LongCondition() - vérifie les conditions pour ouvrir une position longue (renvoie 80) et fermer la position courte (renvoie 40) ;
  • int CBE_BE_Stoch::ShortCondition() - vérifie les conditions pour ouvrir une position courte (renvoie 80) et fermer la position longue (renvoie 40).

2.1. Ouvrir une position longue/Fermer une position courte

  1. La formation du modèle "Bullish Engulfing" 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).

  2. 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 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_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 nouvelles barres
  int idx   =StartIndex();
//--- vérification des conditions pour ouvrir une position longue
//--- formation du modèle Bullish Engulfing et ligne de signal<30
  if (CheckCandlestickPattern(CANDLE_PATTERN_BULLISH_ENGULFING) && (StochSignal(1)<30))
     result=80;
//--- vérification des conditions pour fermer la position courte
//--- croisement de la ligne de signal des niveaux surachetés/survendus (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

  1. La formation du modèle "Bearish Engulfing" 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).

  2. 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 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_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 nouvelles barres
  int idx   =StartIndex();
//--- vérification des conditions pour ouvrir une position courte
//--- formation du modèle Bearish Engulfing et ligne de signal>70
  if (CheckCandlestickPattern(CANDLE_PATTERN_BEARISH_ENGULFING) && (StochSignal(1)>70))
     result=80;
//--- vérification des conditions pour fermer la position longue
//--- croisement de la ligne de signal des niveaux surachetés/survendus (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 CBE_BE_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 acbe_be_stoch.mqh (voir les pièces jointes) et de le sauvegarder dans le dossier client_terminal_data\MQL5\Include\Expert\Signal\MySignals. Il en va de même pour 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

Indiquons 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

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

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 "Signaux basés sur Bullish Engulfing/Bearish Engulfing confirmés par Stochastic" :

Fig. 7. Propriétés des signaux de l'Expert Advisor

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

Fig. 8. Propriétés des signaux de l'Expert Advisor

Vous pouvez sélectionner n'importe quelle propriété 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 trade 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_Stoch.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 de seuil de signal pour ouvrir [0...100]
input int            Signal_ThresholdClose  =10     // Valeur de 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 de seuil de signal pour ouvrir [0...100]
input int            Signal_ThresholdClose  =20     // Valeur de 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 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 spécifié les valeurs fixes du seuil :

  • Ouvrir une position : 80 ;
  • Fermer une position : 40.

L'Expert Advisor, généré par MQL5 Wizard, ouvre et ferme les positions en utilisant les "votes" des modules de signaux de trading. Le vote du module principal (en tant que conteneur, il est constitué de 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 en compte ce fait lors de la définition des valeurs seuils. À cause de cela, 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, cela signifie que la fermeture des positions se fera uniquement lorsque les conditions de fermeture seront vraies.


2.4. Résultats des tests historiques

Examinons les tests de l'Expert Advisor sur des données historiques (EURUSD H1, période de test : 2010.01.01-2011.03.04, PeriodK=47, PeriodD=9, PeriodSlow=13, MA_period=5).

Lors de la création de l'Expert Advisor, 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 de l'Expert Advisor, basé sur Bullish/Bearish Engulfing + Stochastic

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


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


Liste
Commentaire 0