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 le Croisement de Deux EMA en intraday - expert pour MetaTrader 5

Vues:
410
Note:
(39)
Publié:
2022.01.11 13:11
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.

Les signaux de trading de la stratégie, basés sur deux moyennes mobiles, sont pris en compte dans l'Assistant MQL5 - Signaux de Trading Basés sur le Croisement de Deux Moyennes Mobiles Exponentielles. Les moyennes mobiles sont efficaces en cas de tendance, dans d'autres cas elles fournissent de nombreux faux signaux. L'un des moyens d'améliorer la stratégie est l'utilisation des filtres temporels (par exemple, ouvrir de nouvelles positions lors d'une session européenne de FOREX).

Ici, nous allons considérer la stratégie basée sur le croisement de deux moyennes mobiles exponentielles (EMA rapide et EMA lente) avec un filtre de temps intra-journalier. La stratégie appelée "Signaux basés sur le croisement de deux EMA en intraday" (lors de la création automatique d'EA dans l'Assistant MQL5).

Signaux de Trading :

  • Ouverture d'une position longue : l'EMA rapide croise vers le haut l'EMA lente, et les conditions de filtre de temps intraday ne sont pas satisfaites.
  • Ouverture d'une position courte : l'EMA rapide croise l'EMA lente vers le bas, et les conditions de filtre de temps intraday ne sont pas satisfaites.

Cette stratégie est implémentée dans la classe CSignal2EMA_ITF.

