Accueil Trading Systématique Publication

Générez des Signaux de Trading avec l'Indicateur Alligator sur MetaTrader 5

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

MQL5 Wizard facilite la création automatique d'Experts Advisors (EA). Si vous êtes novice, consultez notre article sur MQL5 Wizard : Créer des Experts Advisors sans programmation.

Aujourd'hui, parlons des signaux de trading basés sur l'indicateur technique Alligator, présenté par Bill Williams dans son livre Trading Chaos. La stratégie que nous allons explorer est intitulée "Signaux basés sur l'Alligator", que vous pouvez configurer automatiquement dans MQL5 Wizard.

Ce système repose sur trois moyennes mobiles (lignes des Lèvres, des Dents et de la Mâchoire) et utilise des oscillateurs pour calculer les différences entre elles. Les signaux de trading sont générés après le croisement des lignes de l'Alligator, en fonction de la tendance, déterminée par l'ordre de ces lignes. En tendance haussière, la ligne des Lèvres (la plus rapide) est la plus haute, suivie par celle des Dents, et enfin celle de la Mâchoire. L'inverse s'applique en tendance baissière.

Voici les signaux de trading :

  • Ouvrir une position longue : croisement des lignes de l'Alligator et augmentation de la distance entre elles en cas de tendance haussière ;
  • Fermer une position longue : croisement à la hausse de la ligne des Lèvres avec la ligne de la Mâchoire ;
  • Ouvrir une position courte : croisement des lignes de l'Alligator et augmentation de la distance entre elles en cas de tendance baissière ;
  • Fermer une position courte : croisement à la baisse de la ligne des Lèvres avec la ligne de la Mâchoire ;

Cette stratégie est implémentée dans la classe CSignalAlligator.

Figure 1. Signaux de trading basés sur l'indicateur technique Alligator

Figure 1. Signaux de trading basés sur l'indicateur technique Alligator


Signaux de Trading

La stratégie de trading est mise en œuvre dans CSignalAlligator, qui dispose de méthodes protégées pour simplifier l'accès aux valeurs des indicateurs :

double   Jaw(int ind)              // retourne la valeur de la ligne de Mâchoire
double  Teeth(int ind)           // retourne la valeur de la ligne de Dents
double  Lips(int ind)            // retourne la valeur de la ligne de Lèvres
double  LipsTeethDiff(int ind)   // retourne la différence entre les lignes des Lèvres et des Dents
double  TeethJawDiff(int ind)    // retourne la différence entre les lignes des Dents et de la Mâchoire
double  LipsJawDiff(int ind)     // retourne la différence entre les lignes des Lèvres et de la Mâchoire
bool     CheckCross();             // utilisé pour vérifier le croisement des lignes de l'Alligator


1. Ouvrir une position longue

Les vérifications des conditions de trading présentent des particularités dues au décalage des lignes des Lèvres, des Dents et de la Mâchoire.

Conditions pour ouvrir une position longue :

  • La méthode CheckCross est utilisée pour déterminer le croisement et l'augmentation de la différence entre les lignes ;
  • LipsTeethDiff(-2)>=LipsTeethDiff(-1) et LipsTeethDiff(-1)>=LipsTeethDiff(0) ; vérification de l'augmentation de la différence entre les lignes des Lèvres et des Dents ;
  • LipsTeethDiff(0)>=0.0 ; la ligne des Lèvres est plus haute que la ligne des Dents ;
  • TeethJawDiff(-2) >=TeethJawDiff(-1) et TeethJawDiff(-1) >=TeethJawDiff(0) ; vérification de l'augmentation de la différence entre les lignes des Dents et de la Mâchoire ;
  • TeethJawDiff(0) >=0.0 ; la ligne des Dents est plus haute que la ligne de la Mâchoire.
//+------------------------------------------------------------------+
//| Vérifie les conditions pour ouvrir une position longue (achat) |
//+------------------------------------------------------------------+
bool CSignalAlligator::CheckOpenLong(double& price,double& sl,double& tp,datetime& expiration)
  {
   if(CheckCross()) return(false);
//---
   price=0.0;
   sl   =0.0;
   tp   =0.0;
//---
   if(LipsTeethDiff(-2)>=LipsTeethDiff(-1) && LipsTeethDiff(-1)>=LipsTeethDiff(0) && LipsTeethDiff(0)>=0.0 &&
      TeethJawDiff(-2) >=TeethJawDiff(-1)  && TeethJawDiff(-1) >=TeethJawDiff(0)  && TeethJawDiff(0) >=0.0)
      m_crossed=true;
//---
   return(m_crossed);
  }


2. Fermer une position longue

Conditions pour fermer une position longue (notez le décalage des lignes) :

  • LipsTeethDiff(-1)<0 ; la ligne des Lèvres de la barre suivante (à cause du décalage) est inférieure à celle des Dents ;
  • LipsTeethDiff(0)>=0 ; la ligne des Lèvres de la barre actuelle est supérieure ou égale à celle des Dents ;
  • LipsTeethDiff(1)>0 ; la ligne des Lèvres de la barre précédente (complétée) est supérieure à celle des Dents.
