Le MQL5 Wizard est un outil précieux pour générer des Conseillers Experts (EA) prêts à l’emploi, basés sur les classes de la bibliothèque standard fournies avec le terminal client (voir Créer des Conseillers Experts dans MQL5 Wizard pour plus de détails). Grâce à cet outil, vous pouvez rapidement tester vos idées de trading en créant 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 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) qui présente de nombreuses stratégies de trading. Nous allons nous concentrer sur les motifs de chandeliers de retournement, confirmés par l'indicateur Stochastique, CCI, MFI et RSI oscillateurs.
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 fonctionnalités nécessaires (par exemple, confirmation par les oscillateurs).
Nous allons examiner les signaux basés sur le motif de chandelier de retournement "Hammer/Hanging Man", confirmés par l'indicateur Stochastique. Le module des signaux de trading repose sur la classe CCandlePattern, qui constitue un exemple simple d'utilisation pour créer des signaux de trading avec des motifs de chandeliers.
1. Motifs de chandelier de retournement "Hammer" et "Hanging Man"
1.1. Hammer
Le "Hammer" est un chandelier avec un petit corps et une longue mèche inférieure, formé après un mouvement de prix à la baisse. Le motif "Hammer" indique la fin d'une tendance baissière.
La couleur du corps du chandelier n'est pas importante, mais un hammer haussier indique un potentiel haussier supérieur. Le corps du motif "Hammer" se forme souvent près du minimum de la bougie précédente. Une mèche inférieure plus longue et une mèche supérieure plus courte augmentent le potentiel du motif de retournement.

Fig. 1. Motif de chandelier 'Hammer'
La reconnaissance du motif "Hammer" est mise en œuvre dans la méthode CheckPatternHammer() de la classe CCandlePattern :
//+------------------------------------------------------------------+ //| Vérifie la formation du motif "Hammer" chandelier | //+------------------------------------------------------------------+ bool CCandlePattern::CheckPatternHammer() { //--- Hammer if((MidPoint(1)<CloseAvg(2)) && // tendance baissière (MathMin(Open(1),Close(1)>(High(1)-(High(1)-Low(1))/3.0)) && // corps dans le 1/3 supérieur (Close(1)<Close(2)) && (Open(1)<Open(2))) // écart du corps return(true); //--- return(false); }
La méthode CheckCandlestickPattern(CANDLE_PATTERN_HAMMER) de la classe CCandlePattern est utilisée pour vérifier la formation du motif de chandelier "Hammer".
1.2. Hanging Man
Le "Hanging Man" est un chandelier avec un petit corps et une longue mèche inférieure, formé après un mouvement de prix à la hausse. Le motif "Hanging Man" indique la fin d'une tendance haussière.
La couleur du corps du chandelier n'est pas importante, mais une bougie baissière indique un potentiel baissier supérieur. Le corps du motif "Hanging Man" se forme souvent près du maximum de la bougie précédente. Une mèche inférieure plus longue et une mèche supérieure plus courte augmentent le potentiel du motif de retournement.

Fig. 2. Motif de chandelier 'Hanging Man'
La reconnaissance du motif "Hanging Man" est mise en œuvre dans la méthode CheckPatternHangingMan() de la classe CCandlePattern :
//+------------------------------------------------------------------+ //| Vérifie la formation du motif "Hanging Man" chandelier | //+------------------------------------------------------------------+ bool CCandlePattern::CheckPatternHangingMan() { //--- Hanging man if((MidPoint(1)>CloseAvg(2)) && // tendance haussière (MathMin(Open(1),Close(1)>(High(1)-(High(1)-Low(1))/3.0)) && // corps dans le 1/3 supérieur (Close(1)>Close(2)) && (Open(1)>Open(2)))) // écart du corps return(true); //--- return(false); }
La méthode CheckCandlestickPattern(CANDLE_PATTERN_HANGING_MAN) de la classe CCandlePattern est utilisée pour vérifier la formation du motif de chandelier "Hanging Man".
2. Signaux de trading, confirmés par l'indicateur Stochastique
Les signaux de trading pour ouvrir une position longue ou courte doivent être confirmés par l'oscillateur Stochastique. La ligne %D doit être supérieure ou inférieure aux niveaux critiques correspondants (30 ou 70).
La fermeture de positions ouvertes dépend des valeurs de l'indicateur %D. Cela peut se faire dans deux cas :
- si la ligne %D a atteint le niveau critique opposé (80 pour une position longue et 20 pour une position courte)
- si le signal inverse n'est pas confirmé (lorsque la ligne %D atteint les niveaux suivants : 20 pour une position longue et 80 pour une position courte)

