Accueil Trading Systématique Publication

MQL5 Wizard : Créez des Signaux de Trading avec Harami et Stochastique

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

Le MQL5 Wizard vous permet de créer des conseillers experts prêts à l'emploi basés sur les classes de la bibliothèque standard fournies avec le terminal client (voir Créer des conseillers experts dans MQL5 Wizard pour plus de détails). Cela vous permet d'évaluer 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 des 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.

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

Il est préférable 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 suffira d'écrire la classe dérivée de CCandlePattern et d'y ajouter les fonctionnalités nécessaires (par exemple, confirmation par des oscillateurs).

Ici, nous allons examiner les signaux basés sur le modèle de chandelier de retournement "Bullish Harami/Bearish Harami", confirmé 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 chandeliers de retournement "Bullish Harami" et "Bearish Harami"

1.1. Bullish Harami

Le modèle de retournement Bullish Harami se forme dans une tendance baissière lorsqu'une grande chandelle est suivie d'une plus petite dont le corps se situe dans la plage verticale du corps plus grand. Ce modèle indique que la tendance baissière pourrait s'inverser, signalant qu'il est temps d'ouvrir une position longue. La deuxième chandelle ouvre avec un gap à la hausse.

Plus la deuxième chandelle (blanche) est petite, plus l'inversion est probable.

Fig. 1. Modèle de chandelier

Fig. 1. Modèle de chandelier "Bullish Harami"

La reconnaissance du modèle "Bullish Harami" est réalisée dans la méthode CheckPatternBullishHarami() de la classe CCandlePattern :

