Créer un Expert Advisor avec MQL5 Wizard : Signaux de Trading sur Hammer/Hanging Man + MFI

Mike 2011.03.21 23:10 18 0 0
Pièce jointe

Le MQL5 Wizard est un outil fantastique 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. En quelques clics, vous pouvez tester 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 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.

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

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 les motifs de chandeliers, il suffira d'écrire une classe dérivée de CCandlePattern et d'y ajouter les fonctionnalités nécessaires (par exemple, confirmation par des oscillateurs).

Nous allons examiner les signaux basés sur le motif de chandelier de retournement "Hammer/Hanging Man", confirmé par l'indicateur MFI. Le module de signaux de trading est basé sur la classe CCandlePattern, c'est un exemple simple de son utilisation pour la création de signaux de trading avec des motifs de chandeliers.

1. Motifs de chandeliers de retournement : "Hammer" et "Hanging Man"

1.1. Hammer

Le "Hammer" est un chandelier avec un petit corps et une grande mèche inférieure, formé après un mouvement de prix à la baisse. Le motif "Hammer" indique la fin d'une tendance baissière.

La couleur du corps du chandelier n'est pas importante, mais un hammer haussier indique un potentiel haussier plus élevé. Le corps du motif "Hammer" se forme souvent près du minimum de la bougie précédente. Une mèche inférieure plus longue et une mèche supérieure plus courte augmentent le potentiel du motif de retournement.

Fig. 1. Motif de chandelier 'Hammer'

Fig. 1. Motif de chandelier 'Hammer'

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

//+------------------------------------------------------------------+
//| Vérifie la formation du motif de chandelier "Hammer"               |
//+------------------------------------------------------------------+
bool CCandlePattern::CheckPatternHammer()
  {
//--- Hammer
   if((MidPoint(1)<CloseAvg(2))                                 && // tendance baissière
      (MathMin(Open(1),Close(1))>(High(1)-(High(1)-Low(1))/3.0)) && // corps dans le tiers supérieur
      (Close(1)2)) && (Open(1)2)))                    // écart de corps
      return(true);
//---
   return(false);
  }

La méthode CheckCandlestickPattern(CANDLE_PATTERN_HAMMER) de la classe CCandlePattern est utilisée pour vérifier la formation du motif de chandelier "Hammer".


1.2. Hanging Man

Le "Hanging Man" est un chandelier avec un petit corps et une grande mèche inférieure, formé après un mouvement de prix à la hausse. Le motif "Hanging Man" indique la fin d'une tendance haussière.

La couleur du corps du chandelier n'est pas importante, mais une bougie baissière indique un potentiel baissier plus élevé. Le corps du motif "Hanging Man" se forme souvent près du maximum de la bougie précédente. Une mèche inférieure plus longue et une mèche supérieure plus courte augmentent le potentiel du motif de retournement.

Fig. 2. Motif de chandelier 'Hanging Man'

Fig. 2. Motif de chandelier 'Hanging Man'

La reconnaissance du motif "Hanging Man" est implémentée dans la méthode CheckPatternHangingMan() de la classe CCandlePattern :

//+------------------------------------------------------------------+
//| Vérifie la formation du motif de chandelier "Hanging Man"          |
//+------------------------------------------------------------------+
bool CCandlePattern::CheckPatternHangingMan()
  {
//--- Hanging Man
   if((MidPoint(1)>CloseAvg(2))                                && // tendance haussière
      (MathMin(Open(1),Close(1)>(High(1)-(High(1)-Low(1))/3.0)) && // corps dans le tiers supérieur
      (Close(1)>Close(2)) && (Open(1)>Open(2))))                  // écart de corps
      return(true);
//---
   return(false);
  }

La méthode CheckCandlestickPattern(CANDLE_PATTERN_HANGING_MAN) de la classe CCandlePattern est utilisée pour vérifier la formation du motif de chandelier "Hanging Man".


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

Les signaux de trading pour ouvrir une position longue ou courte doivent être confirmés par l'indicateur MFI. La valeur de l'indicateur MFI doit être inférieure à 40 (pour les positions longues) ou supérieure à 60 (pour les positions courtes).

