Voir comment télécharger gratuitement des robots de trading
Retrouvez-nous sur Facebook !
Rejoignez notre page de fans
Un script intéressant ?
Poster un lien vers celui-ci -
laisser les autres l'évaluer
Vous avez aimé le script ? Essayez-le dans le terminal MetaTrader 5
Experts

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:
274
Note:
(30)
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

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
La caractéristique de cette implémentation est une vérification supplémentaire de la présence de la tendance (à l'aide de l'Indicateur de Mouvement Directionnel). Elle permet de filtrer les faux signaux et de vérifier les conditions de trading en utilisant les valeurs de la barre actuelle (incomplète).


1. Ouverture d'une position longue

Conditions pour ouvrir une position longue :

  1. StateEMA(0)<0 et StateEMA(1)>0 : la moyenne mobile augmente sur la barre actuelle et la dernière barre terminée ;
  2. StateClose(1)>0 : le cours de clôture de la dernière barre complétée est supérieur à la moyenne mobile ;
  3. 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) ;
  4. 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 :

  1. StateEMA(0)<0 et StateEMA(1)<0 : la moyenne mobile diminue sur la barre actuelle et la dernière barre terminée ;
  2. StateClose(1)<0 : le cours de clôture de la barre complétée est inférieur à la moyenne mobile ;
  3. 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) ;
  4. 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

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

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 Assistant MQL5 - Signaux de Trading basés sur Trois Moyennes Mobiles

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 Assistant MQL5 - Signaux de Trading Basés sur le Croisement des Prix avec l'indicateur Moyenne Mobile

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 Assistant MQL5 - Signaux de Trading Basés sur le Croisement de Deux Moyennes Mobiles Lissées de manière Exponentielle

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 Assistant MQL5 - Signaux de Trading Basés sur le Croisement des Lignes du MACD

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.