Le filtrage des signaux, basé sur des périodes de temps spécifiées, est implémenté dans la classe CSignalITF. Comme exemple de son utilisation, nous considérerons la classe CSignal2EMA_ITF (elle contient l'objet classe CSignalITF).

Le système de trading est basé sur les ordres en attente, les niveaux de prix sont calculés en fonction des valeurs de la moyenne mobile, les unités ATR (Average True Range) sont utilisées.

Figure 1. Signaux de trading, basés sur le croisement de deux EMA avec filtre horaire intraday

Figure 1. Signaux de trading, basés sur le croisement de deux EMA avec filtre horaire intraday

Signaux de trading

La stratégie de trading est implémentée dans CSignal2EMA_ITF, elle possède des méthodes protégées pour simplifier l'accès aux valeurs des indicateurs :

 double  FastEMA(int ind)      // renvoie la valeur de l'EMA rapide de la barre
 double  SlowEMA(int ind)      // renvoie la valeur de l'EMA lente de la barre
 double  StateFastEMA(int ind) // renvoie une valeur positive/négative si l'EMA rapide augmente/diminue
 double  StateSlowEMA(int ind) // renvoie une valeur positive/négative si l'EMA lente augmente/diminue
 double  StateEMA(int ind)     // renvoie la différence entre l'EMA rapide et l'EMA lente
 double  ATR(int ind)          // renvoie la valeur de l'ATR de la barre


La caractéristique de ce système est la suivante : le trade dépend du paramètre d'entrée Limit. Selon son signe, il existe différents cas :

  1. Limit>0. Il entrera en mouvement de retour en cas de fausse cassure de la moyenne mobile sur le prix meilleur que le prix du marché (les ordres Buy Limit et Sell Limit seront placés en fonction du signal de trading)
  2. Limit<0. Il entrera dans la direction du mouvement des prix (les ordres Buy Stop et Sell Stop seront placés en fonction du signal de trading).
  3. Limit=0. Dans ce cas, le trade utilisera les prix du marché.


1. Ouverture d'une position longue

Il vérifie les conditions pour ouvrir la position longue : si la différence entre l'EMA rapide et lente sur la dernière barre complétée a changé son signe de "-" à "+" (StateEMA(1)>0 && StateEMA(2)<0) .

Ensuite, il vérifie les conditions du filtre de temps intraday en appelant la méthode CheckOpenLong() de la classe CSignalITF. Si le trading est autorisé, il calculera le niveau de prix de base (la valeur de la moyenne mobile) et la plage de valeurs ATR de la dernière barre complétée.

Selon le signe du paramètre d'entrée Limit, il placera l'ordre d'achat en attente. Le prix de l'ordre, les niveaux de Take Profit et de Stop Loss sont calculés par rapport au niveau de prix de base (en unités ATR). Le délai d'expiration de l'ordre est défini (en barres) par le paramètre d'entrée Expiration.

//+------------------------------------------------------------------+
//| Vérifie les conditions d'ouverture d'une position longue (achat) |
//+------------------------------------------------------------------+
bool CSignal2EMA_ITF::CheckOpenLong(double& prix,double& sl,double& tp,datetime& expiration)
{
   if(!(StateEMA(1)>0 && StateEMA(2)<0))                    return(false);
   if(!m_time_filter.CheckOpenLong(price,sl,tp,expiration)) return(false);
//---
   double ema=SlowEMA(1);
   double atr=ATR(1);
   double spread=m_symbol.Ask()-m_symbol.Bid();
//---
   price=m_symbol.NormalizePrice(ema-m_limit*atr+spread);
   sl   =m_symbol.NormalizePrice(price+m_stop_loss*atr);
   tp   =m_symbol.NormalizePrice(price-m_take_profit*atr);
   expiration+=m_expiration*PeriodSeconds(m_period);
//---
return(true);
}

2. Fermeture d'une position longue

Dans notre cas, la fonction qui vérifie les conditions pour fermer la position longue renvoie toujours faux, c'est-à-dire qu'il est supposé que la position longue sera fermée par le Take Profit ou le Stop Loss. Si nécessaire, vous pouvez écrire votre propre code avec l'implémentation de cette méthode.

//+------------------------------------------------------------------+
//| Vérifie les conditions pour fermer la position longue            |
//+------------------------------------------------------------------+
bool CSignal2EMA_ITF::CheckCloseLong(double& prix)
{
return(false);
}


3. Ouverture d'une position courte

Il vérifie les conditions pour ouvrir la position courte : si la différence entre l'EMA rapide et l'EMA lente sur la dernière barre complétée a changé son signe de "+" à "-" (StateEMA(1)<0 && StateEMA(2)>0) .

Ensuite, il vérifie les conditions du filtre de temps intraday en appelant la méthode CheckOpenLong() de la classe CSignalITF. Si le trading est autorisé, il calculera le niveau de prix de base (la valeur de la moyenne mobile) et la plage de valeurs ATR de la dernière barre complétée.

Selon le signe du paramètre d'entrée Limit, il placera l'ordre de vente en attente. Le prix de l'ordre, les niveaux de Take Profit et de Stop Loss sont calculés par rapport au niveau de prix de base (en unités ATR). Le délai d'expiration de l'ordre est défini (en barres) par le paramètre d'entrée Expiration.

//+------------------------------------------------------------------+
//| Vérifie les conditions d'ouverture d'une position courte (vente) |
//+------------------------------------------------------------------+
bool CSignal2EMA_ITF::CheckOpenShort(double& prix,double& sl,double& tp, datetime & expiration)
{
   if(!(StateEMA(1)<0 && StateEMA(2)>0))                     return(false);
   if(!m_time_filter.CheckOpenShort(price,sl,tp,expiration)) return(false);
//---
   double ema=SlowEMA(1);
   double atr=ATR(1);
//---
   prix      =m_symbol.NormalizePrice(ema+m_limit*atr);
   sl         =m_symbol.NormalizePrice(price+m_stop_loss*atr);
   tp         =m_symbol.NormalizePrice(price-m_take_profit*atr);
   expiration+=m_expiration*PeriodSeconds(m_period);
//---
return(true);
}

4. Fermeture d'une position courte

Dans notre cas, la fonction qui vérifie les conditions pour fermer la position courte renvoie toujours faux, c'est-à-dire qu'il est supposé que la position sera fermée par le Take Profit ou le Stop Loss. Si nécessaire, vous pouvez écrire votre propre code avec l'implémentation de cette méthode.

//+------------------------------------------------------------------+
//| Vérifie les conditions pour fermer la position courte            |
//+------------------------------------------------------------------+
bool CSignal2EMA_ITF::CheckCloseShort(double& prix)
{
   return(false);
}


5. Stop Suiveur de l'Ordre d'Achat en Attente

L'Expert Advisor suivra les ordres en attente en fonction de la valeur actuelle de la moyenne mobile et de l'ATR.

Le système de trading placera des ordres en attente en fonction des signaux de trading. Si l'ordre a été passé avec succès, il suivra l'ordre en attente le long de la moyenne mobile. L'ordre sera exécuté si le prix du marché atteint le prix de l'ordre.
//+------------------------------------------------------------------+
//| Vérifie les conditions pour modifier l'ordre d'achat en attente  |
//+------------------------------------------------------------------+
bool CSignal2EMA_ITF::CheckTrailingOrderLong(commande COrderInfo*,double& prix)
{
   //--- vérification
   if(order==NULL) return(false);
//---
   double ema=SlowEMA(1);
   double atr=ATR(1);
   double spread=m_symbol.Ask()-m_symbol.Bid();
//---
   price=m_symbol.NormalizePrice(ema-m_limit*atr+spread);
//---
return(true);
}


6. Stop Suiveur de l'Ordre de Vente en Attente

L'Expert Advisor suivra les ordres en attente en fonction de la valeur actuelle de la moyenne mobile et de l'ATR.

L'ordre sera exécuté si le prix du marché atteint le prix de l'ordre.

//+------------------------------------------------------------------+
//| Vérifie les conditions pour modifier l'ordre d'achat en attente  |
//+------------------------------------------------------------------+
bool CSignal2EMA_ITF::CheckTrailingOrderShort(commande COrderInfo*,double& prix)
{
   //--- vérification
   if(order==NULL) return(false);
//---
   double ema=SlowEMA(1);
   double atr=ATR(1);
//---
   prix=m_symbol.NormalizePrice(ema+m_limit*atr);
//---
   return(true);
}

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 sélectionner les propriétés du signal en tant que "Signaux basés sur le croisement de deux EMA avec filtre de temps intraday" dans l'option "Créer des Expert Advisors prêts à l'emploi" de l'Assistant MQL5 :

Figure 2. Sélectionnez "Signaux basés sur le croisement de deux EMA avec filtre de temps intraday" dans l'Assistant MQL5

Figure 2. Sélectionnez "Signaux basés sur le croisement de deux EMA avec filtre de temps intraday" 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 (EUenSD H1, période de test : 1.1.2010-05.01.2011, PeriodFastEMA=5, PeriodSlowEMA=30, PeriodATR=7, Limit=1.2, StopLoss=5, TakeProfit=8, Expiration =4, GoodMinuteOfHour=-1, BadMinutesOfHour=0, GoodHourOfDay=-1, BadHoursOfDay=0, GoodDayOfWeek=-1, BadDaysOfWeek=0).

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 des tests de l'Expert Advisor avec des signaux de trading, basés sur le croisement de deux EMA sans utilisation de filtre ITF

Figure 3. Résultats des tests de l'Expert Advisor avec des signaux de trading, basés sur le croisement de deux EMA sans utilisation de filtre ITF

Le filtre intraday n'est pas utilisé, il y a donc beaucoup de faux signaux. Les signaux de trading peuvent être améliorés si nous effectuons l'analyse des résultats de la transaction en fonction des heures de trading.

Dans notre cas, nous avons constaté que le croisement de deux EMA fournit de nombreux faux signaux à partir de 6h00 jusqu'à 23h59. Nous pouvons spécifier le filtre de temps intraday en définissant les paramètres de filtre.

Par exemple, nous pouvons spécifier un filtre de temps, qui permet d'ouvrir des positions uniquement de 0:00 à 5:59. Cela peut être fait en définissant la valeur de BadHoursOfDay=16777152=11111111111111111111000000b. Toutes les autres heures de trading sont "mauvaises", il est donc préférable d'interdire l'ouverture de nouvelles positions de 6h00 jusqu'à la fin de la journée.

Si nous définissons la valeur de BadHoursOfDay=16777152, nous filtrerons de nombreux faux signaux :

Figure 4. Résultats des tests de l'Expert Advisor avec des signaux de trading, basés sur le croisement de deux EMA avec filtre temporel (BadHoursofDay=16777152)

Figure 4. Résultats des tests de l'Expert Advisor avec des signaux de trading, basés sur le croisement de deux EMA avec filtre temporel (BadHoursofDay=16777152)


Le CSignalITF fournit de nombreuses autres fonctionnalités de filtrage du temps (spécifiez simplement les "bonnes" et "mauvaises" minutes dans l'heure, les heures dans la journée, les jours dans la semaine).

L'utilisation de filtres temporels permet d'améliorer les signaux de trading et de prendre en compte la dynamique du marché (par exemple, les fonctionnalités des sessions de trading).

Pièces jointes : La classe Signal2EMA-ITF.mqh avec CSignal2EMA_ITF doit être placée dans le dossier terminal_data_folder\MQL5\Include\Expert\Signal.

Le fichier expert_2ema_itf.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/264

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.

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 de l'Indicateur Alligator Assistant MQL5 - Signaux de Trading Basés sur le Croisement des Lignes de l'Indicateur Alligator

Les signaux de trading basés sur le croisement des lignes de l'indicateur technique Alligator 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 des Modèles de Renversement de Bougies Assistant MQL5 - Signaux de Trading Basés sur des Modèles de Renversement de Bougies

Les signaux de trading basés sur des modèles de renversement de bougies 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.