MQL5 Wizard permet de créer automatiquement des Systèmes de Trading (ou Expert Advisors) sans programmation (voir MQL5 Wizard : Créer des Systèmes de Trading sans Programmer).
La classe CSignalCandles génère des signaux de trading basés sur des modèles de chandeliers inversés. La stratégie s'appelle "Signaux basés sur des modèles de chandeliers inversés" lors de la création automatique d'un EA dans MQL5 Wizard.
L'idée de ce système est d'identifier les modèles de retournement en calculant la bougie composite. Ces modèles de retournement sont similaires aux modèles "Hammer" et "Hanging Man" dans l'analyse des chandeliers japonais, mais utilisent une bougie composite au lieu de bougies individuelles et ne nécessitent pas d'un petit corps de bougie composite pour confirmer le retournement.
Voici les paramètres d'entrée :
- Range - le nombre maximal de bougies utilisé dans le calcul de la bougie composite.
- Minimum - la taille minimale de la bougie composite (en points conventionnels).
- ShadowBig et ShadowSmall - les ombres (en unités de bougie composite).
- Limit, StopLoss et TakeProfit - les niveaux de prix d'ouverture, SL et TP, définis par rapport au prix de clôture de la bougie composite (unités de bougie composite).
- Expiration - temps d'expiration de l'ordre (en bougies), utilisé pour le trading avec des ordres en attente (Limit!=0.0).
Les modèles de chandeliers inversés sont déterminés de la manière suivante.
On calcule les paramètres de la bougie composite à partir de la dernière bougie complétée (avec un index de 1) jusqu'au nombre de bougies défini par le paramètre d'entrée Range. Si la taille de la bougie composite est supérieure à la valeur spécifiée par le paramètre Minimum, on vérifie les conditions de retournement de la bougie composite en analysant ses ombres.
La puissance des baissiers est caractérisée par la taille de l'ombre supérieure de la bougie composite, tandis que la puissance des haussiers est caractérisée par la taille de l'ombre inférieure.
- Pour confirmer le retournement de la tendance baissière (et le début de la tendance haussière), il est nécessaire que la taille de l'ombre inférieure (puissance des haussiers) soit supérieure à la valeur définie par le paramètre ShadowBig. La taille de l'ombre supérieure (puissance des baissiers) doit être inférieure à la valeur définie par le paramètre ShadowSmall.
- Pour confirmer le retournement de la tendance haussière (et le début de la tendance baissière), il est nécessaire que la taille de l'ombre supérieure (puissance des baissiers) soit supérieure à la valeur définie par le paramètre ShadowBig. La taille de l'ombre inférieure (puissance des haussiers) doit être inférieure à la valeur définie par le paramètre ShadowSmall.
En plus de la stratégie de retournement, il est possible d'utiliser des stratégies de cassure en spécifiant une valeur négative pour le paramètre Limit (voir MQL5 Wizard - Signaux de Trading Basés sur le Croisement de Deux EMA avec un Filtre Temporel Intraday).
Selon la valeur de Limit, trois manières différentes d'entrer sur le marché sont utilisées :
- Limit>0. Cela entrera sur un mouvement de retour sur le prix, meilleur que le prix du marché (des ordres en attente Buy Limit ou Sell Limit seront placés selon le signal de trading).
- Limit<0. Cela entrera dans la direction du mouvement du prix (des ordres en attente Buy Stop ou Sell Stop seront utilisés selon le signal de trading).
- Limit=0. Cela se fera en utilisant les prix du marché.
Cette stratégie est mise en œuvre dans la classe CSignalCandles.

