Accueil Trading Systématique Publication

Utiliser MQL5 Wizard pour des Signaux de Trading Basés sur les Étoiles du Matin/du Soir + MFI

Le MQL5 Wizard permet de créer des Conseillers Experts prêts à l'emploi, basés sur les classes de la bibliothèque standard, qui sont fournies avec le terminal client (voir Créer des Conseillers Experts Prêts à l’Emploi dans MQL5 Wizard pour plus de détails). Cela permet de 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 détaillé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 de remplacer les méthodes virtuelles LongCondition() et ShortCondition() par vos propres méthodes.

Un livre intitulé "Stratégies des meilleurs traders" (en russe) aborde de nombreuses stratégies de trading, mais nous nous concentrerons ici sur les motifs de chandeliers inversés, confirmés par les oscillateurs 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 motifs de chandeliers. Pour confirmer les signaux de trading générés par ces motifs 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 les motifs de chandeliers "Étoile du Matin/Étoile du Soir" (Étoile du Matin Doji/Étoile du Soir Doji), confirmés par l'indicateur MFI. Le module de signaux de trading est basé sur la classe CCandlePattern, qui constitue un exemple simple d'utilisation pour créer des signaux de trading avec des motifs de chandeliers.

1. Motifs de chandeliers "Étoile du Matin" et "Étoile du Soir"

1.1. Étoile du Matin