La fermeture des positions ouvertes dépend des valeurs de l'indicateur MFI. Cela peut se faire dans 2 cas :

  • si le MFI a atteint le niveau critique opposé (70 pour la position longue et 30 pour la position courte)
  • si le signal inverse n'est pas confirmé (lorsque l'indicateur MFI atteint les niveaux suivants : 30 pour la position longue et 70 pour la position courte)

Fig. 3. Motif 'Hammer', confirmé par l'indicateur MFI

Fig. 3. Motif 'Hammer', confirmé par l'indicateur MFI

  • int CH_HM_MFI::LongCondition() - vérifie les conditions pour ouvrir une position longue (retourne 80) et fermer la position courte (retourne 40);
  • int CH_HM_MFI::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 "Hammer" doit être confirmée par l'indicateur MFI : MFi(1)<40 (la valeur de l'indicateur MFI de la dernière bougie complétée doit être inférieure à 40).

  2. La position courte doit être fermée si l'indicateur MFI 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 CH_HM_MFI::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'E.A. vérifie les conditions de trading à chaque tick
//--- idx=1 - dans ce cas, l'E.A. vérifie les conditions de trading uniquement aux bougies de news
  int idx   =StartIndex();
//--- vérification des conditions pour ouvrir une position longue
//--- formation du motif Hammer et MFI<40
  if(CheckCandlestickPattern(CANDLE_PATTERN_HAMMER) && (MFI(1)<40))
     result=80;
//--- vérification des conditions pour fermer la position courte
//--- croisement de la ligne de signal des niveaux de surachat/survente (à la hausse 30, à la hausse 70)
  if(((MFI(1)>30) && (MFI(2)<30)) || ((MFI(1)>70) && (MFI(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 "Hanging Man" doit être confirmée par l'indicateur MFI : MFI(1)>60 (la valeur de l'indicateur MFI de la dernière bougie complétée doit être supérieure à 60).

  2. La position longue doit être fermée si l'indicateur MFI 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 courte, résultat=80)    |
//| 2) Sortie du marché (fermer position longue, résultat=40)        |
//+------------------------------------------------------------------+
int CH_HM_MFI::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'E.A. vérifie les conditions de trading à chaque tick
//--- idx=1 - dans ce cas, l'E.A. vérifie les conditions de trading uniquement aux bougies de news
  int idx   =StartIndex();
//--- vérification des conditions pour ouvrir une position courte
//--- formation du motif Hanging Man et MFI>60
  if(CheckCandlestickPattern(CANDLE_PATTERN_HANGING_MAN) && (MFI(1)>60))
     result=80;
//--- vérification des conditions pour fermer la position longue
//--- croisement de la ligne de signal des niveaux de surachat/survente (à la hausse 70, à la baisse 30)
  if(((MFI(1)>70) && (MFI(2)<70)) || ((MFI(1)<30) && (MFI(2)>30)))
     result=40;
//--- retour du résultat
   return(result);
  }


2.3. Créer un Expert Advisor avec MQL5 Wizard

La classe CH_HM_MFI 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 ah_hm_mfi.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 acandlepatterns.mqh. Vous pourrez l'utiliser dans MQL5 Wizard après le redémarrage du 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 seulement un module de signaux de trading.

Ajout du module de signaux : Signaux basés sur Hammer/Hanging Man confirmés par MFI :

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

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

En ce qui concerne 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 "Finir", nous obtiendrons le code de l'Expert Advisor généré, situé dans Expert_AH_HM_MFI.mq5, qui sera enregistré dans le dossier 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 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 ouvrir et fermer 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 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() renvoient 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 du paramétrage des valeurs seuils. À cause de ce fait, les valeurs ThresholdOpen et ThresholdClose doivent être définies 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, ce qui signifie que la fermeture des positions ne se fera que lorsque les conditions de fermeture 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, PeriodMFI=47, MA_period=5).

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 Hammer/Hanging Man + MFI

Fig. 11. Résultats des tests de l'Expert Advisor basé sur Hammer/Hanging Man + MFI


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

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

Liste
Commentaire 0