![Apprenez à concevoir un système de trading basé sur les Volumes](https://c.mql5.com/2/49/learnhow_volumes_600x314.jpg)
Apprenez à concevoir un système de trading basé sur les Volumes
Introduction
Bienvenue dans ce nouvel article de notre série sur l'apprentissage de la conception de systèmes de trading basés sur les indicateurs techniques les plus populaires. Voici un nouvel indicateur technique important, qui nous donne un aperçu d'une perspective différente sur le marché : l'indicateur Volumes. Nous couvrirons cet indicateur à travers les sujets suivants :
- Définition des Volumes
- Stratégie des Volumes
- Plan de la stratégie des Volumes
- Système de trading des Volumes
- Conclusion
Nous allons apprendre ici ce qu'est le volume et ce qu'il mesure. Nous allons découvrir comment nous pouvons l'utiliser en partageant quelques stratégies simples basées sur son concept. Nous apprendrons ensuite à concevoir un plan étape par étape pour chaque stratégie, afin de nous aider à progresser et à concevoir un système de trading basé sur celles-ci. Cette étape est très importante pour concevoir un système de trading. Nous en viendrons ensuite à la partie la plus intéressante, à savoir le système de trading Volumes. Nous apprendrons comment transformer tout ce que nous avons mentionné ,ou même toute nouvelle idée, en un système de trading en MQL5 pour générer automatiquement nos signaux sur la base de ces stratégies.
Nous utiliserons donc le langage MQL5 (MetaQuotes Language) qui est intégré au terminal de trading MetaTrader 5. Si vous voulez en savoir plus sur la façon de le télécharger et de l'utiliser, vous pouvez lire la rubrique Écrire du code MQL5 dans MetaEditor de l'article précédent pour plus d'informations. Il est également très utile pour votre apprentissage de mettre en pratique ce que vous apprenez. Cela améliorera et approfondira votre compréhension du sujet. La pratique est un facteur très important dans tout processus d'apprentissage.
Avertissement : Toutes les informations sont fournies "en l'état", uniquement à des fins d'information, et ne sont pas données à des fins de trading ou de conseil. Ces informations ne garantissent aucun résultat. Si vous utilisez le contenu de cet article sur l'un de vos comptes de trading, vous le faites à vos propres risques et vous en serez le seul responsable.
Nous allons maintenant pouvoir aborder nos sujets pour apprendre un nouvel outil utile pour notre trading.
Définition des Volumes
L'indicateur Volumes sur le marché du Forex indique le nombre de changements de prix pendant une période donnée, c'est-à-dire les volumes réellement négociés en identifiant les contrats, l'argent, les unités, etc. L'indicateur de volume peut nous donner une indication de l'offre et de la demande, ou une indication de la liquidité du marché. Ainsi, si le volume est élevé, cela indique l'importance de la demande en cas de hausse, ou de l'offre en cas de baisse. Nous pouvons dire que le volume est très utile car c’est une confirmation de la tendance. Si vous souhaitez en savoir plus sur les tendances, vous pouvez lire la section Définition de la tendance de l'un des articles précédents.
Le volume va de pair avec la tendance. Il s'agit d'un outil très utile à utiliser pour confirmer si le mouvement actuel sera fort ou pas. Il est préférable de voir le volume augmenter dans les mouvements haussiers d’une tendance haussière, et diminuer avec les corrections. Au cours d'une tendance baissière, le volume augmentera avec les mouvements de baisse et ce sera un signal significatif. Toutefois, nous pouvons parfois trouver ces mouvements à la baisse sans volume élevé, car les prix peuvent baisser sans volume. En d'autres termes, il n'est pas nécessaire de voir un volume élevé avec les mouvements de baisse dans une tendance baissière. En cas de correction haussière pendant une tendance baissière, le volume diminuera.
Le volume peut nous donner une indication de faiblesse dans la tendance actuelle en cas de divergences. Les divergences signifient que nous constatons que le volume se déplace dans la direction opposée au prix, ne confirmant pas sa direction.
Comme nous l'avons mentionné précédemment à propos de son calcul :
Sur le marché du Forex :
Volumes = le nombre de changements de prix au cours d'une période donnée
Sur le marché boursier :
Volume = le volume de transactions * prix
Exemple : si nous avons un volume d'échange de 1000 actions d'un titre au prix de 10$. Le volume sera :
Volume = 1000 * 10$ = 10.000$
Il y a une différence ici en raison de la décentralisation du marché du Forex, contrairement au marché boursier.
Nous n'avons pas besoin de le calculer manuellement car il est disponible dans MetaTrader 5. Il vous suffit de le choisir parmi les indicateurs proposés :
Insérer --> Indicateurs --> Volumes --> Volumes
Après avoir choisi l'indicateur Volumes de la même manière que l'étape 4 de la figure précédente, la fenêtre de l'indicateur de Volumes s'ouvre :
1. Couleur de la barre de volume en hausse
2. Couleur de la barre de volume en baisse
3. Volumes appliqués (Ticks ou Réels)
4. Épaisseur de la barre
Après avoir défini les paramètres précédents, il est attaché au graphique :
Le vert signifie que la barre actuelle est supérieure à la barre précédente. Le rouge signifie que la barre actuelle est inférieure à la précédente.
Stratégie des Volumes
Dans cette partie, nous allons mentionner les stratégies de volumes simples pour comprendre comment utiliser l'indicateur. Il est certain que ces stratégies ont besoin d'être optimisées, ce qui est normal puisque leur objectif principal est de comprendre comment l'indicateur des volumes peut être utilisé et comment concevoir un système de trading basé sur ses principes de base. Encore une fois, vous devez donc tester toutes ces stratégies avant de les utiliser sur votre compte réel.
- 1ère stratégie : Vol - Mouvement :
Pour cette stratégie, nous devons comparer la valeur actuelle du volume actuel à la valeur précédente pour décider du signal approprié. Si la valeur courante est supérieure à la précédente, ce sera un signal d'augmentation du volume. Si la valeur courante est inférieure à la précédente, ce sera un signal de baisse de volume.
Plus simplement,
Volume actuel > Volume précédent --> Les volumes ont augmenté
Volume actuel < Volume précédent --> Les volumes ont diminué
- 2ème stratégie : Vol - Force :
Pour cette stratégie, nous devons comparer la valeur actuelle du volume avec la moyenne des 5 valeurs précédentes pour décider de la force de cet indicateur. Si la valeur actuelle est supérieure à la moyenne, ce sera le signal d'un volume fort. Si la valeur actuelle est inférieure à la moyenne, ce sera le signal d'un volume faible.
Donc,
Volume actuel > Moyenne --> volume fort
Volume actuel < Moyenne --> volume faible
- 3ème stratégie : Prix & Vol - Tendance haussière :
Pour cette stratégie, nous comparerons le sommet actuel et le précédent au volume actuel et au volume précédent pendant une tendance haussière, pour décider s'il y a un signal d'achat ou non. Si le sommet actuel est supérieur au sommet précédent et que le volume actuel est supérieur au volume précédent, alors c’est un signal d'achat. Mais si le sommet actuel est supérieur au sommet précédent et que le volume actuel est inférieur au volume précédent, il n'y a pas de signal.
Plus haut actuel > plus haut précédent && volume actuel > volume précédent --> Signal d'achat pendant une tendance haussière
- 4ème stratégie : Prix & Vol - Tendance baissière :
Cette stratégie sera l'inverse de la précédente : pendant une tendance baissière, nous comparerons les plus bas actuel et précédent aux volumes actuel et précédent pour décider s'il y a un signal de vente à découvert ou s'il n'y a pas de signal. Si le plus bas actuel est inférieur au plus bas précédent et que le volume actuel est supérieur au volume précédent, alors c’est un signal de vente. Mais si le plus bas actuel est inférieur au plus bas précédent et que le volume actuel est également inférieur au volume précédent, il n'y a pas de signal.
Plus bas actuel < plus bas précédent && volume actuel > volume précédent --> Signal de vente pendant une tendance baissière.
- 5ème stratégie : Stratégie MM & Vol :
Pour cette stratégie, nous allons comparer deux périodes de Moyennes Mobiles : l'une courte et l'autre longue avec les volumes actuel et précédent pour décider s'il y a un signal d'achat ou de vente. Si la MM courte croise à la hausse la MM longue et qu’en même temps le volume actuel est supérieur au volume précédent, alors c’est un signal d'achat. Si la MM courte croise à la baisse la MM longue et qu’en même temps le volume actuel est supérieur au volume précédent, alors c’est un signal de vente.
MM courte < MM longue, puis MM courte > MM longue && Volume actuel > volume précédent --> Signal d'achat
MM courte > MM longue, puis MM courte < MM longue && Volume actuel > volume précédent --> Signal de vente
Plan de la stratégie des Volumes
Dans cette partie, nous allons concevoir le plan de chaque stratégie. Concevoir un plan nous aide à organiser ce que nous voulons faire pour créer un système de trading. Cette étape est très importante et essentielle pour organiser nos idées en plus d'identifier ce que nous voulons faire, étape par étape.
Nous allons tout d’abord créer un plan pour un système de trading simple qui affichera la valeur actuelle de l'indicateur Volumes uniquement sous la forme d’un commentaire sur le graphique. Le système doit vérifier les valeurs de l'indicateur de volume à chaque tick et renvoyer ensuite la valeur actuelle sur le graphique sous forme de commentaire. Voici le plan étape par étape :
- 1ère stratégie : Vol - Mouvement :
Selon cette stratégie, nous devons créer un système de trading simple qui générera des signaux nous informant du mouvement du volume (s'il augmente ou diminue) en comparant la valeurs actuel de l'indicateur de volume avec la valeur précédente. Le système doit vérifier ces deux valeurs à chaque tick, puis informer que le volume augmente si le volume actuel est supérieur au volume précédent, ou informer que le volume diminue si le volume actuel est inférieur au précédent. Voici le plan étape par étape :
- 2ème stratégie : Vol - Force :
Selon cette stratégie, nous devons créer un système de trading simple qui générera des signaux nous informant sur la force du volume en se basant sur la comparaison entre la valeur actuelle de l'indicateur de volume et la moyenne de ses 5 valeurs précédentes. Nous devons donc laisser le système vérifier toutes ces valeurs, puis calculer la moyenne des 5 valeurs précédentes à chaque tick. Le signal correspondant est ensuite généré : si la valeur actuelle du volume est supérieure au volume moyen, le texte généré sera un volume fort, le volume actuel, les 5 valeurs précédentes et la valeur moyenne. Si la valeur actuelle est inférieure à la valeur moyenne, la valeur générée sera un volume faible, la valeur actuelle du volume, les 5 valeurs précédentes du volume et la valeur moyenne. Voici le plan étape par étape :
- 3ème stratégie : Prix & Vol - Tendance haussière :
Selon cette stratégie, nous devons créer un système de trading simple qui fonctionne pendant une tendance haussière pour générer un signal d'achat, après avoir vérifié tick par tick le sommet actuel et le sommet précédent, en plus du volume actuel et du volume précédent. Sur la base de cette stratégie, le système doit générer un signal d'achat, un commentaire sur le graphique avec le plus haut actuel, le plus haut précédent, le volume actuel et le volume précédent, chaque valeur dans une ligne séparée. Si le plus haut actuel est supérieur au plus haut précédent et si le volume actuel est supérieur au volume précédent, ou générer uniquement ces valeurs sans aucun signal d'achat, si le plus haut actuel est supérieur au précédent et si le volume actuel est inférieur au précédent. Voici le plan étape par étape :
- 4ème stratégie : Prix & Vol - Tendance baissière :
Cette stratégie est l'inverse de la précédente. Selon cette stratégie, nous devons créer un système de trading simple qui fonctionne en tendance baissière pour générer un signal de vente, après avoir vérifié tick par tick le plus bas actuel et le plus bas précédent, en plus du volume actuel et du volume précédent. Sur la base de cette stratégie, le système doit générer un commentaire avec le signal de vente, le plus bas actuel, le plus bas précédent, le volume actuel et le volume précédent, chaque valeur étant dans une ligne séparée, si le plus bas actuel est inférieur au plus bas précédent et que le volume actuel est supérieur au volume précédent, ou générer uniquement ces valeurs sans aucun signal de vente, si le plus bas actuel est inférieur au précédent et que le volume actuel est inférieur au précédent. Voici un plan étape par étape pour créer ce système de trading :
- 5ème stratégie : Stratégie MM & Vol :
Selon cette stratégie, nous devons créer un système de trading qui vérifie 2 indicateurs (le volume et la moyenne mobile) tick par tick pour décider s'il y a un signal d'achat ou de vente basé sur la comparaison entre deux moyennes mobiles. La MM courte doit croiser la MM longue à la hausse et en même temps le volume actuel doit être est plus élevé que le précédent. Dans ce cas, le système doit générer un signal d'achat. Le 2ème scénario est que le système doit générer un signal de vente lorsque la MM courte croise la MM longue à la baisse et qu’en même temps le volume actuel est plus élevé que le précédent. Voici un plan détaillé pour créer ces stratégies, étape par étape :
Système de trading des Volumes
Nous sommes arrivés à la partie la plus intéressante de cet article : comment traduire tous les éléments précédents en un système de trading qui nous donne des signaux automatiquement et avec précision. Nous allons concevoir un système de trading pour chaque stratégie. Mais d'abord, nous allons concevoir un système de trading pour générer la valeur actuelle du volume, ce qui sera la base de chaque stratégie.
- Création d'un tableau d’éléments de type "double" pour les volumes.
double VolArray[];
- Tri du tableau en utilisant la fonction ArraySetAsSeries qui renvoie un booléen (vrai ou faux).
ArraySetAsSeries(VolArray,true);
- Définition de la variable VolDef avec iVolumes. La fonction iVolumes retourne le handle de l'indicateur Volumes. Ses paramètres sont : le symbole, la période et le volume appliqué. Nous avons utilisé les constantes _Symbol pour l’appliquer au symbole actuel, et _period pour l’appliquer à la période actuelle.
int VolDef=iVolumes(_Symbol,_Period,VOLUME_TICK);
- Remplissage du tableau avec la fonction CopyBuffer pour récupérer les données de l'indicateur de volume.
CopyBuffer(VolDef,0,0,3,VolArray);
- Calcul de la valeur du volume en utilisant la fonction NormalizeDouble après avoir créé la variable pour VolValue. La fonction NormalizeDouble renvoie une valeur de type double.
int VolValue=NormalizeDouble(VolArray[0],5);
- Création du commentaire à l'aide de la fonction Comment pour afficher la valeur de l'indicateur Volumes.
Comment("Volumes Value is: ",VolValue);
Voici le code complet du système de trading précédent :
//+------------------------------------------------------------------+ //| Simple Volumes.mq5 | //| Copyright 2022, MetaQuotes Ltd. | //| https://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Copyright 2022, MetaQuotes Ltd." #property link "https://www.mql5.com" #property version "1.00" //+------------------------------------------------------------------+ void OnTick() { //Create an array for Volume double VolArray[]; //sorting the array from the current data ArraySetAsSeries(VolArray,true); //defining Volume int VolDef=iVolumes(_Symbol,_Period,VOLUME_TICK); //filling the array CopyBuffer(VolDef,0,0,3,VolArray); //calculating current vol value int VolValue=NormalizeDouble(VolArray[0],5); //creating a comment with current vol value Comment("Volumes Value is: ",VolValue); } //+------------------------------------------------------------------+
Après avoir compilé ce code pour pouvoir l'exécuter dans MetaTrader 5, il sera visible dans la fenêtre du Navigateur :
Après avoir double-cliqué, ou glissé-déposé le fichier sur le graphique, la fenêtre suivante est affichée :
L'EA est ensuite attaché au graphique :
Voici un exemple des signaux générés :
- 1ère stratégie : Vol - Mouvement
Pour créer un système de trading qui nous alertera par un commentaire sur le graphique avec le mouvement de l'indicateur des volumes basé sur la comparaison entre la valeur actuelle du volume et la valeur précédente, nous allons écrire notre code de la façon suivante :
//+------------------------------------------------------------------+ //| Vol - Movement.mq5 | //| Copyright 2022, MetaQuotes Ltd. | //| https://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Copyright 2022, MetaQuotes Ltd." #property link "https://www.mql5.com" #property version "1.00" //+------------------------------------------------------------------+ void OnTick() { //Create an array for Volume double VolArray[]; //sorting the array from the current data ArraySetAsSeries(VolArray,true); //defining Volume int VolDef=iVolumes(_Symbol,_Period,VOLUME_TICK); //filling the array CopyBuffer(VolDef,0,0,3,VolArray); //calculating current vol value double VolCurrentValue=NormalizeDouble(VolArray[0],5); double VolPrevValue=NormalizeDouble(VolArray[1],5); //Conditions of vol movements //Volume increasing if(VolCurrentValue>VolPrevValue) { Comment("Volumes increased","\n","Volumes current value is: ",VolCurrentValue, "\n","Volumes previous value is: ",VolPrevValue); } //Volume decreasing if(VolCurrentValue<VolPrevValue) { Comment("Volumes decreased","\n","Volumes current value is: ",VolCurrentValue, "\n","Volumes previous value is: ",VolPrevValue); } } //+------------------------------------------------------------------+
Les différences dans le code sont les suivantes :
Calcul de la valeur actuelle et de la valeur précédente du Volume :
double VolCurrentValue=NormalizeDouble(VolArray[0],5); double VolPrevValue=NormalizeDouble(VolArray[1],5);
Conditions de la stratégie :
L'indicateur Volumes est en hausse :
if(VolCurrentValue>VolPrevValue) { Comment("Volumes increased","\n","Volumes current value is: ",VolCurrentValue, "\n","Volumes previous value is: ",VolPrevValue); }
L'indicateur Volumes est en baisse :
if(VolCurrentValue<VolPrevValue) { Comment("Volumes decreased","\n","Volumes current value is: ",VolCurrentValue, "\n","Volumes previous value is: ",VolPrevValue); }
Après avoir compilé ce code, l'EA est visible dans la fenêtre du Navigateur :
En double-cliquant dessus, la fenêtre suivante est affichée :
Après avoir coché la case "Autoriser le Trading Algorithmique" et appuyé sur le bouton OK, le programme sera attaché au graphique :
Voici un exemple de signaux générés par la stratégie Vol - Mouvement, avec la fenêtre des données actuelles et des données précédentes :
Augmentation du volume :
Fenêtre des données actuelles :
Fenêtre des données précédentes :
Baisse du volume :
Fenêtre des données actuelles :
Fenêtre des données précédentes :
- 2ème stratégie : Vol - Force
Voici le code complet pour créer le système de trading pour cette stratégie permettant de générer automatiquement des signaux de la force de l'indicateur de volumes basés sur la comparaison entre le volume actuel et le volume précédent :
//+------------------------------------------------------------------+ //| Vol - Strength.mq5 | //| Copyright 2022, MetaQuotes Ltd. | //| https://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Copyright 2022, MetaQuotes Ltd." #property link "https://www.mql5.com" #property version "1.00" //+------------------------------------------------------------------+ void OnTick() { //Create an array for Volume double VolArray[]; //sorting the array from the current data ArraySetAsSeries(VolArray,true); //defining Volume int VolDef=iVolumes(_Symbol,_Period,VOLUME_TICK); //filling the array CopyBuffer(VolDef,0,0,11,VolArray); //calculating current vol && 5 previous volume values double VolCurrentValue=NormalizeDouble(VolArray[0],5); double VolPrevValue1=NormalizeDouble(VolArray[1],5); double VolPrevValue2=NormalizeDouble(VolArray[2],5); double VolPrevValue3=NormalizeDouble(VolArray[3],5); double VolPrevValue4=NormalizeDouble(VolArray[4],5); double VolPrevValue5=NormalizeDouble(VolArray[5],5); //calculating AVG of 5 previous volume values double VolAVGVal=((VolPrevValue1+VolPrevValue2+VolPrevValue3+VolPrevValue4+VolPrevValue5)/5); //conditions of Volume strength based on comparing current to AVG //strong volume if(VolCurrentValue>VolAVGVal) { Comment("Strong volume","\n","Current volume is : ",VolCurrentValue,"\n", "Volume prev 1 is : ",VolPrevValue1,"\n", "Volume prev 2 is : ",VolPrevValue2,"\n", "Volume prev 3 is : ",VolPrevValue3,"\n", "Volume prev 4 is : ",VolPrevValue4,"\n", "Volume prev 5 is : ",VolPrevValue5,"\n", "AVG volume is : ",VolAVGVal); } //weak volume if(VolCurrentValue<VolAVGVal) { Comment("Weak volume","\n","Current volume is : ",VolCurrentValue,"\n", "Volume prev 1 is : ",VolPrevValue1,"\n", "Volume prev 2 is : ",VolPrevValue2,"\n", "Volume prev 3 is : ",VolPrevValue3,"\n", "Volume prev 4 is : ",VolPrevValue4,"\n", "Volume prev 5 is : ",VolPrevValue5,"\n", "AVG volume is : ",VolAVGVal); } } //+------------------------------------------------------------------+
Les différences dans le code sont les suivantes :
Calcul de la valeur actuelle et des 5 précédentes de l'indicateur Volumes :
double VolCurrentValue=NormalizeDouble(VolArray[0],5); double VolPrevValue1=NormalizeDouble(VolArray[1],5); double VolPrevValue2=NormalizeDouble(VolArray[2],5); double VolPrevValue3=NormalizeDouble(VolArray[3],5); double VolPrevValue4=NormalizeDouble(VolArray[4],5); double VolPrevValue5=NormalizeDouble(VolArray[5],5);
Calcul de la moyenne des 5 valeurs précédentes de l’indicateur de Volumes :
double VolAVGVal=((VolPrevValue1+VolPrevValue2+VolPrevValue3+VolPrevValue4+VolPrevValue5)/5);
Conditions de la stratégie :
Volume important :
if(VolCurrentValue>VolAVGVal) { Comment("Strong volume","\n","Current volume is : ",VolCurrentValue,"\n", "Volume prev 1 is : ",VolPrevValue1,"\n", "Volume prev 2 is : ",VolPrevValue2,"\n", "Volume prev 3 is : ",VolPrevValue3,"\n", "Volume prev 4 is : ",VolPrevValue4,"\n", "Volume prev 5 is : ",VolPrevValue5,"\n", "AVG volume is : ",VolAVGVal); }
Volume faible :
if(VolCurrentValue<VolAVGVal) { Comment("Weak volume","\n","Current volume is : ",VolCurrentValue,"\n", "Volume prev 1 is : ",VolPrevValue1,"\n", "Volume prev 2 is : ",VolPrevValue2,"\n", "Volume prev 3 is : ",VolPrevValue3,"\n", "Volume prev 4 is : ",VolPrevValue4,"\n", "Volume prev 5 is : ",VolPrevValue5,"\n", "AVG volume is : ",VolAVGVal); }
Après avoir compilé ce code, l'EA est visible dans la fenêtre du Navigateur :
En glissant et déposant le fichier sur le graphique, la fenêtre de l’EA sera ouverte :
Après avoir appuyé sur OK, le fichier est attaché au graphique :
Voici un exemple de signaux générés suivant la force du volume :
Volume important :
Volume faible :
- 3ème stratégie : Prix et Vol - Tendance haussière
Voici le code complet de la création du système de trading pour cette stratégie :
//+------------------------------------------------------------------+ //| Price&Vol - Uptrend.mq5 | //| Copyright 2022, MetaQuotes Ltd. | //| https://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Copyright 2022, MetaQuotes Ltd." #property link "https://www.mql5.com" #property version "1.00" //+------------------------------------------------------------------+ void OnTick() { //Create arrays for price & Volume MqlRates PriceArray[]; double VolArray[]; //filling price array with data int Data=CopyRates(_Symbol,_Period,0,3,PriceArray); //sorting arrays from the current data ArraySetAsSeries(VolArray,true); //defining Volume int VolDef=iVolumes(_Symbol,_Period,VOLUME_TICK); //filling the array CopyBuffer(VolDef,0,0,3,VolArray); //calculating the current and previous values of highs and volume double CurrentHighValue=NormalizeDouble(PriceArray[2].high,5); double PrevHighValue=NormalizeDouble(PriceArray[1].high,5); double VolCurrentValue=NormalizeDouble(VolArray[0],5); double VolPrevValue=NormalizeDouble(VolArray[1],5); //Conditions of buy signal //Buy signal if(CurrentHighValue>PrevHighValue&&VolCurrentValue>VolPrevValue) { Comment("Buy Signal during uptrend", "\n","Current high is: ",CurrentHighValue,"\n","Previous high is: ",PrevHighValue, "\n","Volume current value is: ",VolCurrentValue,"\n","Volumes previous value is: ",VolPrevValue); } //no signal if(CurrentHighValue>PrevHighValue&&VolCurrentValue<VolPrevValue) { Comment("Current high is: ",CurrentHighValue,"\n","Previous high is: ",PrevHighValue, "\n","Volume current value is: ",VolCurrentValue,"\n","Volumes previous value is: ",VolPrevValue); } } //+------------------------------------------------------------------+
Les différences dans le code sont les suivantes :
Pour créer des tableaux pour le volume et pour les prix, nous utiliserons des éléments de type "double" dans le tableau de volume comme nous l'avons fait précédemment, et la fonction MqlRates pour le tableau de prix qui stocke le prix, le volume et le spread.
MqlRates PriceArray[]; double VolArray[];
Remplissage du tableau des prix en utilisant la fonction CopyRates après avoir créé une variable entière pour Data :
int Data=CopyRates(_Symbol,_Period,0,3,PriceArray);
Calcul de la valeur actuelle et de la valeur précédente des plus hauts et du Volume :
double CurrentHighValue=NormalizeDouble(PriceArray[2].high,5); double PrevHighValue=NormalizeDouble(PriceArray[1].high,5); double VolCurrentValue=NormalizeDouble(VolArray[0],5); double VolPrevValue=NormalizeDouble(VolArray[1],5);
Conditions de la stratégie basées sur les plus hauts et sur les volumes :
Signal d'Achat :
if(CurrentHighValue>PrevHighValue&&VolCurrentValue>VolPrevValue) { Comment("Buy Signal during uptrend", "\n","Current high is: ",CurrentHighValue,"\n","Previous high is: ",PrevHighValue, "\n","Volume current value is: ",VolCurrentValue,"\n","Volumes previous value is: ",VolPrevValue); }
Aucun signal :
if(CurrentHighValue>PrevHighValue&&VolCurrentValue<VolPrevValue) { Comment("Current high is: ",CurrentHighValue,"\n","Previous high is: ",PrevHighValue, "\n","Volume current value is: ",VolCurrentValue,"\n","Volumes previous value is: ",VolPrevValue); }
Après avoir compilé ce code, l'EA est visible dans la fenêtre du Navigateur :
Si nous voulons exécuter cet EA pour générer des signaux selon la stratégie ci-dessus, nous pouvons double-cliquer sur le fichier pour ouvrir sa fenêtre :
Après avoir appuyé sur OK, le fichier sera attaché au graphique :
Voici un exemple de signaux générés sur la base de la stratégie Prix et Vol - tendance haussière avec la fenêtre des données :
Signal d'Achat :
Données actuelles :
Données précédentes :
Aucun signal :
Données actuelles :
Données précédentes :
- 4ème stratégie : Prix et Vol - Tendance baissière
Le code complet pour créer le système de trading basé sur cette stratégie sera celui-ci :
//+------------------------------------------------------------------+ //| Price&Vol - Downtrend.mq5 | //| Copyright 2022, MetaQuotes Ltd. | //| https://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Copyright 2022, MetaQuotes Ltd." #property link "https://www.mql5.com" #property version "1.00" //+------------------------------------------------------------------+ void OnTick() { //Create arrays for price & Volume MqlRates PriceArray[]; double VolArray[]; //filling price array with data int Data=CopyRates(_Symbol,_Period,0,3,PriceArray); //sorting arrays from the current data ArraySetAsSeries(VolArray,true); //defining Volume int VolDef=iVolumes(_Symbol,_Period,VOLUME_TICK); //filling the array CopyBuffer(VolDef,0,0,3,VolArray); //calculating current and previous of lows and volume double CurrentLowValue=NormalizeDouble(PriceArray[2].low,5); double PrevLowValue=NormalizeDouble(PriceArray[1].low,5); double VolCurrentValue=NormalizeDouble(VolArray[0],5); double VolPrevValue=NormalizeDouble(VolArray[1],5); //Conditions of short signal //short signal if(CurrentLowValue<PrevLowValue&&VolCurrentValue>VolPrevValue) { Comment("Short Signal during downtrend", "\n","Current low is: ",CurrentLowValue,"\n","Previous low is: ",PrevLowValue, "\n","Volume current value is: ",VolCurrentValue,"\n","Volumes previous value is: ",VolPrevValue); } //no signal if(CurrentLowValue<PrevLowValue&&VolCurrentValue<VolPrevValue) { Comment("Current low is: ",CurrentLowValue,"\n","Previous low is: ",PrevLowValue, "\n","Volume current value is: ",VolCurrentValue,"\n","Volumes previous value is: ",VolPrevValue); } } //+------------------------------------------------------------------+
Différences dans le code :
Conditions des signaux générés sur la base de la stratégie Prix & Vol - Tendance baissière :
Signal court :
if(CurrentLowValue<PrevLowValue&&VolCurrentValue>VolPrevValue) { Comment("Short Signal during downtrend", "\n","Current low is: ",CurrentLowValue,"\n","Previous low is: ",PrevLowValue, "\n","Volume current value is: ",VolCurrentValue,"\n","Volumes previous value is: ",VolPrevValue); }
Aucun signal :
if(CurrentLowValue<PrevLowValue&&VolCurrentValue<VolPrevValue) { Comment("Current low is: ",CurrentLowValue,"\n","Previous low is: ",PrevLowValue, "\n","Volume current value is: ",VolCurrentValue,"\n","Volumes previous value is: ",VolPrevValue); }
Après avoir compilé ce code, l'EA est disponible dans le Navigateur :
Après un double-clic sur le fichier, la fenêtre de l'EA est affichée :
Après avoir appuyé sur OK, le fichier sera attaché au graphique :
Voici un exemple de signaux générés, avec les fenêtres des données des valeurs actuelles et des données précédentes :
Signal court :
Données actuelles :
Données précédentes :
Aucun signal :
Données actuelles :
Données précédentes :
- 5ème stratégie : Stratégie MM & Vol
Sur la base de cette stratégie, nous pouvons créer un système de trading avec le code suivant :
//+------------------------------------------------------------------+ //| MA&Vol Strategy.mq5 | //| Copyright 2022, MetaQuotes Ltd. | //| https://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Copyright 2022, MetaQuotes Ltd." #property link "https://www.mql5.com" #property version "1.00" //+------------------------------------------------------------------+ void OnTick() { //Create arrays for MA & Volume double MAShortArray[],MALongArray[]; double VolArray[]; //sorting arrays from the current data ArraySetAsSeries(MAShortArray,true); ArraySetAsSeries(MALongArray,true); ArraySetAsSeries(VolArray,true); //defining MA & Volume int MAShortDef = iMA(_Symbol, _Period, 10, 0, MODE_SMA, PRICE_CLOSE); int MALongDef = iMA(_Symbol, _Period, 24, 0, MODE_SMA, PRICE_CLOSE); int VolDef=iVolumes(_Symbol,_Period,VOLUME_TICK); //filling arrays CopyBuffer(MAShortDef,0,0,3,MAShortArray); CopyBuffer(MALongDef,0,0,3,MALongArray); CopyBuffer(VolDef,0,0,3,VolArray); //calculating MA && current volume values double MAShortCurrentValue=NormalizeDouble(MAShortArray[0],6); double MAShortPrevValue=NormalizeDouble(MAShortArray[1],6); double MALongCurrentValue=NormalizeDouble(MALongArray[0],6); double MALongPrevValue=NormalizeDouble(MALongArray[1],6); double VolCurrentValue=NormalizeDouble(VolArray[0],5); double VolPrevValue=NormalizeDouble(VolArray[1],5); //conditions of buy and short signals //buy signal if(MAShortCurrentValue>MALongCurrentValue&&MAShortPrevValue<MALongPrevValue &&VolCurrentValue>VolPrevValue) { Comment("Buy signal"); } //short signal if(MAShortCurrentValue<MALongCurrentValue&&MAShortPrevValue>MALongPrevValue &&VolCurrentValue>VolPrevValue) { Comment("Short signal"); } } //+------------------------------------------------------------------+
Différences dans le code :
Création de tableaux pour la moyenne mobile courte, pour la moyenne mobile longue et pour le volume :
double MAShortArray[],MALongArray[]; double VolArray[];
Tri de ces tableaux :
ArraySetAsSeries(MAShortArray,true); ArraySetAsSeries(MALongArray,true); ArraySetAsSeries(VolArray,true);
Définition de la MA courte et de la MA longue avec la fonction iMA qui renvoie le handle de l'indicateur de moyenne mobile. Ses paramètres sont : le symbole, la période, la période moyenne, le décalage horizontal, le type de lissage qui est le type de la MM et le prix appliqué. Et définition du volume par la fonction iVolumes comme nous l'avons mentionné précédemment :
int MAShortDef = iMA(_Symbol, _Period, 10, 0, MODE_SMA, PRICE_CLOSE); int MALongDef = iMA(_Symbol, _Period, 24, 0, MODE_SMA, PRICE_CLOSE); int VolDef=iVolumes(_Symbol,_Period,VOLUME_TICK);
Remplissage des tableaux
CopyBuffer(MAShortDef,0,0,3,MAShortArray); CopyBuffer(MALongDef,0,0,3,MALongArray); CopyBuffer(VolDef,0,0,3,VolArray);
Calcul des valeurs actuelles de la MA courte, de la MA longue et du volume en plus de leurs valeurs précédentes :
double MAShortCurrentValue=NormalizeDouble(MAShortArray[0],6); double MAShortPrevValue=NormalizeDouble(MAShortArray[1],6); double MALongCurrentValue=NormalizeDouble(MALongArray[0],6); double MALongPrevValue=NormalizeDouble(MALongArray[1],6); double VolCurrentValue=NormalizeDouble(VolArray[0],5); double VolPrevValue=NormalizeDouble(VolArray[1],5);
Conditions des signaux générés par la stratégie :
Signal d'Achat :
if(MAShortCurrentValue>MALongCurrentValue&&MAShortPrevValue<MALongPrevValue &&VolCurrentValue>VolPrevValue) { Comment("Buy signal"); }
Signal court :
if(MAShortCurrentValue<MALongCurrentValue&&MAShortPrevValue>MALongPrevValue &&VolCurrentValue>VolPrevValue) { Comment("Short signal"); }
Après avoir compilé ce code, l'EA est visible dans la fenêtre du Navigateur :
En le glissant et le déposant sur le graphique, l'EA sera attaché :
Voici un exemple de signaux générés par cette stratégie :
Signal d'Achat :
Signal court :
Conclusion
J'espère avoir suffisamment couvert le sujet de cet indicateur technique et que vous avez appris comment l’utiliser de manière appropriée pour améliorer votre trading. Nous avons appris ce qu'est l'indicateur de Volumes, ce qu'il mesure, comment le lire et l'utiliser. Nous avons identifié la différence entre le volume sur le marché des changes et celui des actions grâce à la définition du volume. Nous avons également vu quelques stratégies de volume simples :
- Vol - Mouvement : pour en savoir plus sur le mouvement du volume, s’il a augmenté ou diminué.
- Vol - Force : pour en savoir plus sur la force du mouvement actuel du volume par rapport à sa moyenne.
- Prix et Volume - tendance haussière : pour obtenir un signal d'achat pendant une tendance haussière sur la base du mouvement des prix et du volume qui l'accompagne.
- Prix et Volume - tendance baissière : pour obtenir un signal de vente pendant une tendance baissière sur la base du mouvement des prix et du volume qui l'accompagne.
- Stratégie MA et Vol : pour obtenir des signaux d'achat et de vente basés sur le croisement des moyennes mobiles et le volume qui les accompagne.
Ces stratégies peuvent être utilisées même après avoir été testées, et optimisées si nécessaire, en se basant sur le concept de base de l'indicateur. Nous avons appris tout cela à travers le sujet de la stratégie des Volumes. Nous avons également appris à créer un plan étape par étape pour chaque stratégie afin de nous aider à organiser nos idées pour créer un système de trading pour chaque stratégie. Ensuite, nous avons vu la partie la plus intéressante de cet article, à savoir comment créer un système de trading en MQL5 pour chaque stratégie afin de générer des signaux automatiquement et avec précision pour pouvoir les utiliser dans le terminal de trading MetaTrader 5.
Il est important de réaffirmer à nouveau que vous devez tester toute stratégie avant de l'utiliser sur votre compte réel, car elle pourrait ne pas vous être utile, car rien ne convient à tout le monde. J'espère que cet article vous sera utile et que vous trouverez de nouvelles idées liées au sujet de l'article ou à tout autre sujet connexe. Vous pouvez également essayer de réfléchir à la façon de combiner cet indicateur avec d'autres outils techniques pour être plus significatif, comme nous l'avons fait dans l'article en combinant le volume avec les moyennes mobiles, car c'est une approche très perspicace. Si vous souhaitez lire d'autres articles similaires, vous pouvez lire mes autres articles de la série sur la conception d'un système de trading basé sur les indicateurs techniques les plus populaires. J'espère que vous les trouverez utiles.
Traduit de l’anglais par MetaQuotes Ltd.
Article original : https://www.mql5.com/en/articles/11050
![Développer un Expert Advisor de trading à partir de zéro (partie 14) : Ajout du Volume Au Prix (II)](https://c.mql5.com/2/46/development__5.png)
![Apprenez à concevoir un système de trading basé sur le MFI](https://c.mql5.com/2/47/why-and-how__1.png)
![Développer un Expert Advisor à partir de zéro (partie 15) : Accéder aux données du web (I)](https://c.mql5.com/2/46/development__6.png)
![Développer un Expert Advisor à partir de zéro (partie 13) : Times & Trade (II)](https://c.mql5.com/2/46/development__4.png)
![MQL5 - Langage des stratégies de trading intégré au terminal client MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
- Applications de trading gratuites
- Plus de 8 000 signaux à copier
- Actualités économiques pour explorer les marchés financiers
Vous acceptez la politique du site Web et les conditions d'utilisation