//+------------------------------------------------------------------+
//| Vérifie la formation du modèle "Bullish Harami"         |
//+------------------------------------------------------------------+
bool CCandlePattern::CheckPatternBullishHarami()
  {
//--- Bullish Harami
   if((Close(1)>Open(1))              && // la dernière barre complétée est haussière (jour blanc)
     ((Open(2)-Close(2)>AvgBody(1))  && // la chandelle précédente est baissière, son corps est plus grand que la moyenne (long noir)
     ((Close(1)<Open(2))              && // le prix de clôture de la chandelle haussière est inférieur au prix d'ouverture de la chandelle baissière
      (Open(1)>Close(2)))             && // le prix d'ouverture de la chandelle haussière est supérieur au prix de clôture de la chandelle baissière
      (MidPoint(2)<CloseAvg(2)))         // tendance baissière
      return(true);
//---
   return(false);
  }

La méthode CheckCandlestickPattern(CANDLE_PATTERN_BULLISH_HARAMI) de la classe CCandlePattern est utilisée pour vérifier la formation du modèle de chandelier "Bullish Harami".


1.2. Bearish Harami

Le modèle de retournement Bearish Harami se forme dans une tendance haussière lorsqu'une grande chandelle est suivie d'une plus petite dont le corps se situe dans la plage verticale du corps plus grand. Ce modèle indique que la tendance haussière pourrait s'inverser, signalant qu'il est temps d'ouvrir une position courte. La deuxième chandelle ouvre avec un gap à la baisse.

Plus la deuxième chandelle (noire) est petite, plus l'inversion est probable.

Fig. 2. Modèle de chandelier

Fig. 2. Modèle de chandelier "Bearish Harami"

La reconnaissance du modèle "Bearish Harami" est réalisée dans la méthode CheckPatternBearishHarami() de la classe CCandlePattern :

//+------------------------------------------------------------------+
//| Vérifie la formation du modèle "Bearish Harami"         |
//+------------------------------------------------------------------+
bool CCandlePattern::CheckPatternBearishHarami()
  {
//--- Bearish Harami
   if((Close(1)<Open(1))              && // la dernière barre complétée est baissière (jour noir)
     ((Close(2)-Open(2)>AvgBody(1))  && // la chandelle précédente est haussière, son corps est plus grand que la moyenne (long blanc)
     ((Close(1)>Open(2))              && // le prix de clôture de la chandelle baissière est supérieur au prix d'ouverture de la chandelle haussière
     (Open(1)<Close(2)))             && // le prix d'ouverture de la chandelle baissière est inférieur au prix de clôture de la chandelle haussière
      (MidPoint(2)>CloseAvg(2)))         // tendance haussière
      return(true);
//---
   return(false);
  }

La méthode CheckCandlestickPattern(CANDLE_PATTERN_BEARISH_HARAMI) de la classe CCandlePattern est utilisée pour vérifier la formation du modèle de chandelier "Bearish Harami".


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 aux niveaux critiques correspondants (30 ou 70).

La fermeture de la position ouverte dépend des valeurs de l'indicateur %D. Cela peut se faire dans 2 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 de chandelier

Fig. 3. Modèle de chandelier "Bearish Harami", confirmé par l'indicateur Stochastique

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

  • int CBH_BH_Stoch::LongCondition() - vérifie les conditions pour ouvrir une position longue (retourne 80) et fermer la position courte (retourne 40);
  • int CBH_BH_Stoch::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 modèle "Bullish Harami" 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 CBH_BH_Stoch::LongCondition()
  {
   int result=0;
//--- idx peut être utilisé pour déterminer le mode de fonctionnement du conseiller expert
//--- idx=0 - dans ce cas, le conseiller expert vérifie les conditions de trading à chaque tick
//--- idx=1 - dans ce cas, le conseiller expert vérifie les conditions de trading uniquement lors des nouvelles barres
  int idx   =StartIndex();
//--- vérification des conditions pour ouvrir une position longue
//--- formation du modèle Bullish Harami et ligne de signal<30
  if (CheckCandlestickPattern(CANDLE_PATTERN_BULLISH_HARAMI) && (StochSignal(1)<30))
     result=80;
//--- vérification des conditions pour fermer la position courte
//--- croisement de la ligne de signal des niveaux de surachat/survente (vers le bas 20, vers le haut 80)
   if((((StochSignal(1)>20) && (StochSignal(2)<20)) ||
       ((StochSignal(1)>80) && (StochSignal(2)<80))))
     result=40;
//--- retourner le résultat
   return(result);
  }

2.2. Ouvrir une position courte/Fermer une position longue

  1. La formation du modèle "Bearish Harami" 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 vers le bas 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 CBH_BH_Stoch::ShortCondition()
  {
   int result=0;
//--- idx peut être utilisé pour déterminer le mode de fonctionnement du conseiller expert
//--- idx=0 - dans ce cas, le conseiller expert vérifie les conditions de trading à chaque tick
//--- idx=1 - dans ce cas, le conseiller expert vérifie les conditions de trading uniquement lors des nouvelles barres
  int idx   =StartIndex();
//--- vérification des conditions pour ouvrir une position courte
//--- formation du modèle Bearish Harami et ligne de signal>70
  if (CheckCandlestickPattern(CANDLE_PATTERN_BEARISH_HARAMI) && (StochSignal(1)>70))
     result=80;
//--- vérification des conditions pour fermer la position longue
//--- croisement de la ligne de signal des niveaux de surachat/survente (vers le bas 80, vers le haut 20)
   if((((StochSignal(1)<80) && (StochSignal(2)>80)) ||
       ((StochSignal(1)<20) && (StochSignal(2)>20))))
     result=40;
//--- retourner le résultat
   return(result);
  }

2.3. Création d'un conseiller expert avec MQL5 Wizard

La classe CBH_BH_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 acbh_bh_stoch.mqh (voir les pièces jointes) et de le sauvegarder dans le dossier client_terminal_data\MQL5\Include\Expert\Signal\MySignals. Vous devez faire la même chose avec le fichier candlepatterns.mqh. Vous pouvez l'utiliser dans MQL5 Wizard après le redémarrage de 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

Indiquons 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

Après cela, nous devons sélectionner les modules de signaux de trading utilisés.

Fig. 6. Propriétés du signal du conseiller expert

Fig. 6. Propriétés du signal du conseiller expert

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

Ajoutons le module "Signaux basés sur Bullish Harami/Bearish Harami confirmés par Stochastic" :

Fig. 7. Propriétés du signal du conseiller expert

Fig. 7. Propriétés du signal du conseiller expert

Module de signaux de trading ajouté :

Fig. 8. Propriétés du signal du conseiller expert

Fig. 8. Propriétés du signal du conseiller expert

Vous pouvez sélectionner n'importe quelle propriété de trailing, mais nous utiliserons "Trailing Stop non utilisé" :

Fig. 9. Propriétés de trailing du conseiller expert

Fig. 9. Propriétés de trailing du conseiller expert

Concernant les propriétés de gestion de l'argent, nous utiliserons "Trading avec volume de trade fixe" :

Fig. 10. Propriétés de gestion de l'argent du conseiller expert

Fig. 10. Propriétés de gestion de l'argent du conseiller expert

En appuyant sur le bouton "Terminer", nous obtiendrons le code du conseiller expert généré, situé dans Expert_ABH_BH_Stoch.mq5, qui sera sauvegardé 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 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 une transaction
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 une transaction
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 l'ouverture et la fermeture 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.

Le conseiller expert, 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 se compose de 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 la moyenne 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 de seuil. À cause de cela, les valeurs ThresholdOpen et ThresholdClose doivent être définies 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, cela signifie que la fermeture des positions ne se fera que lorsque les conditions de fermeture seront vraies.


2.4. Résultats des tests sur l'historique

Examinons les tests du conseiller expert 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 du conseiller expert, nous avons utilisé un volume fixe (Trading Fixed Lot, 0.1), l'algorithme de Trailing Stop n'est pas utilisé (Trailing non utilisé).

Fig. 11. Résultats des tests du conseiller expert, basé sur

Fig. 11. Résultats des tests du conseiller expert, basé sur "Bullish/Bearish Harami + Stochastic"


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 du conseiller expert, créé par MQL5 Wizard, est joint dans expert_abh_bh_stoch.mq5.

Articles connexes

Commentaire (0)