Le MQL5 Wizard facilite la création d'Experts Advisors prêts à l'emploi en utilisant les classes de la bibliothèque standard fournies avec le terminal client. Cela vous permet de tester rapidement vos idées de trading, il vous suffit de créer votre propre classe de signaux de trading. La structure de cette classe et un exemple sont disponibles dans l'article MQL5 Wizard : Comment Créer un Module de Signaux de Trading.
L'idée générale est la suivante : la classe des signaux de trading est dérivée de CExpertSignal. Ensuite, il faut remplacer les méthodes virtuelles LongCondition() et ShortCondition() par vos propres méthodes.
Dans le livre "Stratégies des meilleurs traders" (en russe), de nombreuses stratégies de trading sont abordées, et nous nous concentrerons sur les modèles de chandeliers de retournement, confirmés par Stochastique, CCI, MFI et RSI.
La meilleure approche consiste à créer une classe distincte, dérivée de CExpertSignal, pour vérifier la formation des modèles de chandeliers. Pour confirmer les signaux de trading générés par les modèles de chandeliers, il suffit de rédiger la classe, dérivée de CCandlePattern, et d'y ajouter les fonctionnalités nécessaires (par exemple, la confirmation par les oscillateurs).
Dans cet article, nous allons examiner les signaux basés sur les modèles de chandeliers de retournement "Dark Cloud Cover" et "Piercing Line", confirmés par l'indicateur CCI. Le module de signaux de trading est basé sur la classe CCandlePattern, c'est un exemple simple de son utilisation pour créer des signaux de trading avec des modèles de chandeliers.
1. Modèles de chandeliers de retournement : "Dark Cloud Cover" et "Piercing Line"
1.1. Dark Cloud Cover
Il s'agit d'un modèle de retournement baissier qui se produit à la fin d'une tendance haussière. Un long chandelier blanc se forme le premier jour et un gap à la hausse est créé le deuxième jour. Cependant, le deuxième jour se clôture en dessous du point médian du premier jour.

Fig. 1. Modèle de chandelier "Dark Cloud Cover"
La reconnaissance du modèle "Dark Cloud Cover" est réalisée dans la méthode CheckPatternDarkCloudCover() de la classe CCandlePattern :
//+------------------------------------------------------------------+ //| Vérifie la formation du modèle de chandelier "Dark Cloud Cover" | //+------------------------------------------------------------------+ bool CCandlePattern::CheckPatternDarkCloudCover() { //--- Dark Cloud Cover if((Close(2)-Open(2)>AvgBody(1)) && // (long blanc) (Close(1)<Close(2)) && // (Close(1)>Open(2)) && // (clôture dans le corps précédent) (MidOpenClose(2)>CloseAvg(1)) && // (tendance haussière) (Open(1)>High(2))) // (ouverture à un nouveau sommet) return(true); //--- return(false); }
La méthode CheckCandlestickPattern(CANDLE_PATTERN_DARK_CLOUD_COVER) de la classe CCandlePattern est utilisée pour vérifier la formation du modèle de chandelier "Dark Cloud Cover".
1.2. Piercing Line
Le gap à la baisse du deuxième jour perpétue la tendance à la baisse. Cependant, la clôture du deuxième jour est au-dessus du point médian du corps du premier jour. Cela suggère aux baissiers qu'un creux pourrait se former. Cette action des prix n'est pas aussi discernable sur les graphiques en barres que sur les graphiques en chandeliers. Plus la pénétration de la clôture du deuxième jour dans le corps du premier jour est importante, plus le signal de retournement a de chances de réussir.

Fig. 2. Modèle de chandelier "Piercing Line"
La reconnaissance du modèle "Piercing Line" est réalisée dans la méthode CheckPatternPiercingLine() de la classe CCandlePattern :
//+------------------------------------------------------------------+ //| Vérifie la formation du modèle de chandelier "Piercing Line" | //+------------------------------------------------------------------+ bool CCandlePattern::CheckPatternPiercingLine() { //--- Piercing Line if((Close(1)-Open(1)>AvgBody(1)) && // (long blanc) (Open(2)-Close(2)>AvgBody(1)) && // (long noir) (Close(1)>Close(2)) && // (Close(1)<Open(2)) && // (clôture à l'intérieur du corps précédent) (MidOpenClose(2)<CloseAvg(2)) && // (tendance à la baisse) (Open(1)<Low(2))) // (ouverture en dessous du précédent bas) return(true); //--- return(false); }
La méthode CheckCandlestickPattern(CANDLE_PATTERN_PIERCING_LINE) de la classe CCandlePattern est utilisée pour vérifier la formation du modèle de chandelier "Piercing Line".
2. Signaux de Trading Confirmés par l'Indicateur CCI
Les signaux de trading pour ouvrir des positions longues ou courtes doivent être confirmés par l'indicateur CCI. La valeur du CCI doit être supérieure ou inférieure aux niveaux critiques (-50 pour une position longue et 50 pour une position courte).
La clôture des positions ouvertes dépend des valeurs du CCI. Cela peut se faire dans 2 cas :
- si la ligne CCI a atteint le niveau critique opposé (80 pour une position longue et -80 pour une position courte)
- si le signal inverse n'est pas confirmé (lorsque le CCI atteint les niveaux suivants : -80 pour une position longue et 80 pour une position courte)