//+------------------------------------------------------------------+
//| Vérifie les conditions pour fermer une position longue |
//+------------------------------------------------------------------+
bool CSignalAlligator::CheckCloseLong(double& price)
  {
   price=0.0;
//---
   return(LipsTeethDiff(-1)<0 && LipsTeethDiff(0)>=0 && LipsTeethDiff(1)>0);
  }


3. Ouvrir une position courte

Conditions pour ouvrir une position courte :

  • La méthode CheckCross est utilisée pour déterminer le croisement et l'augmentation de la différence entre les lignes ;
  • LipsTeethDiff(-2)<=LipsTeethDiff(-1) et LipsTeethDiff(-1)<=LipsTeethDiff(0) ; vérification de l'augmentation de la différence entre les lignes des Lèvres et des Dents ;
  • LipsTeethDiff(0)<=0.0 ; la ligne des Lèvres de la barre actuelle est inférieure ou égale à celle des Dents ;
  • TeethJawDiff(-2)<=TeethJawDiff(-1) et TeethJawDiff(-1)<=TeethJawDiff(0) ; vérification de l'augmentation de la différence entre les lignes des Dents et de la Mâchoire ;
  • TeethJawDiff(0) <=0.0 ; la ligne des Dents de la barre actuelle est inférieure ou égale à celle de la Mâchoire.
//+------------------------------------------------------------------+
//| Vérifie les conditions pour ouvrir une position courte (vente) |
//+------------------------------------------------------------------+
bool CSignalAlligator::CheckOpenShort(double& price,double& sl,double& tp,datetime& expiration)
  {
   if(CheckCross()) return(false);
//---
   price=0.0;
   sl   =0.0;
   tp   =0.0;
//---
   if(LipsTeethDiff(-2)<=LipsTeethDiff(-1) && LipsTeethDiff(-1)<=LipsTeethDiff(0) && LipsTeethDiff(0)<=0.0 &&
      TeethJawDiff(-2) <=TeethJawDiff(-1)  && TeethJawDiff(-1) <=TeethJawDiff(0)  && TeethJawDiff(0) <=0.0)
      m_crossed=true;
//---
   return(m_crossed);
  }


4. Fermer une position courte

Conditions pour fermer une position courte :

  • LipsTeethDiff(-1)>0 ; la ligne des Lèvres de la barre suivante (à cause du décalage) est supérieure à celle des Dents ;
  • LipsTeethDiff(0)<=0 ; la ligne des Lèvres de la barre actuelle est inférieure ou égale à celle des Dents ;
  • LipsTeethDiff(1)<0 ; la ligne des Lèvres de la barre précédente (complétée) est inférieure à celle des Dents.
//+------------------------------------------------------------------+
//| Vérifie les conditions pour fermer une position courte |
//+------------------------------------------------------------------+
bool CSignalAlligator::CheckCloseShort(double& price)
  {
   price=0.0;
//---
   return(LipsTeethDiff(-1)>0 && LipsTeethDiff(0)<=0 && LipsTeethDiff(1)<0);
  }

Créer un Expert Advisor avec MQL5 Wizard

Pour créer un robot de trading basé sur cette stratégie, sélectionnez les propriétés du signal comme "Signaux basés sur l'Alligator" dans l'option Créer des Experts Advisors Prêts à l'Emploi de MQL5 Wizard :

Figure 2. Sélectionnez les signaux basés sur l'Alligator dans MQL5 Wizard

Figure 2. Sélectionnez "Signaux basés sur l'Alligator" dans MQL5 Wizard

Ensuite, vous devrez spécifier l'algorithme de trailing stop nécessaire ainsi que le système de gestion des risques et de l'argent. Le code de l'Expert Advisor sera créé automatiquement et vous pourrez le compiler et le tester dans le Testeur de Stratégie du terminal client MetaTrader 5.


Résultats des Tests

Examinons le backtesting de l'Expert Advisor sur des données historiques (EURUSD H1, période de test : 01.01.2010 - 05.01.2011, JawPeriod=13, JawShift=8, TeethPeriod=8, TeethShift=5, LipsPeriod=5, LipsShift=3, MaMethod=2, Applied=5, CrossMeasure=5).

Lors de la création de l'Expert Advisor, nous avons utilisé un volume fixe (Trading Fixed Lot, 0.1), et l'algorithme de trailing stop n'est pas utilisé (Trailing non utilisé).

Figure 3. Résultats des tests de l'Expert Advisor avec les signaux de trading basés sur l'indicateur Alligator

Figure 3. Résultats des tests de l'Expert Advisor avec les signaux de trading basés sur l'indicateur Alligator


Le profit peut être augmenté si vous utilisez un filtrage des transactions et tenez compte des spécificités du marché, selon le moment de la journée. La classe CSignalITF vous permettra d'ajouter un filtre temporel intrajournalier. Les meilleurs moments peuvent être trouvés à l'aide du Testeur de Stratégie du terminal MetaTrader 5. Consultez l'exemple dans MQL5 Wizard - Signaux de Trading Basés sur le Croisement de Deux EMA avec Filtre Temporel Intrajournalier.


Pièces jointes : Le fichier SignalAlligator.mqh avec la classe CSignalAlligator doit être placé dans le dossier terminal_data_folder\MQL5\Include\Expert\Signal.

Le fichier expert_alligator.mq5 contient le code de l'Expert Advisor, créé à l'aide de MQL5 Wizard.


Articles connexes

Commentaire (0)