Accueil Trading Systématique Publication

Développez un Expert Advisor avec MQL5 : Signaux de Trading 3 Corbeaux Noirs / 3 Soldats Blancs + RSI

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

Le MQL5 Wizard est un outil puissant qui permet de créer des Systèmes de Trading prêts à l'emploi. Grâce aux classes de la bibliothèque standard fournies avec le terminal client, vous pouvez rapidement tester vos idées de trading. L'astuce ? Créez votre propre classe de signaux de trading. Pour plus de détails sur la structure de cette classe, consultez l'article MQL5 Wizard : Comment Créer un Module de Signaux de Trading.

L'idée générale consiste à dériver la classe des signaux de trading de CExpertSignal. Ensuite, vous devez remplacer les méthodes virtuelles LongCondition() et ShortCondition() par vos propres méthodes.

Dans le livre "Stratégies des Meilleurs Traders" (en russe), de nombreuses stratégies de trading sont abordées. Ici, nous allons nous concentrer sur les motifs de chandeliers inversés, confirmés par les oscillateurs tels que Stochastique, CCI, MFI et RSI.

La meilleure approche consiste à créer une classe distincte 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 ces motifs, 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 motif de chandeliers inversés "3 Corbeaux Noirs / 3 Soldats Blancs", confirmés par l'indicateur RSI. Le module de signaux de trading est basé sur la classe CCandlePattern, qui fournit un exemple simple de son utilisation pour créer des signaux de trading avec des motifs de chandeliers.


1. Motifs de Chandeliers Inversés : "3 Corbeaux Noirs" et "3 Soldats Blancs"

1.1. 3 Corbeaux Noirs

Ce motif baissier prédit la fin d'une tendance haussière. Il se compose de trois chandeliers consécutifs à corps longs, chacun clôturant en dessous du précédent, avec une ouverture de chaque session à l'intérieur du corps de la bougie précédente.

Fig. 1. Motif de chandeliers '3 Corbeaux Noirs'

Fig. 1. Motif de chandeliers '3 Corbeaux Noirs'

La reconnaissance du motif "3 Corbeaux Noirs" est mise en œuvre dans la méthode CheckPatternThreeBlackCrows de la classe CCandlePattern :

//+------------------------------------------------------------------+
//| Vérifie la formation du motif de chandeliers "3 Corbeaux Noirs"  |
//+------------------------------------------------------------------+
bool CCandlePattern::CheckPatternThreeBlackCrows()
  {
//--- 3 Corbeaux Noirs 
   if((Open(3)-Close(3)>AvgBody(1)) && // (long noir)
      (Open(2)-Close(2)>AvgBody(1)) &&
      (Open(1)-Close(1)>AvgBody(1)) &&
      (MidPoint(2)<MidPoint(3))     && // (midpoints inférieurs)
      (MidPoint(1)<MidPoint(2)))       
      return(true);
//---
   return(false);
  }

La méthode CheckCandlestickPattern(CANDLE_PATTERN_THREE_BLACK_CROWS) de la classe CCandlePattern est utilisée pour vérifier la formation du motif "3 Corbeaux Noirs".


1.2. 3 Soldats Blancs

Ce motif haussier prédit la fin d'une tendance baissière. Il se compose de trois chandeliers consécutifs à corps longs, chacun clôturant au-dessus du précédent, avec une ouverture de chaque session à l'intérieur du corps de la bougie précédente.

Le motif est valide tant que la bougie du deuxième jour s'ouvre dans la moitié supérieure de la plage du premier jour. À la fin du deuxième jour, elle doit se clôturer près de son sommet, laissant une ombre supérieure très petite ou inexistante. Le même motif se répète ensuite le troisième jour.

Fig. 2. Motif de chandeliers '3 Soldats Blancs'

Fig. 2. Motif de chandeliers '3 Soldats Blancs'

Voici la méthode pour reconnaître le motif "3 Soldats Blancs" :

//+------------------------------------------------------------------+
//| Vérifie la formation du motif de chandeliers "3 Soldats Blancs"  |
//+------------------------------------------------------------------+
bool CCandlePattern::CheckPatternThreeWhiteSoldiers()
  {
   //--- 3 Soldats Blancs
   if((Close(3)-Open(3)>AvgBody(1)) && // long blanc
      (Close(2)-Open(2)>AvgBody(1)) &&
      (Close(1)-Open(1)>AvgBody(1)) &&
      (MidPoint(2)>MidPoint(3))     && // midpoints supérieurs
      (MidPoint(1)>MidPoint(2)))
      return(true);
//---
   return(false);
  }