Fig. 3. Modèle "Dark Cloud Cover", confirmé par l'indicateur CCI
- int CDC_PL_CCI::LongCondition() - vérifie les conditions pour ouvrir une position longue (retourne 80) et pour clôturer la position courte (retourne 40);
- int CDC_PL_CCI::ShortCondition() - vérifie les conditions pour ouvrir une position courte (retourne 80) et pour clôturer la position longue (retourne 40).
2.1. Ouvrir une position longue/Fermer une position courte
La formation du modèle "Piercing Line" doit être confirmée par l'indicateur CCI : CCI(1)<-50 (la valeur du CCI de la dernière barre complétée doit être inférieure à -50).
La position courte doit être fermée si l'indicateur CCI a franchi à la hausse le niveau critique -80 ou a franchi à la baisse le niveau critique de 80.
//+------------------------------------------------------------------+ //| Vérifie les conditions d'entrée et de sortie du marché | //| 1) Entrée sur le marché (ouverture d'une position longue, résultat=80) | //| 2) Sortie du marché (fermeture de la position courte, résultat=40) | //+------------------------------------------------------------------+ int CDC_PL_CCI::LongCondition() { int result=0; //--- idx peut être utilisé pour déterminer le mode de fonctionnement de l'Expert Advisor //--- idx=0 - dans ce cas, l'EA vérifie les conditions de trading à chaque tick //--- idx=1 - dans ce cas, l'EA vérifie les conditions de trading uniquement aux nouvelles barres int idx =StartIndex(); //--- vérification des conditions pour ouvrir une position longue //--- formation du modèle de Piercing Line et CCI<-50 if(CheckCandlestickPattern(CANDLE_PATTERN_PIERCING_LINE) && (CCI(1)<-50)) result=80; //--- vérification des conditions pour fermer une position courte //--- croisement de la ligne de signal des niveaux de surachat/survente (à la baisse -80, à la baisse -80) if(((CCI(1)>-80) && (CCI(2)<-80)) || ((CCI(1)<80) && (CCI(2)>80))) result=40; //--- retour du résultat return(result); }
2.2. Ouvrir une position courte/Fermer une position longue
La formation du modèle "Dark Cloud Cover" doit être confirmée par l'indicateur CCI : CCI(1)>50 (la valeur de l'indicateur CCI de la dernière barre complétée doit être supérieure à 50).
La position longue doit être fermée si l'indicateur CCI a franchi à la baisse le niveau -80 ou 80.
//+------------------------------------------------------------------+ //| Vérifie les conditions d'entrée et de sortie du marché | //| 1) Entrée sur le marché (ouverture d'une position courte, résultat=80) | //| 2) Sortie du marché (fermeture d'une position longue, résultat=40) | //+------------------------------------------------------------------+ int CDC_PL_CCI::ShortCondition() { int result=0; //--- idx peut être utilisé pour déterminer le mode de fonctionnement de l'Expert Advisor //--- idx=0 - dans ce cas, l'EA vérifie les conditions de trading à chaque tick //--- idx=1 - dans ce cas, l'EA vérifie les conditions de trading uniquement aux nouvelles barres int idx =StartIndex(); //--- vérification des conditions pour ouvrir une position courte //--- formation du modèle de Dark Cloud Cover et CCI>50 if(CheckCandlestickPattern(CANDLE_PATTERN_DARK_CLOUD_COVER) && (CCI(1)>50)) result=80; //--- vérification des conditions pour fermer une position longue //--- croisement de la ligne de signal des niveaux de surachat/survente (à la baisse -80, à la baisse 80) if(((CCI(1)<80) && (CCI(2)>80)) || ((CCI(1)<-80) && (CCI(2)>-80))) result=40; //--- retour du résultat return(result); }
2.3. Création d'un Expert Advisor avec MQL5 Wizard
La classe CDC_PL_CCI n'est pas incluse dans les classes de la bibliothèque standard. Pour l'utiliser, vous devez télécharger le fichier acdc_pl_cci.mqh (voir les pièces jointes) et l'enregistrer dans le dossier client_terminal_data\MQL5\Include\Expert\Signal\MySignals. Vous devez faire la même chose avec le fichier candlepatterns.mqh. Vous pourrez l'utiliser dans MQL5 Wizard après le redémarrage de MetaEditor.
Pour créer un Expert Advisor, lancez le MQL5 Wizard :

Fig. 4. Création d'un Expert Advisor avec MQL5 Wizard
Indiquons le nom de l'Expert Advisor :

