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
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
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)); }
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
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
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.
Commentaire 0