Fig. 3. Motif 'Hammer', confirmé par l'indicateur Stochastique
- int CH_HM_Stoch::LongCondition() - vérifie les conditions pour ouvrir une position longue (retourne 80) et fermer une position courte (retourne 40);
- int CH_HM_Stoch::ShortCondition() - vérifie les conditions pour ouvrir une position courte (retourne 80) et fermer une position longue (retourne 40).
2.1. Ouvrir une position longue/Fermer une position courte
La formation du motif "Hammer" doit être confirmée par l'indicateur Stochastique : StochSignal(1)<30 (la valeur de la ligne de signal de l'indicateur Stochastique de la dernière bougie doit être inférieure à 30).
La position courte doit être fermée lorsque la ligne de signal de l'indicateur Stochastique a franchi à la hausse les niveaux 20 ou 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 CH_HM_Stoch::LongCondition() { int result=0; //--- idx peut être utilisé pour déterminer le mode de fonctionnement de l'EA //--- 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 bougies int idx =StartIndex(); //--- vérification des conditions pour ouvrir une position longue //--- formation du motif Hammer et ligne de signal<30 if (CheckCandlestickPattern(CANDLE_PATTERN_HAMMER) && (StochSignal(1)<30)) result=80; //--- vérification des conditions pour fermer une position courte //--- croisement de la ligne de signal des niveaux surachetés/survendus (vers le bas 20, vers le haut 80) if((((StochSignal(1)>20) && (StochSignal(2)<20)) || ((StochSignal(1)>80) && (StochSignal(2)<80)))) result=40; //--- retourner le résultat return(result); }
2.2. Ouvrir une position courte/Fermer une position longue
La formation du motif "Hanging Man" doit être confirmée par l'indicateur Stochastique : StochSignal(1)>70 (la valeur de la ligne de signal de l'indicateur Stochastique de la dernière bougie doit être supérieure à 70).
La position longue doit être fermée lorsque la ligne de signal de l'indicateur Stochastique a franchi à la baisse les niveaux 80 ou 20.
//+------------------------------------------------------------------+ //| 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 CH_HM_Stoch::ShortCondition() { int result=0; //--- idx peut être utilisé pour déterminer le mode de fonctionnement de l'EA //--- 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 bougies int idx =StartIndex(); //--- vérification des conditions pour ouvrir une position courte //--- formation du motif Hanging Man et ligne de signal>70 if (CheckCandlestickPattern(CANDLE_PATTERN_HANGING_MAN) && (StochSignal(1)>70)) result=80; //--- vérification des conditions pour fermer une position longue //--- croisement de la ligne de signal des niveaux surachetés/survendus (vers le bas 80, vers le haut 20) if((((StochSignal(1)<80) && (StochSignal(2)>80)) || ((StochSignal(1)<20) && (StochSignal(2)>20)))) result=40; //--- retourner le résultat return(result); }
2.3. Créer un Conseiller Expert avec MQL5 Wizard
La classe CH_HM_Stoch 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 ach_hm_stoch.mqh (voir pièces jointes) et de le sauvegarder dans le dossier client_terminal_data\MQL5\Include\Expert\Signal\MySignals. Il en va de même pour le fichier candlepatterns.mqh. Vous pourrez l'utiliser dans MQL5 Wizard après le redémarrage de MetaEditor.
Pour créer un Conseiller Expert, lancez le MQL5 Wizard:

Fig. 4. Création d'un Conseiller Expert avec MQL5 Wizard
Indiquons le nom du Conseiller Expert :

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

Fig. 6. Propriétés des signaux du Conseiller Expert
Dans notre cas, nous n'utilisons qu'un module de signaux de trading.
Ajout du module Signaux basés sur Hammer/Hanging Man confirmés par Stochastic :

Fig. 7. Propriétés des signaux du Conseiller Expert
Module de signaux de trading ajouté :

Fig. 8. Propriétés des signaux du Conseiller Expert
Vous pouvez sélectionner n'importe quelle propriété de trailing, mais nous allons utiliser "Trailing Stop non utilisé" :

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

Fig. 10. Propriétés de gestion de l'argent du Conseiller Expert
En appuyant sur le bouton "Terminer", nous obtiendrons le code du Conseiller Expert généré, situé dans Expert_AH_HM_Stoch.mq5, qui sera sauvegardé dans terminal_data_folder\MQL5\Experts\.
Les paramètres d'entrée par défaut du Conseiller Expert généré :
//--- entrées pour le signal principal input int Signal_ThresholdOpen =10; // Valeur du seuil de signal pour ouvrir [0...100] input int Signal_ThresholdClose =10 // Valeur du seuil de 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 du seuil de signal pour ouvrir [0...100] input int Signal_ThresholdClose =20 // Valeur du seuil de 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 seuils pour ouvrir et fermer 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 position : 80;
- Fermer position : 40.
Le Conseiller Expert, généré par MQL5 Wizard, ouvre et ferme des positions en utilisant les "votes" des modules de signaux de trading. Le vote du module principal (comme conteneur, il consiste en 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'averaging 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 seuils. À cause de cela, les ThresholdOpen et ThresholdClose doivent être réglés à 40=(0+80)/2 et 20=(0+40)/2.
Les valeurs des paramètres d'entrée Signal_StopLevel et Signal_TakeLevel sont réglées à 0, ce qui signifie que la fermeture des positions ne se fera que lorsque les conditions de fermeture seront vraies.
2.4. Résultats de backtesting historique
Examinons le backtesting du Conseiller Expert sur des données historiques (EURUSD H1, période de test : 01.01.2010-04.03.2011, PeriodK=47, PeriodD=9, PeriodSlow=13, MA_period=5).
Dans la création du Conseiller Expert, 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 de test du Conseiller Expert basé sur Hammer/Hanging Man + Stochastique
Le meilleur ensemble de paramètres d'entrée peut être trouvé en utilisant le Strategy Tester du terminal client MetaTrader 5.
Le code du Conseiller Expert, créé par MQL5 Wizard, est joint dans expert_ah_hm_stoch.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
- RRS Impulse : L'Expert EA Indispensable pour MetaTrader 4
- Découvrez l'Expert Advisor exp_iCustom_v5 pour MetaTrader 4
- MQL5 Wizard : Créez un Expert Advisor avec des Signaux de Trading Basés sur les Étoiles du Matin et du Soir + Stochastique