Créer un Expert Advisor avec le MQL5 Wizard : Signaux de Trading Basés sur les Modèles Hammer/Hanging Man et CCI

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

Le MQL5 Wizard vous permet de créer des EAs prêts à l'emploi basés sur les classes de la bibliothèque standard fournies avec le terminal client (voir Créer des EAs 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 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, et il est nécessaire de remplacer les méthodes virtuelles LongCondition() et ShortCondition() par vos propres méthodes.

Un livre intéressant est "Stratégies des Meilleurs Traders" (en russe), qui aborde de nombreuses stratégies de trading. Nous nous concentrerons sur les modèles de chandeliers inversés, confirmés par les oscillateurs Stochastique, CCI, MFI et RSI.

La meilleure approche est de créer une classe distincte, dérivée de CExpertSignal pour vérifier la formation de modèles de chandeliers. Pour confirmer les signaux de trading générés par les modèles 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).

Ici, nous allons examiner les signaux basés sur le modèle de chandelier "Hammer/Hanging Man", confirmés par l'indicateur CCI. Le module de signaux de trading est basé sur la classe CCandlePattern, un exemple simple de son utilisation pour la création de signaux de trading avec des modèles de chandeliers.

1. Modèles de chandeliers inversés : "Hammer" et "Hanging Man"

1.1. Hammer

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

La couleur du corps d'un chandelier n'est pas importante, mais un "Hammer" haussier indique un potentiel haussier plus fort. Le corps du modèle "Hammer" est souvent formé 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 de renversement du modèle.


Fig. 1. Modèle de chandelier 'Hammer'

Fig. 1. Modèle de chandelier 'Hammer'

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

//+------------------------------------------------------------------+
//| Vérifie la formation du modèle "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)<Close(2)) && (Open(1)<Open(2))) { // écart du 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 modèle "Hammer".


1.2. Hanging Man

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

La couleur du corps d'un chandelier n'est pas importante, mais une bougie baissière indique un potentiel baissier plus fort. Le corps du modèle "Hanging Man" est souvent formé 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 de renversement du modèle.

Fig. 2. Modèle de chandelier 'Hanging Man'

Fig. 2. Modèle de chandelier 'Hanging Man'

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

//+------------------------------------------------------------------+
//| Vérifie la formation du modèle "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 du 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 modèle "Hanging Man".


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

Les signaux de trading pour ouvrir des positions longues ou courtes doivent être confirmés par l'indicateur CCI. La valeur du CCI doit être supérieure ou inférieure aux niveaux critiques (-50 pour une position longue et 50 pour une position courte).

La fermeture d'une position ouverte dépend des valeurs du CCI. Cela peut se faire dans deux cas :

  1. si la ligne CCI a atteint le niveau critique opposé (80 pour une position longue et -80 pour une position courte)
  2. si le signal inverse n'est pas confirmé (lorsque le CCI atteint les niveaux suivants : -80 pour une position longue et 80 pour une position courte)

Fig. 3. Modèle 'Hammer' confirmé par l'indicateur CCI

Fig. 3. Modèle 'Hammer' confirmé par l'indicateur CCI


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

  2. La position courte doit être fermée si l'indicateur CCI a franchi à la hausse le niveau critique -80 ou franchi à la baisse le niveau critique 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 position courte, résultat=40)   |
//+------------------------------------------------------------------+
int CH_HM_CCI::LongCondition() {
   int result=0;
//--- idx peut être utilisé pour déterminer le mode de fonctionnement de l'EA
//--- 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 bougies de nouvelles
   int idx =StartIndex();
//--- vérification des conditions pour ouvrir une position longue
//--- formation du modèle Hammer et CCI<-50
   if(CheckCandlestickPattern(CANDLE_PATTERN_HAMMER) && (CCI(1)<-50))
     result=80;
//--- vérification des conditions pour fermer une position courte
//--- croisement de la ligne de signal des niveaux de surachat/survente (vers le bas -80, vers le bas -80)
   if(((CCI(1)>-80) && (CCI(2)<-80)) || ((CCI(1)<80) && (CCI(2)>80)))
     result=40;
//--- retour du résultat
   return(result);
}

2.2. Ouvrir une position courte/Fermer une position longue

  1. La formation du modèle "Hanging Man" doit être confirmée par l'indicateur CCI : CCI(1)>50 (la valeur du CCI de la dernière bougie complétée doit être supérieure à 50).

  2. La position longue doit être fermée si l'indicateur CCI a franchi à la baisse les niveaux -80 ou 80.

//+------------------------------------------------------------------+
//| 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 position longue, résultat=40)   |
//+------------------------------------------------------------------+
int CH_HM_CCI::ShortCondition() {
   int result=0;
//--- idx peut être utilisé pour déterminer le mode de fonctionnement de l'EA
//--- 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 bougies de nouvelles
   int idx =StartIndex();
//--- vérification des conditions pour ouvrir une position courte
//--- formation du modèle Hanging Man et CCI>50
   if(CheckCandlestickPattern(CANDLE_PATTERN_HANGING_MAN) && (CCI(1)>50))
     result=80;
//--- vérification des conditions pour fermer une position longue
//--- croisement de la ligne de signal des niveaux de surachat/survente (vers le bas -80, vers le bas 80)
   if(((CCI(1)<80) && (CCI(2)>80)) || ((CCI(1)<-80) && (CCI(2)>-80)))
     result=40;
//--- retour du résultat
   return(result);
}


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

La classe CH_HM_CCI 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 ach_hm_cci.mqh (voir les pièces jointes) et de le sauvegarder dans le dossier terminal_data older\MQL5\Include\Expert\Signal\MySignals. Il en va de même pour le fichier candlepatterns.mqh. Vous pouvez 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

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

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

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

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

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

Ajoutons le module Signaux basés sur Hammer/Hanging Man confirmés par CCI :

Fig. 7. Propriétés de signal de l'Expert Advisor

Fig. 7. Propriétés de signal de l'Expert Advisor

Module de signaux de trading ajouté :

Fig. 8. Propriétés de signal de l'Expert Advisor

Fig. 8. Propriétés de signal 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

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", nous obtiendrons le code de l'Expert Advisor généré, situé dans Expert_AH_HM_CCI.mq5, qui sera sauvegardé 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)

doit être remplacé 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 de 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 (en tant que 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 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 du réglage des valeurs seuils. À cause de ce fait, les ThresholdOpen et ThresholdClose doivent être réglés sur 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 de backtesting historique

Examinons le backtesting de l'Expert Advisor sur des données historiques (EURUSD H1, période de test : 2010.01.01-2011.03.16, PeriodCCI=25, 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 non utilisé).

Fig. 11. Résultats de test de l'Expert Advisor, basé sur Hammer/Hanging Man + CCI

Fig. 11. Résultats de test de l'Expert Advisor, basé sur Hammer/Hanging Man + CCI


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

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


Liste
Commentaire 0