Fig. 5. Propriétés générales de l'Expert Advisor
Ensuite, nous devons sélectionner les modules de signaux de trading utilisés.

Fig. 6. Propriétés des signaux de l'Expert Advisor
Dans notre cas, nous n'utilisons qu'un seul module de signaux de trading.
Ajoutons le module "Signaux basés sur Dark Cloud Cover/Piercing Line confirmés par CCI" :

Fig. 7. Propriétés des signaux de l'Expert Advisor
Module de signaux de trading ajouté :

Fig. 8. Propriétés des signaux de l'Expert Advisor
Vous pouvez sélectionner toutes les propriétés de trailing, mais nous allons utiliser "Trailing Stop non utilisé" :

Fig. 9. Propriétés de trailing de l'Expert Advisor
Concernant les propriétés de gestion de l'argent, nous allons utiliser "Trading avec un volume de trade fixe" :

Fig. 10. Propriétés de gestion de l'argent de l'Expert Advisor
En appuyant sur le bouton "Terminer", nous obtiendrons le code de l'Expert Advisor généré, situé dans Expert_ADC_PL_CCI.mq5, qui sera enregistré dans terminal_data_folder\MQL5\Experts\.
Les paramètres d'entrée par défaut de l'Expert Advisor généré :
//--- entrées pour le signal principal input int Signal_ThresholdOpen =10; // Valeur de seuil du signal pour ouvrir [0...100] input int Signal_ThresholdClose =10; // Valeur de seuil du signal pour fermer [0...100] input double Signal_PriceLevel =0.0; // Niveau de prix pour exécuter un deal input double Signal_StopLevel =50.0; // Niveau de Stop Loss (en points) input double Signal_TakeLevel =50.0; // Niveau de Take Profit (en points)
doit être remplacé par :
//--- entrées pour le signal principal input int Signal_ThresholdOpen =40; // Valeur de seuil du signal pour ouvrir [0...100] input int Signal_ThresholdClose =20; // Valeur de seuil du signal pour fermer [0...100] input double Signal_PriceLevel =0.0 // Niveau de prix pour exécuter un deal input double Signal_StopLevel =0.0 // Niveau de Stop Loss (en points) input double Signal_TakeLevel =0.0 // Niveau de Take Profit (en points)
Les paramètres d'entrée Signal_ThresholdOpen/Signal_ThresholdClose permettent de spécifier les niveaux de seuil pour l'ouverture et la fermeture des positions.
Dans le code des méthodes LongCondition() et ShortCondition() de la classe des signaux de trading, nous avons spécifié les valeurs fixes des seuils :
- Ouvrir une position : 80 ;
- Fermer une position : 40.
L'Expert Advisor, généré par le MQL5 Wizard, ouvre et ferme des positions en utilisant les "votes" des modules de signaux de trading. Le vote du module principal (en tant que conteneur, il se compose de tous les modules ajoutés) est également utilisé, mais ses méthodes LongCondition() et ShortCondition() renvoient toujours 0.
Les résultats des votes du module principal sont également utilisés dans l'average des votes. Dans notre cas, nous avons : module principal + 1 module de signaux de trading, donc nous devons prendre ce fait en compte lors du réglage des valeurs de seuil. À cause de ce fait, les ThresholdOpen et ThresholdClose doivent être définis à 40=(0+80)/2 et 20=(0+40)/2.
Les valeurs des paramètres d'entrée Signal_StopLevel et Signal_TakeLevel sont définies à 0, ce qui signifie que la fermeture des positions ne sera effectuée que lorsque les conditions de fermeture seront vraies.
2.4. Résultats des tests de backtesting
Considérons le backtesting de l'Expert Advisor sur des données historiques (EURUSD H1, période de test : 2010.01.01-2011.03.16, 2010.01.01-2011.03.16, PeriodCCI=15, MA_period=19).
Pour la création de l'Expert Advisor, nous avons utilisé le volume fixe (Trading Fixed Lot, 0.1), l'algorithme de Trailing Stop n'est pas utilisé (Trailing not used).

Fig. 11. Résultats des tests de l'Expert Advisor, basé sur Dark Cloud Cover/Piercing Line + CCI
Le meilleur ensemble de paramètres d'entrée peut être trouvé en utilisant le Strategy Tester du terminal client MetaTrader 5.
Le code de l'Expert Advisor, créé par le MQL5 Wizard, est joint dans expert_adc_pl_cci.mq5.
Articles connexes
- Utiliser MQL5 Wizard pour Créer un Expert Advisor Basé sur les Modèles de Chandeliers Englobants et MFI
- Développez un Expert Advisor avec MQL5 : Signaux de Trading 3 Corbeaux Noirs / 3 Soldats Blancs + RSI
- Découvrez l'Expert Advisor exp_iCustom_v5 pour MetaTrader 4
- Découvrez le Système de Trading Exp_XPeriodCandle_X2 pour MetaTrader 5
- Découvrez CoensioTrader1V06 : Votre nouvel allié sur MetaTrader 5