La méthode CheckCandlestickPattern(CANDLE_PATTERN_THREE_WHITE_SOLDIERS) de la classe CCandlePattern est utilisée pour vérifier la formation du motif "3 Soldats Blancs".


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/supérieure aux niveaux critiques (40 pour une position longue et 60 pour une position courte).

La clôture d'une position ouverte dépend des valeurs de RSI. Cela peut se faire dans deux cas :

  1. si le RSI a atteint le niveau critique opposé (70 pour une position longue et 30 pour une position courte)
  2. 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. Motif '3 Corbeaux Noirs', confirmé par l'indicateur Stochastique

Fig. 3. Motif '3 Corbeaux Noirs', confirmé par l'indicateur Stochastique


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

  1. La formation du motif "3 Soldats Blancs" doit être confirmée par l'indicateur RSI : RSI(1)<40 (la valeur du RSI de la dernière bougie clôturée doit être inférieure à 40).

  2. 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 une position longue, résultat=80)                  |
//| 2) Sortie du marché (fermer une position courte, résultat=40)                 |
//+------------------------------------------------------------------+
int CBC_WS_RSI::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 des nouvelles bougies
  int idx   =StartIndex();
//--- vérification des conditions pour ouvrir une position longue
//--- formation du motif 3 Soldats Blancs et RSI<30
  if(CheckCandlestickPattern(CANDLE_PATTERN_THREE_WHITE_SOLDIERS) && (RSI(1)<40))
     result=80;
//--- vérification des conditions pour fermer une 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

  1. La formation du motif "3 Corbeaux Noirs" doit être confirmée par l'indicateur RSI : RSI(1)>60 (la valeur de l'indicateur RSI de la dernière bougie clôturée doit être supérieure à 60).

  2. 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 une position courte, résultat=80)                 |
//| 2) Sortie du marché (fermer une position longue, résultat=40)                  |
//+------------------------------------------------------------------+
int CBC_WS_RSI::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 des nouvelles bougies
  int idx   =StartIndex();
//--- vérification des conditions pour ouvrir une position courte
//--- formation du motif 3 Corbeaux Noirs et RSI>60
  if(CheckCandlestickPattern(CANDLE_PATTERN_THREE_BLACK_CROWS) && (RSI(1)>60))
     result=80;
//--- vérification des conditions pour fermer une 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éation d'un Expert Advisor avec MQL5 Wizard

La classe CML_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 acml_rsi.mqh (voir 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 le redémarrage de 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

Ensuite, nous devons choisir 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 utilisons seulement un module de signaux de trading.

Ajout du module de signaux basé sur les 3 Corbeaux Noirs / 3 Soldats Blancs :

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 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

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 un volume 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", vous obtiendrez le code de l'Expert Advisor généré, situé dans Expert_ABC_WS_RSI.mq5, qui sera enregistré 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 de signal pour ouvrir [0...100]
input int            Signal_ThresholdClose  =10;     // Valeur 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)

doivent être remplacés par :

//--- entrées pour le signal principal
input int            Signal_ThresholdOpen   =40;     // Valeur seuil de signal pour ouvrir [0...100]
input int            Signal_ThresholdClose  =20;     // Valeur 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 seuils pour ouvrir et fermer 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 des seuils :

  • Ouvrir une position : 80;
  • Fermer une 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 (qui est un conteneur, car il se compose 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 ce fait en compte lors de la définition des valeurs seuils. En raison de ce fait, le ThresholdOpen et ThresholdClose doivent être définis respectivement à 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 se fera uniquement lorsque les conditions de fermeture seront vraies.


2.4. Résultats des tests en arrière-plan

Examinons les tests en arrière-plan de l'Expert Advisor sur des données historiques (EURUSD H1, période de test : 2010.01.01-2011.02.02, PeriodRSI=37, MA_period=51).

Pour la création de l'Expert Advisor, nous avons utilisé un volume fixe (Trading Lot Fixe, 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 3 Corbeaux Noirs/3 Soldats Blancs + RSI

Fig. 11. Résultats des tests de l'Expert Advisor, basé sur 3 Corbeaux Noirs/3 Soldats Blancs + RSI


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

Le code de l'Expert Advisor, créé par MQL5 Wizard, est joint dans expert_abc_ws_rsi.mq5.


Articles connexes

Commentaire (0)