Figure 1. Signaux de trading, basés sur des modèles de chandeliers inversés
Signaux de Trading
Les signaux de trading sont implémentés dans la classe CSignalCandles. Il y a une fonction Candle(), utilisée pour l'analyse :
int Candle(int ind); // Renvoie un nombre positif/négatif en fonction du type de la bougie composite // la valeur retournée est le nombre de bougies dans la bougie composite (à partir de ind)
Plusieurs bougies (barres) peuvent être utilisées dans la construction de la bougie composite. Le nombre minimal de bougies est défini par le paramètre Range. Dans certains cas, la bougie composite peut être formée avec moins de bougies que Range (lorsque les conditions de taille/ombres sont satisfaites). La fonction Candle renvoie 0 si la bougie composite ne peut pas être formée.
1. Ouvrir une position longue
Pour ouvrir une position longue, il faut une bougie composite haussière. La fonction vérifie cela et renvoie si la bougie composite n'est pas encore formée ou si elle est baissière. Sinon, elle calcule la taille de la bougie composite (nécessaire pour le calcul du prix, SL et TP) et détermine les niveaux de prix pour l'ordre en attente.
Notez que le type d'ordre en attente (Buy Limit ou Buy Stop) dépend du signe du paramètre Limit (si Limit=0 ou |prix-ask|<niveau d'arrêts, un ordre d'achat au marché sera placé, si Limit>0, un ordre d'achat Buy Limit sera placé, si Limit<0, un ordre d'achat Buy Stop sera placé).
//+------------------------------------------------------------------+ //| Vérifie les conditions pour ouvrir une position longue (achat) | //+------------------------------------------------------------------+ bool CSignalCandles::CheckOpenLong(double& price,double& sl,double& tp,datetime& expiration) { //--- vérifie la formation de la bougie composite haussière if(Candle(1)<=0) return(false); //--- obtient la taille de la bougie composite double size=m_high_composite-m_low_composite; //--- calcule le prix de l'ordre en attente price=m_symbol.NormalizePrice(m_symbol.Ask()-m_limit*size); //--- calcule le prix Stop Loss sl =m_symbol.NormalizePrice(price-m_stop_loss*size); //--- calcule le prix Take Profit tp =m_symbol.NormalizePrice(price+m_take_profit*size); //--- définit le temps d'expiration de l'ordre expiration+=m_expiration*PeriodSeconds(m_period); //--- les conditions sont satisfaites, retourne vrai return(true); }
2. Fermer une position longue
Si la bougie composite baissière est formée, la position longue est fermée.
//+------------------------------------------------------------------+ //| Vérifie les conditions pour fermer une position longue |//+------------------------------------------------------------------+ bool CSignalCandles::CheckCloseLong(double& price) { //--- vérifie la formation de la bougie composite baissière if(Candle(1)>=0) return(false); //--- price=0.0; //--- les conditions sont satisfaites, retourne vrai return(true); }
3. Ouvrir une position courte
Pour ouvrir une position courte, une bougie composite baissière doit être formée. Si la bougie composite n'est pas formée, ou si elle n'est pas baissière, on retourne. Sinon, on détermine sa taille et calcule les niveaux de prix de l'ordre en attente (le type d'ordre dépend du signe du paramètre Limit, voir "Ouvrir une position longue").
//+------------------------------------------------------------------+ //| Vérifie les conditions pour ouvrir une position courte (vente) | //+------------------------------------------------------------------+ bool CSignalCandles::CheckOpenShort(double& price,double& sl,double& tp,datetime& expiration) { //--- vérifie la formation de la bougie composite baissière if(Candle(1)>=0) return(false); //--- obtient la taille de la bougie composite double size=m_high_composite-m_low_composite; //--- calcule le prix de l'ordre en attente price=m_symbol.NormalizePrice(m_symbol.Bid()+m_limit*size); //--- calcule le prix Stop Loss sl =m_symbol.NormalizePrice(price+m_stop_loss*size); //--- calcule le prix Take Profit tp =m_symbol.NormalizePrice(price-m_take_profit*size); //--- définit le temps d'expiration de l'ordre expiration+=m_expiration*PeriodSeconds(m_period); //--- les conditions sont satisfaites, retourne vrai return(true); }
4. Fermer une position courte
Si la bougie composite haussière est formée, la position courte est fermée.
//+------------------------------------------------------------------+ //| Vérifie les conditions pour fermer une position courte |//+------------------------------------------------------------------+ bool CSignalCandles::CheckCloseShort(double& price) { //--- vérifie la formation de la bougie composite haussière if(Candle(1)<=0) return(false); //--- price=0.0; //--- les conditions sont satisfaites, retourne vrai return(true); }
Créer un Expert Advisor avec MQL5 Wizard
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 des modèles de chandeliers inversés" dans l'option "Création d'Experts Conseillers Prêts" de MQL5 Wizard :

Figure 2. Sélectionner "Signaux basés sur des modèles de chandeliers inversés dans MQL5 Wizard
Ensuite, vous devrez spécifier l'algorithme de trailing stop et le système de gestion des risques et de l'argent nécessaires. Le code de l'Expert Advisor sera créé automatiquement, vous pourrez le compiler et le tester dans le Strategy Tester de la plateforme MetaTrader 5.
Résultats des Tests
Considérons le backtesting de l'Expert Advisor sur des données historiques (EURUSD M15, période de test : 1.1.2010-05.01.2011, Range=3, Minimum=50, ShadowBig=0.5, ShadowSmall=0.2, Limit=0, StopLoss=2.0, TakeProfit=1.0, Expiration=4).
Pour la création de l'Expert Advisor, nous avons utilisé un volume fixe (Trading Fixed Lot, 0.1), l'algorithme de Trailing Stop n'est pas utilisé (Trailing non utilisé).

Figure 3. Résultats des Tests de l'Expert Advisor avec des signaux de trading basés sur des modèles de chandeliers inversés
Pièces jointes : Le fichier SignalCandles.mqh avec la classe CSignalCandles doit être placé dans le dossier terminal_data_folder\MQL5\Include\Expert\Signal.
Le fichier expert_candles.mq5 contient le code de l'Expert Advisor créé avec MQL5 Wizard.
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
- Générer des Signaux de Trading avec MQL5 Wizard : Étoiles du Matin/du Soir et RSI
- MQL5 Wizard : Créez un Expert Advisor avec des Signaux de Trading Basés sur les Étoiles du Matin et du Soir + Stochastique
- Utiliser MQL5 Wizard pour des Signaux de Trading Basés sur les Étoiles du Matin/du Soir + MFI