MQL5 Wizard permet de générer automatiquement le code des systèmes de trading. Pour plus de détails, consultez Créer des Systèmes de Trading Prêts à l'Emploi avec MQL5 Wizard.
Dans cet article, nous allons examiner une stratégie basée sur les croisements de prix avec l'indicateur de moyenne mobile. Cette stratégie est appelée "Signaux basés sur le croisement de prix avec la MA" lors de la création d'un EA automatiquement dans MQL5 Wizard.
Signaux de Trading :
- Achat : croisement à la hausse du prix avec la moyenne mobile.
- Vente : croisement à la baisse du prix avec la moyenne mobile.
- La vérification de l'augmentation/diminution de la MA est utilisée pour filtrer les faux signaux.
Cette stratégie est implémentée dans la classe CSignalMA de la bibliothèque standard MQL5 (située dans MQL5\Include\Expert\Signal\SignalMA.mqh).

Figure 1. Signaux de trading basés sur le croisement de prix avec la moyenne mobile
Signaux de Trading
La stratégie de trading est implémentée dans la classe CSignalMA, qui possède plusieurs méthodes protégées pour simplifier l'accès aux indicateurs et aux valeurs de prix :
double MA(int ind) // retourne la valeur de la moyenne mobile de la bougie double Open(int ind) // retourne le prix d'ouverture de la bougie double Close(int ind) // retourne le prix de clôture de la bougie double StateMA(int ind) // retourne une valeur positive si la moyenne augmente et négative si elle diminue double StateOpen(int ind) // retourne la différence entre le prix d'ouverture et la moyenne mobile double StateClose(int ind) // retourne la différence entre le prix de clôture et la moyenne mobile
1. Ouvrir une position longue
Conditions pour ouvrir une position longue (croisement de prix avec la MA et vérification de l'augmentation de la MA) :
- Open(1) < MA(1) : le prix d'ouverture est inférieur à la moyenne mobile ;
- Close(1) > MA(1) : le prix de clôture est supérieur à la moyenne mobile ;
- MA(1) > MA(2) : vérification de l'augmentation de la moyenne mobile (pour filtrer les faux signaux).
//+------------------------------------------------------------------+ //| Vérifie les conditions pour ouvrir une position longue (achat) | //+------------------------------------------------------------------+ bool CSignalMA::CheckOpenLong(double& price,double& sl,double& tp,datetime& expiration) { price=0.0; sl =0.0; tp =0.0; //--- le prix a croisé à la hausse la MA et la MA augmente return(StateOpen(1)<0 && StateClose(1)>0 && StateMA(1)>0); }
2. Fermer une position longue
Conditions pour fermer une position longue (croisement de prix avec la MA et vérification de la diminution de la MA) :
- Open(1) > MA(1) : le prix d'ouverture est supérieur à la moyenne mobile ;
- Close(1) < MA(1) : le prix de clôture est inférieur à la moyenne mobile ;
- MA(1) < MA(2) : vérification de la diminution de la moyenne mobile (pour filtrer les faux signaux).
//+------------------------------------------------------------------+ //| Vérifie les conditions pour fermer une position longue | //+------------------------------------------------------------------+ bool CSignalMA::CheckCloseLong(double& price) { price=0.0; //--- le prix a croisé la moyenne mobile à la baisse et la moyenne mobile diminue return(StateOpen(1)>0 && StateClose(1)<0 && StateMA(1)<0); }
3. Ouvrir une position courte
Les conditions pour ouvrir une position courte sont les mêmes que les conditions de fermeture d'une position longue.
//+------------------------------------------------------------------+ //| Vérifie les conditions pour ouvrir une position courte (vente) | //+------------------------------------------------------------------+ bool CSignalMA::CheckOpenShort(double& price,double& sl,double& tp,datetime& expiration) { price=0.0; sl =0.0; tp =0.0; //--- le prix a croisé à la hausse la moyenne mobile et la moyenne mobile diminue return(StateOpen(1)>0 && StateClose(1)<0 && StateMA(1)<0); }
4. Fermer une position courte
Les conditions pour fermer une position courte sont les mêmes que les conditions d'ouverture d'une position longue.
//+------------------------------------------------------------------+ //| Vérifie les conditions pour fermer une position courte | //+------------------------------------------------------------------+ bool CSignalMA::CheckCloseShort(double& price) { price=0.0; //--- le prix a croisé la moyenne mobile à la hausse et la moyenne mobile augmente return(StateOpen(1)<0 && StateClose(1)>0 && StateMA(1)>0); } //+------------------------------------------------------------------+
Créer un Expert Advisor avec MQL5 Wizard
Pour créer un robot de trading basé sur cette stratégie, vous devez sélectionner les propriétés de signal comme "Signaux basés sur le croisement de prix avec la MA" dans l'option "Créer des Systèmes de Trading Prêts à l'Emploi" de MQL5 Wizard :

Figure 2. Choisir "Signaux basés sur le croisement de prix avec MA" dans MQL5 Wizard
Ensuite, vous devez spécifier le système de trailing stop et le système de gestion des risques nécessaires. Le code de l'Expert Advisor sera généré 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 personnalisée : 01.01.2010-05.01.2011, MA_period=12, MA_Shift=0).
Lors de 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é).

Figure 3. Résultats de backtesting historique de l'Expert Advisor, basé sur le croisement de prix avec la MA
Pièces jointes : Le fichier SignalMA.mqh avec la classe CSignalMA (incluse dans la bibliothèque standard MQL5) est situé dans le dossier MQL5\Include\Expert\Signal. Le fichier crossoverma.mq5 contient le code de l'Expert Advisor créé avec MQL5 Wizard.
Commentaire 0