Apprenez à concevoir un système de trading basé sur les Volumes

Mohamed Abdelmaaboud | 20 janvier, 2023

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 :

  1. Définition des Volumes
  2. Stratégie des Volumes
  3. Plan de la stratégie des Volumes
  4. Système de trading des Volumes
  5. 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

Insertion du Volume

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 :

Paramètres du Volume

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 :

Volumes attaché

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.

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é

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

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

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.

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 :

Plan Vol Simple


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 :

Plan Vol - Mouvement


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 :

Plan Vol - Force


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 :

Plan Price_Vol - Tendance haussiè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 :

Plan Price_Vol - Tendance baissière


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 :

Plan de MA_Vol


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.

double VolArray[];
ArraySetAsSeries(VolArray,true);
int VolDef=iVolumes(_Symbol,_Period,VOLUME_TICK);
CopyBuffer(VolDef,0,0,3,VolArray);
int VolValue=NormalizeDouble(VolArray[0],5);
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 :

 Navigateur 1

Après avoir double-cliqué, ou glissé-déposé le fichier sur le graphique, la fenêtre suivante est affichée :

Fenêtre Vol simple

L'EA est ensuite attaché au graphique :

 Vol simple attaché

Voici un exemple des signaux générés :

Signal Vol simple

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 :

Vol dans le Navigateur 2

En double-cliquant dessus, la fenêtre suivante est affichée :

Fenêtre Vol - Mouvement

Après avoir coché la case "Autoriser le Trading Algorithmique" et appuyé sur le bouton OK, le programme sera attaché au graphique :

Vol - Mouvement attaché

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 :

Signal Vol - Mouvement - volume en augmentation - données actuelles

Fenêtre des données précédentes :

Signal Vol - Mouvement - volume en augmentation - données précédentes

Baisse du volume :

Fenêtre des données actuelles :

Signal Vol - Mouvement - volume en baisse - données actuelles

Fenêtre des données précédentes :

Signal Vol - Mouvement - volume en baisse - données actuelles

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 :

 Vol Navigator 3

En glissant et déposant le fichier sur le graphique, la fenêtre de l’EA sera ouverte :

Fenêtre Vol - Force

Après avoir appuyé sur OK, le fichier est attaché au graphique :

Vol - Force attaché

Voici un exemple de signaux générés suivant la force du volume :

Volume important :

Vol - Force - signal volume fort

Volume faible :

Vol - Force - signal volume faible

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 :

Vol Navigator 4

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 :

Fenêtre Prix et Vol - Tendance haussière

Après avoir appuyé sur OK, le fichier sera attaché au graphique :

Prix et Vol - Tendance haussière attaché

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 :

Prix et Vol - Tendance haussière - achat - données actuelles

Données précédentes :

Prix et Vol - Tendance haussière - achat - données précédentes

Aucun signal :

Données actuelles :

Prix et Vol - Tendance haussière - pas de signal - données actuelles

Données précédentes :

Prix et Vol - Tendance haussière - pas de signal - données précédentes

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 :

Vol Navigator 5

Après un double-clic sur le fichier, la fenêtre de l'EA est affichée :

Fenêtre Prix et Vol - Tendance baissière

Après avoir appuyé sur OK, le fichier sera attaché au graphique :

Prix et Vol - Tendance baissière attaché

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 :

Prix et Vol - Tendance baissière - vente - données actuelles

Données précédentes :

Prix et Vol - Tendance baissière - vente - données précédentes

Aucun signal :

Données actuelles :

Prix et Vol - Tendance baissière - aucun signal - données actuelles

Données précédentes :

Prix et Vol - Tendance baissière - aucun signal - données précédentes

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 :

Vol Navigator 6

En le glissant et le déposant sur le graphique, l'EA sera attaché :

MM & Vol attaché

Voici un exemple de signaux générés par cette stratégie :

Signal d'Achat :

MM & Vol signal d'achat

Signal court :

 MM & Vol 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 :

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.