Utiliser MQL5 Wizard pour des Signaux de Trading avec Dark Cloud Cover/Piercing Line et RSI

Mike 2011.02.25 20:08 25 0 0
Pièce jointe

Le MQL5 Wizard vous permet de créer des systèmes de trading prêts à l'emploi basés sur les classes de la bibliothèque standard qui sont livrées avec le terminal client (pour plus de détails, consultez Créer des systèmes de trading prêts à l'emploi dans MQL5 Wizard). Cela vous 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 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 d'écraser les méthodes virtuelles LongCondition() et ShortCondition() avec vos propres méthodes.

Un livre intitulé "Stratégies des meilleurs traders" (en russe) aborde de nombreuses stratégies de trading. Nous allons nous concentrer sur les motifs de bougies de retournement, confirmés par les oscillateurs Stochastique, CCI, MFI et RSI.

Il est préférable de créer une classe séparée, dérivée de CExpertSignal, pour vérifier la formation de motifs de bougies. 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 retournement "Dark Cloud Cover/Piercing Line", confirmé par l'indicateur RSI. Le module de signaux de trading est basé sur la classe CCandlePattern, qui sert d'exemple simple pour créer des signaux de trading avec des motifs de bougies.


1. Motifs de bougies de retournement : "Dark Cloud Cover" et "Piercing Line"

1.1. Dark Cloud Cover

C'est un motif de retournement baissier qui se produit à la fin d'une tendance haussière. Une longue bougie blanche est formée le premier jour et un gap à la hausse est créé le deuxième jour. Cependant, le deuxième jour se clôture en dessous du point médian de la première journée.

Fig. 1. Motif de bougie 'Dark Cloud Cover'

Figure 1. Motif de bougie 'Dark Cloud Cover'

La reconnaissance du motif "Dark Cloud Cover" est implémentée dans la méthode CheckPatternDarkCloudCover() de la classe CCandlePattern :

//+------------------------------------------------------------------+
//| Vérifie la formation du motif de bougie "Dark Cloud Cover"        |
//+------------------------------------------------------------------+
bool CCandlePattern::CheckPatternDarkCloudCover()
  {
//--- Dark Cloud Cover 
   if((Close(2)-Open(2)>AvgBody(1)) && // (long white)
      (Close(1)<Close(2)) && // 
      (Close(1)>Open(2) && // (close within previous body)
      (MidOpenClose(2)>CloseAvg(1)) && // (uptrend)
      (Open(1)>High(2)))                // (open at new high)
      return(true);
//---
   return(false);
  }

La méthode CheckCandlestickPattern(CANDLE_PATTERN_DARK_CLOUD_COVER) de la classe CCandlePattern est utilisée pour vérifier la formation du motif "Dark Cloud Cover".


1.2. Piercing Line

Le gap à la baisse le deuxième jour perpétue la tendance baissière. Cependant, la clôture du deuxième jour est au-dessus du point médian du corps du premier jour. Cela suggère aux ours qu'un creux pourrait se former. Cette action de prix n'est pas aussi discernable sur les graphiques en barres que sur les graphiques en chandeliers. Plus la clôture du deuxième jour pénètre dans le corps du premier jour, plus le signal de retournement a des chances de réussir.

Fig. 2. Motif de bougie 'Piercing Line'

Fig. 2. Motif de bougie 'Piercing Line'

La reconnaissance du motif "Piercing Line" est implémentée dans la méthode CheckPatternPiercingLine() de la classe CCandlePattern :

//+------------------------------------------------------------------+
//| Vérifie la formation du motif de bougie "Piercing Line"          |
//+------------------------------------------------------------------+
bool CCandlePattern::CheckPatternPiercingLine()
  {
//--- Piercing Line
   if((Close(1)-Open(1)>AvgBody(1)) && // (long white)
      (Open(2)-Close(2)>AvgBody(1)) && // (long black)
      (Close(1)>Close(2))             && //  
      (Close(1)<Open(2) && // (close inside previous body) 
      (MidOpenClose(2)<CloseAvg(2)) && // (downtrend)
      (Open(1)<Low(2)))                 // (open lower than previous Low) 
      return(true);
//---
   return(false);
  }

La méthode CheckCandlestickPattern(CANDLE_PATTERN_PIERCING_LINE) de la classe CCandlePattern est utilisée pour vérifier la formation du motif "Piercing Line".


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 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 de retournement 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 'Dark Cloud Cover', confirmé par l'indicateur RSI

Fig. 3. Motif 'Dark Cloud Cover', confirmé par l'indicateur RSI


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

  1. La formation du motif "Piercing Line" 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 position longue, résultat=80)   |
//| 2) Sortie du marché (fermer position courte, résultat=40)        |
//+------------------------------------------------------------------+
int CDC_PL_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 motif Piercing Line et RSI<30
  if(CheckCandlestickPattern(CANDLE_PATTERN_PIERCING_LINE) && (RSI(1)<40))
     result=80;
//--- vérification des conditions pour fermer position courte
//--- croisement de 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;
//--- retourner le résultat
   return(result);
  }

2.2. Ouvrir une position courte/Fermer une position longue

  1. La formation du motif "Dark Cloud Cover" 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 position courte, résultat=80)    |
//| 2) Sortie du marché (fermer position longue, résultat=40)        |
//+------------------------------------------------------------------+
int CDC_PL_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 motif Dark Cloud Cover et RSI>60
  if(CheckCandlestickPattern(CANDLE_PATTERN_DARK_CLOUD_COVER) && (RSI(1)>60))
     result=80;
//--- vérification des conditions pour fermer position longue
//--- croisement de 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;
//--- retourner le résultat
   return(result);
  }


2.3. Création d'un Expert Advisor avec MQL5 Wizard

La classe CDC_PL_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 adc_pl_rsi.mqh (voir pièces jointes) et de l'enregistrer dans le dossier terminal_client_data\MQL5\Include\Expert\Signal\MySignals. Il faut faire de même avec le fichier acandlepatterns.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 des signaux de l'Expert Advisor

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

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

Ajout du module de signaux : Signaux basés sur Dark Cloud Cover/Piercing Line confirmés par RSI :

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 gestion de l'argent de l'Expert Advisor

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

En ce qui concerne les propriétés de gestion de l'argent, nous allons utiliser "Trading avec volume de trading 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_ADC_PL_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 de seuil du signal pour ouvrir [0...100]
input int            Signal_ThresholdClose  =10;     // Valeur de seuil du signal pour fermer [0...100]
input double         Signal_PriceLevel      =0.0    // Niveau de prix pour exécuter un contrat
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 du signal pour ouvrir [0...100]
input int            Signal_ThresholdClose  =20;     // Valeur de seuil du signal pour fermer [0...100]
input double         Signal_PriceLevel      =0.0    // Niveau de prix pour exécuter un contrat
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 de 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 des seuils :

  • Ouvrir position : 80;
  • Fermer 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 (comme conteneur, il consiste en 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 des seuils. En raison de ce fait, le ThresholdOpen et le 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 ne se fera que lorsque les conditions de clôture seront vraies.


2.4. Résultats des tests de rétroaction

Examinons le test de l'Expert Advisor sur des données historiques (EURUSD H1, période de test : 2010.01.01-2011.02.23, PeriodRSI=20, MA_period=14).

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 non utilisé).

Fig. 11. Résultats de test de l'Expert Advisor, basé sur Dark Cloud Cover/Piercing Line + RSI

Fig. 11. Résultats de test de l'Expert Advisor, basé sur Dark Cloud Cover/Piercing Line + RSI


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

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


Liste
Commentaire 0