Rejoignez notre page de fans

Assistant MQL5 - Signaux de Trading Basés sur le Croisement des Lignes de l'Indicateur Alligator - expert pour MetaTrader 5
- Vues:
- 434
- Note:
- Publié:
- 2022.01.11 13:14
-
Besoin d'un robot ou d'un indicateur basé sur ce code ? Commandez-le sur Freelance Aller sur Freelance
L'Assistant MQL5 permet la création automatique d'Expert Advisors (voir Assistant MQL5 : Création d'Expert Advisors sans programmation).
Il est temps de considérer les signaux de trading, basés sur l'indicateur technique Alligator, présenté par B.Williams dans "Trading Chaos". La stratégie appelée "Signaux basés sur l'Alligator" (lors de la création automatique d'EA dans l'Assistant MQL5).
Le système est basé sur trois moyennes mobiles (lignes des Lèvres, des Dents et de la Mâchoire) et des oscillateurs, calculés en utilisant la différence entre eux. Les signaux de trading sont générés après croisement des lignes de l'Alligator, en fonction de la tendance, déterminée par l'ordre de ces lignes. Dans le cas d'une tendance à la hausse, la ligne des Lèvres (avec une période minimale) est la plus élevée, la suivante est la ligne des Dents et la plus basse est la ligne de la Mâchoire. Le cas similaire mais inverse dans le cas d'une tendance à la baisse.
Les signaux de trading :
- Ouvreture d'une position longue : croisement des lignes de l'Alligator et augmentation de la distance entre elles en cas de tendance haussière ;
- Fermeture d'une position longue : croisement vers le haut de la ligne des Lèvres avec la ligne de la Mâchoire ;
- Ouverture d'une position courte : croisement des lignes de l'Alligator et augmentation de la distance entre elles en cas de tendance baissière ;
- Fermeture d'une position courte : croisement vers le bas de la ligne des Lèvres avec la ligne de la Mâchoire ;
Cette stratégie est implémentée dans la classe CSignalAlligator.
Figure 1. Signaux de trading, basés sur l'indicateur technique Alligator
Signaux de trading
La stratégie de trading est implémentée dans CSignalAlligator, elle dispose de méthodes protégées pour simplifier l'accès aux valeurs des indicateurs :
double Jaw(int ind) // renvoie la valeur de la ligne de la Mâchoire de la barre double Teeth(int ind) // renvoie la valeur de la ligne des Dents de la barre double Lips(int ind) // renvoie la valeur de la ligne des Lèvres de la barre double LipsTeethDiff(int ind) // renvoie la différence entre les lignes des Lèvres et des Dents double TeethJawDiff(int ind) // renvoie la différence entre les lignes des Dents et de la Mâchoire double LipsJawDiff(int ind) // renvoie la différence entre les lignes des Lèvres et de la Mâchoire bool CheckCross(); // utilisé pour vérifier le croisement des lignes de l'Alligator
1. Ouverture d'une position longue
La vérification des conditions de trading présente certaines caractéristiques, causées par le décalage des lignes des Lèvres, des Dents et de la Mâchoire.
Conditions pour ouvrir une position longue :
- Le CheckCross est utilisé pour déterminer le croisement et augmenter encore la différence entre les lignes ;
- LipsTeethDiff(-2)>=LipsTeethDiff(-1) et LipsTeethDiff(-1)>=LipsTeethDiff(0) ; vérification de l'augmentation de la différence entre les lignes des Lèvres et des Dents ;
- LipsTeethDiff(0)>=0.0 ; la ligne des Lèvres est plus haute que la ligne des Dents ;
- TeethJawDiff(-2) >=TeethJawDiff(-1) et TeethJawDiff(-1) >=TeethJawDiff(0) ; vérification de l'augmentation de la différence entre les lignes des Dents et de la Mâchoire ;
- TeethJawDiff(0) >=0.0; la ligne des Dents est plus haute que la ligne de la Mâchoire.
//+------------------------------------------------------------------+ //| Vérifie les conditions d'ouverture d'une position longue (achat) | //+------------------------------------------------------------------+ bool CSignalAlligator::CheckOpenLong(double& prix,double& sl,double& tp,datetime& expiration) { if(CheckCross()) return(false); //--- prix=0.0 ; sl =0.0 ; tp =0.0 ; //--- if(LipsTeethDiff(-2)>=LipsTeethDiff(-1) && LipsTeethDiff(-1)>= LipsTeethDiff(0) && LipsTeethDiff(0)>=0.0 && TeethJawDiff(-2) >=TeethJawDiff(-1) && TeethJawDiff(-1) >=TeethJawDiff(0) && TeethJawDiff(0) >=0.0) m_crossed=true ; //--- return(m_crossed); }
2. Fermeture d'une position longue
Conditions pour fermer une position longue (notez le décalage des lignes):
- LèvresDiff.dents(-1)<0; la ligne des Lèvres de la barre suivante (à cause du décalage) est plus basse que la ligne des Dents ;
- LèvresDifflesDents(0)>=0 ; la ligne des Lèvres de la barre actuelle est supérieure/égale à la ligne des Dents ;
- LèvresDentsDiff(1)>0; la ligne des Lèvres de la barre précédente (complétée) est plus haute que la ligne des Dents.
//+------------------------------------------------------------------+ //| Vérifie les conditions pour fermer la position longue | //+------------------------------------------------------------------+ bool CSignalAlligator::CheckCloseLong(double& prix) { prix=0.0 ; //--- return(LipsTeethDiff(-1)<0 && LipsTeethDiff(0)>=0 && LipsTeethDiff(1)>0); }
3. Ouverture d'une position courte
Conditions pour ouvrir une position courte :
- Le CheckCross est utilisé pour déterminer le croisement et augmenter encore la différence entre les lignes ;
- LipsTeethDiff(-2)<=LipsTeethDiff(-1) et LipsTeethDiff(-1)<=LipsTeethDiff(0) ; vérification de l'augmentation de la différence entre les lignes des Lèvres et des Dents ;
- LipsTeethDiff(0)<=0.0 ; la ligne des Lèvres de la barre actuelle est inférieure à la ligne des Dents ;
- TeethJawDiff(-2)<=TeethJawDiff(-1) et TeethJawDiff(-1)<=TeethJawDiff(0) ; vérification de l'augmentation de la différence entre les lignes des Dents et de la Mâchoire ;
- TeethJawDiff(0) <=0.0 ; la ligne des Dents de la barre actuelle est inférieure à la ligne de la Mâchoire ;
//+------------------------------------------------------------------+ //| Vérifie les conditions d'ouverture d'une position courte (vente) | //+------------------------------------------------------------------+ bool CSignalAlligator::CheckOpenShort(double& prix,double& sl,double& tp,datetime& expiration) { if(CheckCross()) return(false); //--- prix=0.0 ; sl =0.0 ; tp =0.0 ; //--- if(LipsTeethDiff(-2)<=LipsTeethDiff(-1) && LipsTeethDiff(-1)<= LipsTeethDiff(0) && LipsTeethDiff(0)<=0.0 && TeethJawDiff(-2) <=TeethJawDiff(-1) && TeethJawDiff(-1) <=TeethJawDiff(0) && TeethJawDiff(0) <=0.0) m_crossed=true ; //--- return(m_crossed); }
4. Fermeture d'une position courte
Conditions pour fermer une position courte :
- LèvresDiff.dents(-1)>0 ; la ligne des Lèvres de la barre suivante (à cause du décalage) est plus haute que la ligne des Dents ;
- LipsTeethDiff(0)<=0; la ligne des Lèvres de la barre actuelle est inférieure/égale à la ligne des Dents ;
- LèvresDentsDiff(1)<0; la ligne des Lèvres de la barre précédente (complétée) est plus basse que la ligne des Dents.
//+------------------------------------------------------------------+ //| Vérifie les conditions pour fermer la position courte | //+------------------------------------------------------------------+ bool CSignalAlligator::CheckCloseShort(double& prix) { prix=0.0 ; //--- return(LipsTeethDiff(-1)>0 && LipsTeethDiff(0)<=0 && LipsTeethDiff(1)<0); }
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 l'Alligator" dans l'option "Créer des Expert Advisors prêts à l'emploi" de l'Assistant MQL5 :
Figure 2. Sélectionnez "Signaux basés sur l'Alligator" 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, JawPeriod=13, JawShift=8, TeethPeriod=8, TeethShift=5, LipsPeriod=5, LipsShift=3, MaMethod =2, Appliqué=5, CrossMeasure=5).
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 l'indicateur Alligator
Le profit peut être augmenté si vous utilisez le filtrage des transactions et tenez compte des caractéristiques du marché, en fonction du temps. La classe CSignalITF vous permettra d'ajouter le filtre horaire intraday. Les meilleurs temps peuvent être trouvés en utilisant le Testeur de stratégie du terminal client MetaTrader 5. Voir l'exemple dans Assistant MQL5 - Signaux de Trading Basés sur le Croisement de deux EMA avec Filtre de temps intraday.
Pièces jointes : La classe SignalAlligator.mqh avec CSignalAlligator doit être placée dans le dossier terminal_data_folder\MQL5\Include\Expert\Signal.
Le fichier expert_alligator.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/267

Les signaux de trading basés sur le croisement des prix de deux moyennes mobiles lissées de manière exponentielle en intraday 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.

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.

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.

Les signaux de trading basés sur le modèle de chandelier "3 Black Crows/3 White Soldiers", confirmés par l'indicateur stochastique, 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.