Le MQL5 Wizard vous permet de créer des Conseillers Experts prêts à l'emploi basés sur les classes de la bibliothèque standard fournies avec le terminal client. Cela vous permet de rapidement vérifier vos idées de trading, il vous suffit de créer votre propre classe de signaux de trading. La structure de cette classe ainsi qu'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 de signaux de trading est dérivée de CExpertSignal. Ensuite, il est nécessaire de redéfinir les méthodes virtuelles LongCondition() et ShortCondition() avec vos propres méthodes.
Il existe un livre intitulé "Stratégies des meilleurs traders" (en russe), où de nombreuses stratégies de trading sont abordées. Nous allons nous concentrer sur les motifs de chandeliers de retournement, confirmés par les oscillateurs 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 motifs de chandeliers. Pour confirmer les signaux de trading générés par les motifs de chandeliers, il suffit d'écrire une classe, dérivée de CCandlePattern, et d'y ajouter les caractéristiques nécessaires (par exemple, confirmation par les oscillateurs).
Nous allons examiner les signaux basés sur le motif de retournement "3 Corbeaux Noirs/3 Soldats Blancs", confirmé par l'indicateur Commodity Channel Index. Le module de signaux de trading est basé sur la classe CCandlePattern, c'est un exemple simple de son utilisation pour la création de signaux de trading avec des motifs de chandeliers.
1. Motifs de chandeliers de retournement "3 Corbeaux Noirs" et "3 Soldats Blancs"
1.1. 3 Corbeaux Noirs
Un motif de chandelier baissier utilisé pour prédire le retournement de la tendance haussière actuelle. Ce motif est constitué de trois chandeliers consécutifs à corps long qui se sont fermés en dessous du jour précédent, chaque ouverture ayant lieu à l'intérieur du corps de la bougie précédente.

Fig. 1. Motif de chandelier "3 Corbeaux Noirs"
La reconnaissance du motif "3 Corbeaux Noirs" est implémentée dans la méthode CheckPatternThreeBlackCrows de la classe CCandlePattern :
//+------------------------------------------------------------------+ //| Vérifie la formation du motif de chandelier "3 Corbeaux Noirs" | //+------------------------------------------------------------------+ bool CCandlePattern::CheckPatternThreeBlackCrows() { //--- 3 Corbeaux Noirs if((Open(3)-Close(3)>AvgBody(1)) && // (long noir) (Open(2)-Close(2)>AvgBody(1)) && (Open(1)-Close(1)>AvgBody(1)) && (MidPoint(2)<MidPoint(3)) && // (midpoints inférieurs) (MidPoint(1)<MidPoint(2))) return(true); //--- return(false); }
La méthode CheckCandlestickPattern(CANDLE_PATTERN_THREE_BLACK_CROWS) de la classe CCandlePattern est utilisée pour vérifier la formation du motif de chandelier "3 Corbeaux Noirs".
1.2. 3 Soldats Blancs
Un motif de chandelier haussier qui est utilisé pour prédire le retournement de la tendance baissière actuelle. Ce motif consiste également en trois chandeliers consécutifs à corps long qui se sont fermés au-dessus du jour précédent, chaque ouverture ayant lieu à l'intérieur du corps de la bougie précédente.
Le motif est valide tant que la bougie du deuxième jour s'ouvre dans la moitié supérieure de l'intervalle du premier jour. À la fin du deuxième jour, elle doit se fermer près de son sommet, laissant une très petite ombre supérieure ou aucune. Le même motif se répète alors le troisième jour.