Ce motif indique une inversion de la tendance baissière. Il se compose de trois chandeliers (Fig. 1). Après une longue bougie noire, il y a une bougie (la couleur n'est pas importante) avec un petit corps, qui se situe en dehors du corps de la bougie noire. Ce petit corps indique que la force des haussiers et des baissiers est égale et que le marché est prêt à changer de tendance.

Le troisième chandelier du motif est la bougie haussière, son corps ne chevauche pas le corps de la deuxième bougie, et le prix de clôture se situe à l'intérieur du corps de la première bougie (baissière). La bougie résultante du modèle est également représentée à la Figure 1.

Si la deuxième bougie est de type doji, le modèle est nommé "Étoile du Matin Doji".

Fig. 1. Motifs de chandeliers 'Étoile du Matin' et 'Étoile du Matin Doji'

Fig. 1. Motifs de chandeliers 'Étoile du Matin' et 'Étoile du Matin Doji'

L'identification du motif "Étoile du Matin" se fait par les méthodes CheckPatternMorningStar() et CheckPatternMorningDoji() de la classe CCandlePattern :

//+------------------------------------------------------------------+
//| Vérifie la formation du motif "Étoile du Matin"                     |
//+------------------------------------------------------------------+
bool CCandlePattern::CheckPatternMorningStar()
  {
//--- Étoile du Matin
   if((Open(3)-Close(3)>AvgBody(1))             && // bougie baissière, son corps est plus grand que la moyenne des bougies
      (MathAbs(Close(2)-Open(2)<AvgBody(1)*0.5) && // la deuxième bougie a un petit corps (moins de la moitié du corps moyen)
      (Close(2)<Close(3))                       && // la clôture de la deuxième bougie est inférieure à celle de la première
      (Open(2)<Open(3))                         && // l'ouverture de la deuxième bougie est inférieure à l'ouverture de la première
      (Close(1)>MidOpenClose(3)))                  // la clôture de la dernière bougie complétée est supérieure au centre de la première
      return(true);
//---
   return(false);
  }
//+------------------------------------------------------------------+
//| Vérifie la formation du motif "Étoile du Matin Doji"               |
//+------------------------------------------------------------------+
bool CCandlePattern::CheckPatternMorningDoji()
  {
//--- Étoile du Matin Doji
   if((Open(3)-Close(3)>AvgBody(1)) && // bougie baissière avec un corps plus grand que la moyenne
      (AvgBody(2)<AvgBody(1*0.1)   && // la deuxième bougie a un corps très petit (doji)
      (Close(2)>Close(3))           && // la clôture de la deuxième bougie est supérieure à celle de la première
      (Open(2)>Open(3))             && // l'ouverture de la deuxième bougie est supérieure à l'ouverture de la première
      (Open(1)>Close(2))             && // écart à la baisse de la dernière bougie complétée
      (Close(1)>Close(2)))             // la clôture de la dernière bougie complétée est supérieure à celle de la deuxième
      return(true);
//---
   return(false);
  }

Les méthodes CheckCandlestickPattern(CANDLE_PATTERN_MORNING_STAR) et CheckCandlestickPattern(CANDLE_PATTERN_MORNING_DOJI) de la classe CCandlePattern sont utilisées pour vérifier la formation des motifs "Étoile du Matin" et "Étoile du Matin Doji".


1.2. Étoile du Soir

Ce motif indique une inversion de la tendance haussière, il se compose de trois chandeliers (Fig. 2). Après une longue bougie blanche, il y a une bougie (la couleur n'est pas importante) avec un petit corps, qui se trouve en dehors du corps de la bougie blanche. Ce petit corps indique que la force des haussiers et des baissiers est égale et que le marché est prêt à changer de tendance.

Le troisième chandelier du motif est la bougie baissière, son corps ne chevauche pas le corps de la deuxième bougie, et le prix de clôture se situe à l'intérieur du corps de la première bougie (haussière). La bougie résultante du modèle est également représentée à la Figure 2.

Si la deuxième bougie est de type doji, le modèle est nommé "Étoile du Soir Doji".

Fig. 2. Motifs de chandeliers 'Étoile du Soir' et 'Étoile du Soir Doji'

Fig. 2. Motifs de chandeliers 'Étoile du Soir' et 'Étoile du Soir Doji'

Voici les méthodes pour identifier les motifs "Étoile du Soir" et "Étoile du Soir Doji" :

//+------------------------------------------------------------------+
//| Vérifie la formation du motif "Étoile du Soir"                    |
//+------------------------------------------------------------------+
bool CCandlePattern::CheckPatternEveningStar()
  {
//--- Étoile du Soir
   if((Close(3)-Open(3)>AvgBody(1))                 && // bougie haussière avec un corps plus grand que la moyenne
      (MathAbs(Close(2)-Open(2)<AvgBody(1)*0.5) && // la deuxième bougie a un petit corps (moins de la moitié de la moyenne)
      (Close(2)>Close(3))                       && // la clôture de la deuxième bougie est supérieure à celle de la première
      (Open(2)>Open(3))                         && // l'ouverture de la deuxième bougie est supérieure à l'ouverture de la première
      (Close(1)<MidOpenClose(3)))                  // la clôture de la dernière bougie complétée est inférieure au centre de la première
      return(true);
//---
   return(false);
  }
//+------------------------------------------------------------------+
//| Vérifie la formation du motif "Étoile du Soir Doji"        |
//+------------------------------------------------------------------+
bool CCandlePattern::CheckPatternEveningDoji()
  {
//--- Étoile du Soir Doji
   if((Close(3)-Open(3)>AvgBody(1)) && // bougie haussière avec un corps plus grand que la moyenne
      (AvgBody(2)<AvgBody(1)*0.1)   && // la deuxième bougie a un corps très petit (doji)
      (Close(2)>Close(3))           && // la clôture de la deuxième bougie est supérieure à celle de la première
      (Open(2)>Open(3))             && // l'ouverture de la deuxième bougie est supérieure à l'ouverture de la première
      (Open(1)<Close(2))             && // écart à la hausse de la dernière bougie complétée
      (Close(1)<Close(2)))             // la clôture de la dernière bougie complétée est inférieure à celle de la deuxième
      return(true);
//---
   return(false);
  }

Les méthodes CheckCandlestickPattern(CANDLE_PATTERN_EVENING_STAR) et CheckCandlestickPattern(CANDLE_PATTERN_EVENING_DOJI) de la classe CCandlePattern sont utilisées pour vérifier la formation des motifs "Étoile du Soir" et "Étoile du Soir Doji".


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 clôture d'une position ouverte dépend des valeurs de l'indicateur MFI. Cela peut se faire dans deux cas :

  1. si le MFI 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 l'indicateur MFI atteint les niveaux suivants : 30 pour une position longue et 70 pour une position courte)

Figure 3. Motif 'Étoile du Matin', confirmé par l'indicateur MFI

Figure 3. Motif 'Étoile du Matin', confirmé par l'indicateur MFI


  • int CMS_ES_MFI::LongCondition() - vérifie les conditions pour ouvrir une position longue (retourne 80) et fermer une position courte (retourne 40);
  • int CMS_ES_MFI::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 "Étoile du Matin" 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 les niveaux critiques à la hausse (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 CMS_ES_MFI::LongCondition()
  {
   int result=0;
//--- idx peut être utilisé pour déterminer le mode de fonctionnement du Conseiller Expert
//--- idx=0 - dans ce cas, le CA vérifie les conditions de trading à chaque tick
//--- idx=1 - dans ce cas, le CA 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 Étoile du Matin et MFI<40
  if(CheckCandlestickPattern(CANDLE_PATTERN_MORNING_STAR) && (MFI(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(((MFI(1)>30) && (MFI(2)<30)) || ((MFI(1)>70) && (MFI(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 "Étoile du Soir" 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 les niveaux critiques à la hausse (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 CMS_ES_MFI::ShortCondition()
  {
   int result=0;
//--- idx peut être utilisé pour déterminer le mode de fonctionnement du Conseiller Expert
//--- idx=0 - dans ce cas, le CA vérifie les conditions de trading à chaque tick
//--- idx=1 - dans ce cas, le CA 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 Étoile du Soir et MFI>60
  if(CheckCandlestickPattern(CANDLE_PATTERN_EVENING_STAR) && (MFI(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 hausse 70, à la baisse 30)
   if(((MFI(1)>70) && (MFI(2)<70)) || ((MFI(1)<30) && (MFI(2)>30)))
     result=40;
//--- retourner le résultat
   return(result);
  }


2.3. Créer un Conseiller Expert avec MQL5 Wizard

La classe CMS_ES_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 ams_es_mfi.mqh (voir pièces jointes) et de l'enregistrer dans le dossier client_terminal_data_folder\MQL5\Include\Expert\Signal\MySignals. Il en va de même pour le fichier acandlepatterns.mqh. Vous pourrez les utiliser dans MQL5 Wizard après avoir redémarré le MetaEditor.

Pour créer un Conseiller Expert, lancez le MQL5 Wizard :

Fig. 4. Création d'un Conseiller Expert avec MQL5 Wizard

Fig. 4. Création d'un Conseiller Expert avec MQL5 Wizard

Spécifions le nom du Conseiller Expert :

Fig. 5. Propriétés générales du Conseiller Expert

Fig. 5. Propriétés générales du Conseiller Expert

Ensuite, nous devons sélectionner les modules de signaux de trading utilisés.

Fig. 6. Propriétés des signaux du Conseiller Expert

Fig. 6. Propriétés des signaux du Conseiller Expert

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

Ajout du module de signaux basé sur les "Signaux basés sur l'Étoile du Matin/du Soir confirmés par MFI" :

Fig. 7. Propriétés des signaux du Conseiller Expert

Fig. 7. Propriétés des signaux du Conseiller Expert

Module de signaux de trading ajouté :

Fig. 8. Propriétés des signaux du Conseiller Expert

Fig. 8. Propriétés des signaux du Conseiller Expert

Vous pouvez sélectionner toutes les propriétés de trailing, mais nous allons utiliser "Trailing Stop non utilisé" :

Fig. 9. Propriétés de money management du Conseiller Expert

Fig. 9. Propriétés de money management du Conseiller Expert

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 money management du Conseiller Expert

Fig. 10. Propriétés de money management du Conseiller Expert

En appuyant sur le bouton "Terminer", nous obtiendrons le code du Conseiller Expert généré, situé dans Expert_AMS_ES_MFI.mq5, qui sera enregistré dans terminal_data_folder\MQL5\Experts\.

Les paramètres d'entrée par défaut du Conseiller Expert 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)

doivent être remplacés 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é des valeurs fixes de seuil :

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

Le Conseiller Expert, 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 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'averaging des votes. Dans notre cas, nous avons : module principal + 1 module de signaux de trading, donc nous devons tenir compte de ce fait lors de la définition des valeurs seuils. À cause de cela, les 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 définies à 0, ce qui signifie que la fermeture des positions ne se fera que lorsque les conditions de fermeture sont vérifiées.


2.4. Résultats des tests de backtesting

Considérons le backtesting du Conseiller Expert sur des données historiques (EURUSD H1, période de test : 2010.01.01-2011.03.16, PeriodMFI=49, MA_period=3).

Dans la création du Conseiller Expert, 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 du Conseiller Expert, basé sur les Étoiles du Matin/du Soir + MFI

Fig. 11. Résultats des tests du Conseiller Expert, basé sur les Étoiles du Matin/du Soir + MFI


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

Le code du Conseiller Expert, créé par MQL5 Wizard, est joint dans expert_ams_es_mfi.mq5.


Articles connexes

Commentaire (0)