Rejoignez notre page de fans
![Experts](https://c.mql5.com/i/code/expert.png)
Assistant MQL5 - Signaux de Trading Basés sur le Croisement de Deux EMA en intraday - expert pour MetaTrader 5
- Vues:
- 445
- Note:
- 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 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
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
- 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)
- 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).
- 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.
//+------------------------------------------------------------------+ //| 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
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
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)
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).
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](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.
![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 de l'Indicateur Alligator](https://c.mql5.com/i/code/expert.png)
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](https://c.mql5.com/i/code/expert.png)
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.