Fig. 2. Motif de chandelier "3 Soldats Blancs"
Voici la méthode de reconnaissance du motif "3 Soldats Blancs" :
//+------------------------------------------------------------------+ //| Vérifie la formation du motif de chandelier "3 Soldats Blancs" | //+------------------------------------------------------------------+ bool CCandlePattern::CheckPatternThreeWhiteSoldiers() { //--- 3 Soldats Blancs if((Close(3)-Open(3)>AvgBody(1)) && // long blanc (Close(2)-Open(2)>AvgBody(1)) && (Close(1)-Open(1)>AvgBody(1)) && (MidPoint(2)>MidPoint(3)) && // midpoints supérieurs (MidPoint(1)>MidPoint(2))) return(true); //--- return(false); }
La méthode CheckCandlestickPattern(CANDLE_PATTERN_THREE_WHITE_SOLDIERS) de la classe CCandlePattern est utilisée pour vérifier la formation du motif de chandelier "3 Soldats Blancs".
2. Signaux de trading, confirmés par l'indicateur CCI
Les signaux de trading pour ouvrir une position longue ou courte 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 fermeture de la position ouverte 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. Motif "3 Corbeaux Noirs", confirmé par l'indicateur CCI
- int CBC_WS_CCI::LongCondition() - vérifie les conditions pour ouvrir une position longue (retourne 80) et fermer la position courte (retourne 40);
- int CBC_WS_CCI::ShortCondition() - vérifie les conditions pour ouvrir une position courte (retourne 80) et fermer la position longue (retourne 40).
2.1. Ouvrir une position longue/Fermer une position courte
La formation du motif "3 Corbeaux Noirs" 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 franchi à la baisse le niveau critique 80.
//+------------------------------------------------------------------+ //| Vérifie les conditions d'entrée et de sortie du marché | //| 1) Entrée sur le marché (ouvrir position longue, résultat=80) | //| 2) Sortie du marché (fermer position courte, résultat=40) | //+------------------------------------------------------------------+ int CBC_WS_CCI::LongCondition() { int result=0; //--- idx peut être utilisé pour déterminer le mode de fonctionnement du Conseiller Expert //--- idx=0 - dans ce cas, le CA vérifie les conditions de trading à chaque tick //--- idx=1 - dans ce cas, le CA vérifie les conditions de trading uniquement à la barre de news int idx =StartIndex(); //--- vérification des conditions pour ouvrir une position longue //--- formation du motif 3 Soldats Blancs et CCI<-50 if(CheckCandlestickPattern(CANDLE_PATTERN_THREE_WHITE_SOLDIERS) && (CCI(1)<-50)) result=80; //--- vérification des conditions pour fermer la position courte //--- croisement de niveau de surachat/survente (à la baisse -80, à la baisse -80) if(((CCI(1)>-80) && (CCI(2)<-80)) || ((CCI(1)<80) && (CCI(2)>80))) result=40; //--- retourner le résultat return(result); }
2.2. Ouvrir une position courte/Fermer une position longue
La formation du motif "3 Soldats Blancs" 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 supérieure à 50).
La position longue doit être fermée si l'indicateur CCI a franchi à la baisse les niveaux -80 ou 80.
//+------------------------------------------------------------------+ //| Vérifie les conditions d'entrée et de sortie du marché | //| 1) Entrée sur le marché (ouvrir position courte, résultat=80) | //| 2) Sortie du marché (fermer position longue, résultat=40) | //+------------------------------------------------------------------+ int CBC_WS_CCI::ShortCondition() { int result=0; //--- idx peut être utilisé pour déterminer le mode de fonctionnement du Conseiller Expert //--- idx=0 - dans ce cas, le CA vérifie les conditions de trading à chaque tick //--- idx=1 - dans ce cas, le CA vérifie les conditions de trading uniquement à la barre de news int idx =StartIndex(); //--- vérification des conditions pour ouvrir une position courte //--- formation du motif 3 Corbeaux Noirs et CCI>50 if(CheckCandlestickPattern(CANDLE_PATTERN_THREE_BLACK_CROWS) && (CCI(1)>50)) result=80; //--- vérification des conditions pour fermer la position longue //--- croisement de niveau de surachat/survente (à la baisse -80, à la baisse 80) if(((CCI(1)<80) && (CCI(2)>80)) || ((CCI(1)<-80) && (CCI(2)>-80))) result=40; //--- retourner le résultat return(result); }
2.3. Création d'un Expert Advisor utilisant MQL5 Wizard
La classe CBC_WS_CCI n'est pas incluse dans les classes de la bibliothèque standard, pour l'utiliser, il est nécessaire de télécharger le fichier acbc_ws_cci.mqh (voir pièces jointes) et de le sauvegarder dans le dossier terminal_client_data\MQL5\Include\Expert\Signal\MySignals. La même chose doit être faite avec le fichier candlepatterns.mqh. Vous pouvez 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
Spécifions le nom de l'Expert Advisor :

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

Fig. 6. Propriétés de signaux de l'Expert Advisor
Dans notre cas, nous n'utilisons qu'un seul module de signaux de trading.
Ajout du module : Signaux basés sur 3 Corbeaux Noirs/3 Soldats Blancs confirmés par CCI :

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

Fig. 8. Propriétés de signaux de l'Expert Advisor
Vous pouvez sélectionner n'importe quelles 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 volume de transaction 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_ABC_WS_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 seuil du signal pour ouvrir [0...100] input int Signal_ThresholdClose =10; // Valeur seuil du signal pour fermer [0...100] input double Signal_PriceLevel =0.0; // Niveau de prix pour exécuter une affaire input double Signal_StopLevel =50.0; // Niveau de Stop Loss (en points) input double Signal_TakeLevel =50.0; // Niveau de Take Profit (en points)
doivent être remplacés par :
//--- entrées pour le signal principal input int Signal_ThresholdOpen =40; // Valeur seuil du signal pour ouvrir [0...100] input int Signal_ThresholdClose =20; // Valeur seuil du signal pour fermer [0...100] input double Signal_PriceLevel =0.0; // Niveau de prix pour exécuter une affaire 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 seuils pour l'ouverture et la fermeture des positions.
Dans le code des méthodes LongCondition() et ShortCondition() de la classe de signaux de trading, nous avons spécifié les valeurs fixes du seuil :
- Ouverture de position : 80;
- Fermeture de position : 40.
Le Conseiller Expert, généré par MQL5 Wizard, ouvre et ferme les 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() retournent 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 tenir compte de ce fait lors du réglage des valeurs seuils. À cause de cela, les ThresholdOpen et ThresholdClose doivent être définis comme 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 se fera uniquement 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, PeriodCCI=37, MA_period=13).
Dans 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 3 Corbeaux Noirs/3 Soldats Blancs + CCI
Le meilleur ensemble de paramètres d'entrée peut être trouvé à l'aide du Strategy Tester du terminal client MetaTrader 5.
Le code de l'Expert Advisor, créé par MQL5 Wizard, est joint dans expert_abc_ws_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
- GBP9AM : Un Expert pour MetaTrader 5 à Découvrir
- Découvrez le Système de Trading Exp_XPeriodCandle_X2 pour MetaTrader 5
- Découvrez l'Expert Advisor exp_iCustom_v5 pour MetaTrader 4