Rejoignez notre page de fans
![Experts](https://c.mql5.com/i/code/expert.png)
Assistant MQL5 - Signaux de Trading Basés sur un Croisement des Prix avec une Moyenne Mobile, confirmé par l'ADX - expert pour MetaTrader 5
- Vues:
- 315
- Note:
- Publié:
- 2022.01.11 13:08
-
Besoin d'un robot ou d'un indicateur basé sur ce code ? Commandez-le sur Freelance Aller sur Freelance
L'Assistant MQL5 permet de créer automatiquement le code des Expert Advisors. Voir Créer des Expert Advisors prêts à l'emploi avec l'Assistant MQL5 pour plus de détails.
Ici, nous examinerons la stratégie basée sur le croisement des prix avec la Moyenne Mobile, confirmée par l'indicateur ADX. La stratégie appelée "Signaux basés sur un croisement de prix avec la MA confirmé par l'ADX" (lors de la création automatique d'EA dans l'Assistant MQL5).
Les signaux de trading :
- Achat : le cours de clôture de la dernière barre complétée est supérieur à la moyenne mobile, la moyenne mobile augmente sur les dernières barres.
- Vente : le cours de clôture de la dernière barre complétée est inférieur à la moyenne mobile, la moyenne mobile diminue sur les dernières barres.
- Pour filtrer les faux signaux, il vérifie la puissance de la tendance (ADX>ADXmin) et la direction de la tendance à l'aide des Indices de Mouvement Mirectionnel (DI+ et DI-).
Cette stratégie est implémentée dans la classe CSignalADX_MA (elle doit être placée dans terminal_data_folder\MQL5\Include\Expert\Signal\SignalADX-MA.mqh).
Figure 1. Signaux de trading basés sur le croisement des prix avec la moyenne mobile, confirmés par l'ADX
Signaux de Trading
La stratégie de trading est implémentée dans la classe CSignalADX_MA, elle possède des méthodes protégées pour simplifier l'accès aux indicateurs et aux valeurs de prix :
double PlusADX(int ind) // renvoie la valeur de la ligne DI+ de la barre double MainADX(int ind) // renvoie la valeur de la ligne principale de la barre double MinusADX(int ind) // renvoie la valeur de la ligne DI- de la barre double EMA(int ind) // renvoie la valeur de la moyenne mobile de la barre double Close(int ind) // renvoie la valeur du cours de clôture de la barre double StateADX(int ind) // renvoie la différence entre les lignes DI+ et DI- double StateEMA(int ind) // renvoie une valeur positive si l'EMA augmente et négative si elle diminue double StateClose(int ind) // renvoie la différence entre le cours de clôture et la moyenne mobile
1. Ouverture d'une position longue
Conditions pour ouvrir une position longue :
- StateEMA(0)<0 et StateEMA(1)>0 : la moyenne mobile augmente sur la barre actuelle et la dernière barre terminée ;
- StateClose(1)>0 : le cours de clôture de la dernière barre complétée est supérieur à la moyenne mobile ;
- MainADX(0)>minimum_ADX : la valeur ADX de la barre actuelle est supérieure à la valeur minimale spécifiée (pour vérifier la présence de tendance) ;
- StateADX(0)>0 : Le DI+ est supérieur au DI- de la barre courante.
//+------------------------------------------------------------------+ //| Vérifie les conditions d'ouverture d'une position longue (achat) | //+------------------------------------------------------------------+ bool CSignalADX_MA::CheckOpenLong(double& prix,double& sl,double& tp,datetime & expiration) { //--- condition 1 : la moyenne mobile augmente sur la barre actuelle et la dernière barre terminéebool Buy_Condition_1=(StateEMA(0)>0 && StateEMA(1)>0); //--- condition 2 : le cours de clôture de la dernière barre complétée est supérieur à la moyenne mobilebool Buy_Condition_2=(StateClose(1)>0); //--- condition 3 : la valeur ADX de la barre actuelle est supérieure à la valeur minimale spécifiée (seuil de tendance)bool Buy_Condition_3=(MainADX(0)>m_minimum_ADX); //--- condition 4 : la valeur de DI+ est supérieure à DI- de la barre courante bool Buy_Condition_4=(StateADX(0)>0); //--- prix=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 toutes les conditions return(Buy_Condition_1 && Buy_Condition_2 && Buy_Condition_3 && Buy_Condition_4) ; }
2. Fermeture d'une position longue
Conditions pour fermer une position longue :
- StateEMA(0)<0 et StateEMA(1)<0 : la moyenne mobile diminue sur la barre actuelle et la dernière barre terminée ;
- StateClose(1)<0 : le cours de clôture de la barre complétée est inférieur à la moyenne mobile ;
- MainADX(0)>minimum_ADX : la valeur ADX de la barre actuelle est supérieure à la valeur minimale spécifiée (pour vérifier la présence de tendance) ;
- StateADX(0)<0 : Le DI- est supérieur au DI+ de la barre courante.
//+------------------------------------------------------------------+ //| Vérifie les conditions pour fermer la position longue | //+------------------------------------------------------------------+ bool CSignalADX_MA::CheckCloseLong(double& prix) { //--- condition 1 : la moyenne mobile diminue sur la barre actuelle et la dernière barre complétéebool Sell_Condition_1=(StateEMA(0)<0 && StateEMA(1)<0); //--- condition 2 : le cours de clôture de la barre complétée est inférieur à la moyenne mobilebool Sell_Condition_2=(StateClose(1)<0); //--- condition 3 : la valeur ADX de la barre actuelle est supérieure à la valeur minimale spécifiée (seuil de tendance)bool Sell_Condition_3=(MainADX(0)>m_minimum_ADX); //--- condition 4 : la valeur de DI- est supérieure à DI- de la barre courante bool Sell_Condition_4=(StateADX(0)<0); //--- prix=0.0 ; //--- vérification de toutes les conditions return(Sell_Condition_1 && Sell_Condition_2 && Sell_Condition_3 && Sell_Condition_4) ; }
3. Ouverture d'une position courte
Les conditions d'ouverture d'une position courte sont les mêmes que les conditions de clôture d'une position longue.
//+------------------------------------------------------------------+ //| Vérifie les conditions d'ouverture d'une position courte (vente) | //+------------------------------------------------------------------+ bool CSignalADX_MA::CheckOpenShort(double& prix,double& sl,double& tp,datetime & expiration) { //--- condition 1 : la moyenne mobile diminue sur la barre actuelle et la dernière barre complétée bool Sell_Condition_1=(StateEMA(0)<0 && StateEMA(1)<0); //--- condition 2 : le cours de clôture de la barre complétée est inférieur à la moyenne mobile bool Sell_Condition_2=(StateClose(1)<0); //--- condition 3 : la valeur ADX de la barre actuelle est supérieure à la valeur minimale spécifiée (seuil de tendance) bool Sell_Condition_3=(MainADX(0)>m_minimum_ADX); //--- condition 4 : la valeur de DI- est supérieure à DI- de la barre courante bool Sell_Condition_4=(StateADX(0)<0); //--- prix=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 toutes les conditions return(Sell_Condition_1 && Sell_Condition_2 && Sell_Condition_3 && Sell_Condition_4) ; }
4. Fermeture d'une position courte
Les conditions de clôture des positions courtes sont les mêmes que les conditions d'ouverture des positions longues.
//+------------------------------------------------------------------+ //| Vérifie les conditions pour fermer la position courte | //+------------------------------------------------------------------+ bool CSignalADX_MA::CheckCloseShort(double& prix) { //--- condition 1 : la moyenne mobile augmente sur la barre actuelle et la dernière barre complétée bool Buy_Condition_1=(StateEMA(0)>0 && StateEMA(1)>0); //--- condition 2 : le cours de clôture de la dernière barre complétée est supérieur à la moyenne mobilebool Buy_Condition_2=(StateClose(1)>0); //--- condition 3 : la valeur ADX de la barre actuelle est supérieure à la valeur minimale spécifiée (seuil de tendance) bool Buy_Condition_3=(MainADX(0)>m_minimum_ADX); //--- condition 4 : la valeur de DI+ est supérieure à DI- de la barre courante bool Buy_Condition_4=(StateADX(0)>0); //--- prix=0.0 ; //--- vérification de toutes les conditions return(Buy_Condition_1 && Buy_Condition_2 && Buy_Condition_3 && Buy_Condition_4) ; }
Création d'un Expert Advisor à l'aide de l'Assistant MQL5
Pour créer un robot de trading basé sur la stratégie, vous devez choisir les propriétés du signal comme "Signaux basés sur le croisement des prix avec la MA confirmé par l'ADX" dans l'option "Créer des Expert Advisors prêts à l'emploi" de Assistant MQL5 :
Figure 2. Choisissez "Signaux basés sur le croisement des prix avec la MA confirmé par l'ADX" dans l'Assistant MQL5
Ensuite, vous devez spécifier l'algorithme du stop suiveur et le système de gestion des fonds et des risques. Le code de l'Expert Advisor sera créé automatiquement, vous pouvez le compiler et le tester dans le Strategy Tester du terminal client MetaTrader 5.
Résultats des Tests
Considérons le backtesting de l'Expert Advisor sur les données historiques (EURUSD H1, période de test : 1.1.2010-05.01.2011, PeriodADX=33, MinimumADX=22, PeriodMA=39, StopLoss=400, TakeProfit=900).
Lors de la création de l'Expert Advisor, nous avons utilisé le volume fixe (Trading Fixed Lot, 0.1), l'algorithme Trailing Stop n'est pas utilisé (Trailing not used).
Figure 3. Résultats historiques du backtesting de l'Expert Advisor, sur la base d'un croisement de prix avec la MA confirmé par l'ADX
Pièces jointes : La classe SignalADX-MA.mqh avec CSignalADX_MA doit être placée dans terminal_data_folder\MQL5\Include\Expert\Signal\.
Le ma_crossover_adx.mq5 contient le code de l'Expert Advisor, créé à l'aide de l'Assistant MQL5.
Traduit du russe par MetaQuotes Ltd.
Code original : https://www.mql5.com/ru/code/258
![Assistant MQL5 - Signaux de Trading basés sur Trois Moyennes Mobiles](https://c.mql5.com/i/code/expert.png)
Les signaux de trading basés sur trois moyennes mobiles sont pris en compte. Le code de l'Expert Advisor basé sur cette stratégie peut être généré automatiquement à l'aide de l'Assistant MQL5.
![Assistant MQL5 - Signaux de Trading Basés sur le Croisement des Prix avec l'indicateur Moyenne Mobile](https://c.mql5.com/i/code/expert.png)
Les signaux de trading basés sur le croisement des prix avec un indicateur de moyenne mobile (CSignalMA de la bibliothèque standard MQL5) sont pris en compte. Le code de l'Expert Advisor basé sur cette stratégie peut être généré automatiquement à l'aide de l'Assistant MQL5.
![Assistant MQL5 - Signaux de Trading Basés sur le Croisement de Deux Moyennes Mobiles Lissées de manière Exponentielle](https://c.mql5.com/i/code/expert.png)
Les signaux de trading basés sur le croisement des prix de deux moyennes mobiles lissées de manière exponentielle sont pris en compte. Le code de l'Expert Advisor basé sur cette stratégie peut être généré automatiquement à l'aide de l'Assistant MQL5.
![Assistant MQL5 - Signaux de Trading Basés sur le Croisement des Lignes du MACD](https://c.mql5.com/i/code/expert.png)
Les signaux de trading basés sur le croisement des lignes du MACD (CSignalMACD de la bibliothèque standard MQL5) sont pris en compte. Le code de l'Expert Advisor basé sur cette stratégie peut être généré automatiquement à l'aide de l'Assistant MQL5.