Créer un Expert Advisor sous MetaTrader 5 avec la stratégie des trois moyennes mobiles

Mike 2011.01.10 19:41 13 0 0
Pièce jointe

MQL5 Wizard permet de créer automatiquement le code d'Expert Advisors. Pour plus de détails, consultez Créer des Expert Advisors prêts à l'emploi dans MQL5 Wizard.

Dans cet article, nous allons examiner une stratégie de tendance basée sur trois moyennes mobiles : la stratégie des « Signaux basés sur trois EMA ». Pour déterminer la tendance, cette méthode utilise trois moyennes mobiles exponentiellement lissées : FastEMA, MediumEMA et SlowEMA.

Signaux de trading :

  • Signal d'achat : FastEMA > MediumEMA > SlowEMA (tendance haussière).
  • Signal de vente : FastEMA < MediumEMA < SlowEMA (tendance baissière).

Cette stratégie est implémentée dans la classe CSignal3EMA (le fichier signal3ema.mqh doit être placé dans le dossier terminal_data_folder\MQL5\Include\Expert\Signal\Signal3EMA.mqh).

Figure 1. Signaux de trading basés sur trois moyennes mobiles

Figure 1. Signaux de trading basés sur trois moyennes mobiles

Signaux de trading

La stratégie de trading est implémentée dans la classe CSignal3EMA, qui dispose de méthodes protégées pour faciliter l'accès aux valeurs des trois moyennes mobiles :

double  FastEMA(int ind)      // retourne la valeur de la Fast EMA de la bougie
double  MediumEMA(int ind)    // retourne la valeur de la Medium EMA de la bougie
double  SlowEMA(int ind)      // retourne la valeur de la Slow EMA de la bougie
Les valeurs de l'indicateur de la bougie 0 (inachevée) peuvent changer, il est donc nécessaire de vérifier les conditions de trading en utilisant les données des bougies complètes.

1. Ouvrir une position longue

La tendance haussière est déterminée par la condition suivante : FastEMA > MediumEMA > SlowEMA :

  • FastEMA(1) > MediumEMA(1) : la Fast EMA est supérieure à la Medium EMA (dernière bougie complétée);
  • MediumEMA(2) > SlowEMA(1) : la Medium EMA est supérieure à la Slow EMA (dernière bougie complétée);
//+------------------------------------------------------------------+
//| Vérifie les conditions pour ouvrir une position longue (achat)     |
//+------------------------------------------------------------------+
bool CSignal3EMA::CheckOpenLong(double& price,double& sl,double& tp,datetime& expiration)
  {
   double medium=MediumEMA(1);
//---
   price=0.0;
   sl   =m_symbol.Ask()-m_stop_loss*m_adjusted_point;
   tp   =m_symbol.Ask()+m_take_profit*m_adjusted_point;
//--- vérification de la tendance haussière (sur la dernière bougie complétée) : FastEMA(1) > MediumEMA(1) > SlowEMA(1)
    return(FastEMA(1)>medium && medium>SlowEMA(1));
  }


2. Fermer une position longue

La tendance baissière est déterminée par la condition suivante : FastEMA < MediumEMA < SlowEMA :

  • FastEMA(1) < MediumEMA(1) : la Fast EMA est inférieure à la Medium EMA (dernière bougie complétée);
  • MediumEMA(2) < SlowEMA(1) : la Medium EMA est inférieure à la Slow EMA (dernière bougie complétée);
//+------------------------------------------------------------------+
//| Vérifie les conditions pour fermer une position longue             |
//+------------------------------------------------------------------+
bool CSignal3EMA::CheckCloseLong(double& price)
  {
   double medium=MediumEMA(1);
//---
   price=0.0;
//--- vérification de la tendance baissière (sur la dernière bougie complétée) : FastEMA(1) < MediumEMA(1) < SlowEMA(1)
   return(FastEMA(1)<medium && medium<SlowEMA(1));
  }
Vous pouvez améliorer la fermeture de la position longue : il n'est pas nécessaire d'attendre la tendance baissière, vous pouvez fermer les positions longues lorsque le marché est plat, ce qui peut être déterminé par les conditions suivantes : FastEMA < MediumEMA > SlowEMA.


3. Ouvrir une position courte

//+------------------------------------------------------------------+
//| Vérifie les conditions pour ouvrir une position courte (vente)    |
//+------------------------------------------------------------------+
bool CSignal3EMA::CheckOpenShort(double& price,double& sl,double& tp,datetime& expiration)
  {
   double medium=MediumEMA(1);
//---
   price=0.0;
   sl   =m_symbol.Bid()+m_stop_loss*m_adjusted_point;
   tp   =m_symbol.Bid()-m_take_profit*m_adjusted_point;
//--- vérification de la tendance baissière (sur la dernière bougie complétée) : FastEMA(1) < MediumEMA(1) < SlowEMA(1)
   return(FastEMA(1)<medium && medium<SlowEMA(1));
  }

4. Fermer une position courte

//+------------------------------------------------------------------+
//| Vérifie les conditions pour fermer une position courte             |
//+------------------------------------------------------------------+
bool CSignal3EMA::CheckCloseShort(double& price)
  {
   double medium=MediumEMA(1);
//---
   price=0.0;
//--- vérification de la tendance haussière (sur la dernière bougie complétée) : FastEMA(1) > MediumEMA(1) > SlowEMA(1)
   return(FastEMA(1)>medium && medium>SlowEMA(1));
  }

Vous pouvez améliorer la fermeture de la position courte : il n'est pas nécessaire d'attendre la tendance haussière, vous pouvez fermer les positions courtes lorsque le marché est plat, ce qui peut être déterminé par les conditions suivantes : FastEMA > MediumEMA < SlowEMA.


Créer un Expert Advisor avec MQL5 Wizard

Pour créer un robot de trading basé sur cette stratégie, vous devez choisir les propriétés du signal comme « Signaux basés sur trois EMA » dans l'option MQL5 Wizard :

Figure 2. Choisissez les signaux basés sur trois EMA dans MQL5 Wizard

Figure 2. Choisissez les signaux basés sur trois EMA dans MQL5 Wizard

Ensuite, vous devrez spécifier le nécessaire algorithme de trailing stop ainsi que le système de gestion des risques et de l'argent. Le code de l'Expert Advisor sera créé automatiquement, vous pourrez le compiler et le tester dans le Strategy Tester 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, FastPeriod=5, MediumPeriod=12, SlowPeriod=24, StopLoss=400, TakeProfit=900).

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

Figure 3. Résultats du backtesting historique de l'Expert Advisor basé sur trois EMA

Figure 3. Résultats du backtesting historique de l'Expert Advisor basé sur trois EMA

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

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


Liste
Commentaire 0