Apprenez à concevoir un système de trading utilisant l’Accumulation/Distribution (AD)

Mohamed Abdelmaaboud | 6 décembre, 2022

Introduction

Notre série d'articles est consacrée à l'apprentissage détaillé des indicateurs techniques les plus populaires et à leur application sous la forme de stratégies simples. Les systèmes de trading pour ces stratégies sont conçus en MQL5 pour pouvoir les exécuter dans la plateforme de trading MetaTrader 5. Dans le présent article, nous découvrirons l’Accumulation/Distribution (AD), un nouvel indicateur technique basé sur le volume qui peut nous donner une autre perspective de l'instrument. Nous couvrirons cet indicateur à travers les sujets suivants :

  1. Définition de l’AD
  2. Stratégie basée sur l’AD
  3. Plan de la stratégie basée sur l’AD
  4. Système de trading basé sur l’AD
  5. Conclusion

Tout d'abord, nous apprendrons en détail ce nouvel indicateur technique, ce qu'il mesure et comment le calculer. Ensuite, nous concevrons un système de trading basé sur celui-ci. Nous allons appliquer ce calcul à un exemple pour mieux en saisir le concept. Après avoir appris en détail les bases de l'indicateur AD, nous apprendrons comment l'utiliser dans des stratégies simples. Nous concevrons ensuite un plan pour chaque stratégie mentionnée afin de nous aider à concevoir et à créer un système de trading pour chacune de ces stratégies. Après avoir conçu tous les plans de toutes ces stratégies simples, nous arriverons à la partie la plus intéressante de cet article : nous apprendrons comment créer ou écrire notre code MQL5 pour créer un système de trading pouvant être exécuté sur la plateforme de trading MetaTrader 5.

Nous couvrirons alors l'indicateur AD en détail en apprenant à l'utiliser. Nous créerons ensuite un système de trading pour les stratégies simples. Je vous conseille d'essayer d'appliquer ce que vous apprenez en écrivant vous-même les codes mentionnés. Cela vous aidera à approfondir votre compréhension car l'objectif principal de cet article (tout comme les autres de cette série) est de donner un aperçu aux programmeurs novices sur la façon de coder et de concevoir des systèmes de trading basés sur les indicateurs. Nous utiliserons également le langage MetaQuotes (MQL5) pour écrire nos codes dans MetaEditor, intégré à MetaTrader 5. Si vous voulez savoir comment installer MetaTrader 5 ou comment utiliser MetaEditor, lisez mon article précédent Ecrire du code MQL5 dans MetaEditor.

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 type de 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.

Passons maintenant en revue nos sujets pour franchir une nouvelle étape dans notre parcours d'apprentissage sur le trading et MQL5.

Définition de l’AD

Ici, je parlerai en détail de l'indicateur Accumulation/Distribution (AD) pour définir ce qu'il est, ce qu'il mesure, comment nous pouvons le calculer et quel concept se cache derrière. L'indicateur en ligne AD a été développé par Marc Chaikin. Il s'agit d'un indicateur basé sur le volume. Cela signifie que le volume est utilisé dans son calcul. Il nous donne un aperçu du volume, ce qui est une perspective importante dans le trading en général car il mesure le flux cumulé d'argent entrant et sortant de l'instrument. Il utilise aussi le volume pour confirmer la tendance ou pour avertir du renversement. Si vous voulez en savoir plus sur la tendance, les types de tendance et comment nous pouvons l'identifier, lisez la sous-section de définition de la tendance dans l'article précédent.

Comme tout indicateur cumulatif, la ligne AD est le total cumulé du volume du flux monétaire de chaque période. Cela devient très clair lors du calcul de l'indicateur. Voyons comment nous pouvons calculer la ligne AD à travers les étapes suivantes :

Il y a 3 étapes pour calculer la ligne AD :

  1. Calcul du multiplicateur de flux monétaire = ((clôture - bas) - (haut - clôture)) / (haut - bas)
  2. Calcul du volume du flux monétaire = multiplicateur du flux monétaire * volume de la période
  3. Ligne AD = valeur de la ligne AD précédente + volume du flux monétaire actuel

Nous allons maintenant considérer un exemple pour appliquer ces étapes de calcul de la ligne AD avec les données suivantes pour un instrument :

Jour Plus Haut Plus Bas Clôture Volume
1 55 53 54 12 000
2 56 54 55 10 000
3 61 59 60 15 000
4 67 64 65 20 000
5 63 58 60 10 000
6 58 52 55 5 000
7 64 58 60 7 000
8 52 47 50 7 500
9 52 48 48 8 000
10 50 48 49 5 000
11 49 47 48 6 000
12 48 47 47 7 500
13 50 46 48 9 000
14 52 45 47 10 000
15 55 46 49 7 000
16 53 45 47 7 500
17 51 43 46 6 000
18 50 42 44 5 000
19 50 43 45 15 000

Nous devons maintenant calculer la ligne de l’AD en fonction des données précédemment fournies. Le calcul sera comme suit :

Nous allons tout d’abord calculer le multiplicateur de flux monétaire = ((clôture - bas) - (haut - clôture)) / (haut - bas) :

Calcul AD

Nous calculons ensuite le volume du flux monétaire = multiplicateur du flux monétaire * volume de la période :

Calcul AD 1

Puis la ligne AD = valeur de la ligne AD précédente + volume de flux monétaire actuel :

Calcul AD 2

Nous avons calculé la ligne AD manuellement. Mais nous n'avons pas besoin de le faire à chaque fois. Cela nous permet de comprendre le concept derrière l'indicateur AD. Si nous voulons voir l'indicateur AD, il nous suffit de le choisir parmi les indicateurs disponibles dans le terminal MetaTrader 5.

Dans MetaTrader 5, cliquez sur l'onglet Insertion --> Indicateurs --> Volumes --> Accumulation/Distribution

Insertion de l’AD

Après avoir choisi l'indicateur, la fenêtre suivante s'ouvre pour définir les paramètres de l'indicateur AD :

Fenêtre de l’AD

1. Types du volume à utiliser : Ticks ou Réel

2. Couleur de la ligne AD

3. Type de la ligne AD

4. Epaisseur de la ligne AD

Après avoir défini les paramètres et appuyé sur OK, la figure suivante s'affiche pour l'indicateur AD :

AD attaché

Nous devons maintenant savoir comment utiliser l'indicateur AD.


Stratégie basée sur l’AD

Dans cette section, nous apprendrons comment utiliser l'indicateur AD en notre faveur pour améliorer notre trading grâce à des stratégies simples. J'espère que vous pourrez obtenir de nouvelles idées qui peuvent être bénéfiques pour votre trading.

Vous constaterez peut-être que ces stratégies doivent être optimisées. C'est bien parce que l'objectif principal ici est de partager des stratégies simples pouvant être utiles pour nous permettre de comprendre le concept de base derrière l'indicateur AD et comment nous pouvons créer un système de trading au moyen de MQL5. Vous devez donc tester chaque stratégie avant de l'utiliser sur votre compte réel, car elle devra peut-être être optimisée ou modifiée. Vous pouvez également modifier la durée des périodes pour qu'elles soient plus significatives ou plus adaptées à votre trading.

Nous allons maintenant voir des stratégies simples qui peuvent être utilisées avec l'indicateur AD.

Selon cette stratégie, nous devons connaître le mouvement de la ligne AD : si elle est en hausse ou en baisse. Nous effectuerons une simple comparaison entre la valeur AD actuelle et sa valeur précédente. Si la valeur AD actuelle est supérieure à la précédente, la ligne AD monte, et vice versa. Si la valeur actuelle est inférieure à la précédente, la ligne AD est en baisse.

Nous pouvons donc dire :

AD actuel > AD précédent --> ligne AD en hausse

AD actuel < AD précédent --> ligne AD en baisse

Selon cette stratégie, nous devons déterminer si le mouvement actuel de la ligne AD est fort ou faible. Nous le vérifierons par simple comparaison entre la valeur AD actuelle et la valeur maximale ou minimale des 10 dernières valeurs. Si la valeur actuelle est supérieure à la valeur maximale des 10 valeurs AD précédentes, alors la valeur AD actuelle est forte, et vice versa. Si la valeur actuelle est inférieure à la valeur minimale des 10 valeurs AD précédentes, la valeur AD actuelle est faible.

Plus simplement :

AD actuel > Valeur maximale des 10 valeurs AD précédentes --> valeur AD actuelle forte

AD actuel < valeur minimale des 10 valeurs AD précédentes --> valeur AD actuelle faible

Selon cette stratégie, nous devons savoir si le mouvement haussier actuel pendant la tendance haussière est fort, ou s'il y a une divergence baissière dans sa forme simple. La divergence baissière se produit simplement lorsque nous voyons que le prix crée un nouveau sommet, mais que l'indicateur ne le confirme pas. Nous vérifierons cela en comparant les deux dernières valeurs consécutives de l'AD et les deux dernières valeurs consécutives du plus haut à des fins de simplicité uniquement. Vous pouvez modifier la période de comparaison pour obtenir des informations plus significatives. Il vaut mieux voir le volume suivre la tendance : lors de la tendance haussière, le volume doit augmenter avec les mouvements haussiers et diminuer en cas de correction.

Nous comparerons la valeur AD actuelle avec la valeur précédente et le prix haut actuel avec le prix haut précédent. Si la valeur AD actuelle est supérieure à la valeur AD précédente et que le plus haut actuel est supérieur au plus haut précédent, alors il y a donc un fort mouvement à la hausse pendant la tendance haussière. Sinon, si la valeur AD actuelle est inférieure à la valeur AD précédente et que le plus haut actuel est supérieur au plus haut précédent, il y a une divergence baissière.

Plus simplement :

AD actuel > AD précédent et plus haut actuel > plus haut précédent --> Fort mouvement à la hausse pendant la tendance haussière

AD actuel < AD précédent et plus haut actuel > plus haut précédent --> Divergence baissière

Cette stratégie sera à l'opposé de la stratégie AD Simple - tendance haussière. Nous devons savoir si le mouvement baissier actuel pendant la tendance baissière est fort, ou s'il y a une divergence haussière dans sa forme simple. La divergence haussière se produit lorsque nous voyons que le prix crée un nouveau plus bas mais que l'indicateur ne confirme pas ce mouvement et se déplace vers le haut. Nous le vérifierons en comparant les deux dernières valeurs consécutives de l'indicateur AD et les deux dernières valeurs consécutives des plus bas. Si la valeur AD actuelle est inférieure à la valeur AD précédente et que le plus bas actuel est inférieur au plus bas précédent, il y a alors un fort mouvement à la baisse pendant la tendance à la baisse. Sinon, si la valeur AD actuelle est supérieure à la valeur AD précédente et que le plus bas actuel est inférieur au plus bas précédent, il y a une divergence haussière.

Ou plus simplement :

AD actuel < AD précédent et plus bas actuel < plus bas précédent --> Fort mouvement baissier pendant la tendance baissière

AD actuel > AD précédent et plus bas actuel < plus bas précédent --> Divergence haussière 


Plan de la stratégie basée sur l’AD

Il est maintenant temps d'organiser nos étapes pour créer notre système de trading. Dans cette partie, nous allons créer un plan étape par étape pour chaque stratégie afin de nous aider à créer notre système de trading en douceur. Je crois que cette étape est très importante dans tout processus de création d’un système de trading. Nous allons donc concevoir un plan pour chaque stratégie pour savoir ce que nous devons faire.

Tout d'abord, nous devons concevoir un plan pour une stratégie simple qui affiche la valeur actuelle de l’AD sous forme de commentaire sur le graphique. Il servira de base aux stratégies à venir. Nous l'appellerons AD Simple. Tout ce dont nous avons besoin de ce système est d'afficher la valeur actuelle de l'AD sur le graphique sous forme de commentaire :

Plan AD simple 

Maintenant, nous devons concevoir un plan pour chaque stratégie.

Pour chaque tick, nous avons besoin que le système de trading vérifie la valeur actuelle de l'AD et la valeur précédente. Si la valeur actuelle est supérieure à la précédente, nous devons renvoyer un commentaire sur le graphique avec la ligne AD montante, la valeur actuelle de l’AD et la valeur précédente. Chaque valeur sera écrite dans une ligne séparée. D'autre part, si la valeur actuelle est inférieure à la précédente, nous devons renvoyer un commentaire sur le graphique avec la ligne AD décroissante, la valeur actuelle de l’AD et la valeur précédente. Chaque valeur est sur une ligne distincte. Voici le plan pour créer ce système de trading :

Plan du mouvement AD Simple

Selon cette stratégie, nous devons concevoir un système de trading capable de vérifier à chaque tick sur la base de 3 valeurs : la valeur actuelle de l’AD, la valeur maximale des 10 dernières valeurs de l’AD et la valeur minimale des 10 dernières valeurs de l’AD. Si la valeur actuelle de l’AD est supérieure à la valeur maximale, le système doit renvoyer la notification appropriée, la valeur AD actuelle, la valeur AD Max et la valeur AD Min. Chaque valeur est écrite sur une ligne distincte. Si la valeur AD actuelle est inférieure à la valeur minimale, le système doit renvoyer la notification appropriée, la valeur AD actuelle, la valeur AD Max et la valeur AD Min. Chaque valeur est écrite sur une ligne distincte.

Voici le plan correspondant :

Plan du Force AD Simple

Nous devons créer un système de trading pour cette stratégie en fonction de 4 valeurs : l'AD actuel, l'AD précédent, le plus haut actuel et le plus haut précédent, et effectuer cela à chaque tick pendant une tendance haussière. Le système doit ensuite décider si la valeur actuelle de l’AD est supérieure à la valeur précédente et si le maximum actuel est supérieur au maximum précédent. Nous avons besoin que le système renvoie un commentaire sur le graphique avec un fort mouvement haussier pendant la tendance haussière, l’AD actuel, l’AD précédent, le plus haut actuel et le plus haut précédent. Chaque valeur est écrite sur une ligne distincte. Un autre cas que nous devons aussi signaler est si l'AD actuel est inférieur au précédent et que le plus haut actuel est supérieur au plus haut précédent. Nous avons besoin que le système renvoie la divergence baissière, l'AD actuel, l'AD précédent, le haut actuel et le haut précédent et chaque valeur sur une ligne distincte.

Voici le schéma pour créer ce système de trading :

Plan AD Simple Tendance Haussière

Nous devons créer un système de trading pour cette stratégie qui doit vérifier 4 valeurs : l'AD actuel, l'AD précédent, le plus bas actuel et le plus bas précédent, et effectuer cela à chaque tick pendant la tendance baissière. Ensuite, le système doit décider si la valeur actuelle de l’AD est inférieure à la valeur précédente et si le minimum actuel est inférieur au minimum précédent. Nous avons besoin que le système renvoie un commentaire sur le graphique avec un fort mouvement vers le bas pendant la tendance baissière, l’AD actuel, l’AD précédent, le plus bas actuel et le plus bas précédent sur des lignes distinctes. Un autre cas que nous devons aussi signaler est si l'AD actuel est supérieur au précédent et le plus bas actuel est inférieur au plus bas précédent. Nous avons besoin que le système renvoie un commentaire avec la divergence haussière, l'AD actuel, l'AD précédent, le plus bas actuel et le plus bas précédent sur des lignes distinctes.

Voici le schéma pour créer ce système de trading :

Plan AD Simple Tendance Baissière


Système de trading basé sur les stratégies AD

Dans cette section intéressante, nous apprendrons comment créer un système de trading après avoir compris et conçu ce que nous devons faire. Nous allons commencer par créer un système AD simple renvoyant uniquement la valeur actuelle de l’AD pour servir de base à nos stratégies. Voici comment le coder :

double ADArray[];
ArraySetAsSeries(ADArray,true);
int ADDef=iAD(_Symbol,_Period,VOLUME_TICK);
CopyBuffer(ADDef,0,0,3,ADArray);
int ADValue=NormalizeDouble(ADArray[0],5);
Comment("AD Value is: ",ADValue);

Voici le code complet de l'AD Simple :

//+------------------------------------------------------------------+
//|                                                    Simple AD.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 AD
   double ADArray[];
   
   //sorting the array from the current data
   ArraySetAsSeries(ADArray,true);
   
   //defining AD
   int ADDef=iAD(_Symbol,_Period,VOLUME_TICK);
   
   //filling the ADArray with ADDef
   CopyBuffer(ADDef,0,0,3,ADArray);
   
   //calculating current AD value
   int ADValue=NormalizeDouble(ADArray[0],5);
   
   //creating a comment with AD value
   Comment("AD Value is: ",ADValue);  
  }
//+------------------------------------------------------------------+

Après avoir compilé ce code, nous le trouverons dans le dossier Expert Advisors du Navigateur :

AD dans le Navigateur

Nous pouvons l'exécuter en faisant un glisser-déposer de l'EA sur le graphique. La fenêtre suivante s'affiche alors :

Fenêtre AD Simple

Après avoir cliqué sur OK, il sera attaché au graphique :

AD Simple attaché

Voici un exemple de commentaire généré par l’EA à partir des tests :

Signal de test AD Simple

Pour nous assurer que l'EA génère la même valeur que l'indicateur MetaTrader 5 d'origine, nous pouvons insérer l'indicateur et attacher l'EA simultanément. On voit que ce sont les mêmes :

AD Simple - Même signal

Voici le code complet pour créer un EA qui génère les signaux souhaités selon cette stratégie :

//+------------------------------------------------------------------+
//|                                           Simple AD 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 array for AD
   double ADArray[];
   
   //sorting array from the current data
   ArraySetAsSeries(ADArray,true);
   
   //defining AD
   int ADDef=iAD(_Symbol,_Period,VOLUME_TICK);
   
   //filling the ADArray with ADDef
   CopyBuffer(ADDef,0,0,3,ADArray);
   
   //calculating current AD and previous values
   int ADCurrrentValue=NormalizeDouble(ADArray[0],5);
   int ADPrevValue=NormalizeDouble(ADArray[1],5);
   
   //Comparing two values and giving signal
   //Rising AD
   if(ADCurrrentValue>ADPrevValue)
   {
      Comment("AD line is rising","\n","AD current value is: ",ADCurrrentValue,
      "\n","AD previous value is: ",ADPrevValue);
   }
   
   //Declining AD
   if(ADCurrrentValue<ADPrevValue)
   {
      Comment("AD line is declining","\n","AD current value is: ",ADCurrrentValue,
      "\n","AD previous value is: ",ADPrevValue);
   }  
  }
//+------------------------------------------------------------------+

Le code précédent est différent du code de base. Voici les différences :

int ADCurrrentValue=NormalizeDouble(ADArray[0],5);
int ADPrevValue=NormalizeDouble(ADArray[1],5);
if(ADCurrrentValue>ADPrevValue)
{
 Comment("AD line is rising","\n","AD current value is: ",ADCurrrentValue,
 "\n","AD previous value is: ",ADPrevValue);
}
if(ADCurrrentValue<ADPrevValue)
{
 Comment("AD line is declining","\n","AD current value is: ",ADCurrrentValue,
 "\n","AD previous value is: ",ADPrevValue);
} 

Après avoir compilé ce code, l'EA peut être trouvé dans la fenêtre du Navigateur :

AD dans le Navigateur 2

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

Fenêtre de mouvement AD Simple

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

Mouvement AD Simple attaché

Voici un exemple de signaux générés, avec les fenêtre des données actuelles et précédentes :

Ligne AD montante,

Données actuelles: 

Mouvement AD Simple - AD montant - données actuelles 

Données précédentes :

Mouvement AD simple - AD montant - données précédentes

AD en baisse,

Données actuelles:

Mouvement AD Simple - AD descendant - données actuelles

Données précédentes :

 Mouvement AD Simple - AD descendant - données précédentes

Voici le code complet pour créer un EA pour exécuter notre stratégie de trading :

//+------------------------------------------------------------------+
//|                                           Simple AD strength.mq5 |
//|                                  Copyright 2022, MetaQuotes Ltd. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
void OnTick()
  {
   //Create array for AD
   double ADArray[];
   
   //sorting the array from the current data
   ArraySetAsSeries(ADArray,true);
  
   //defining AD
   int ADDef=iAD(_Symbol,_Period,VOLUME_TICK);
   
   //filling the ADArray with ADDef
   CopyBuffer(ADDef,0,0,10,ADArray);
 
   //calculating current AD and previous values
   int ADCurrrentValue=NormalizeDouble(ADArray[0],5);
  
   //Defining Max and Min values from the last 10 AD values
   int ADMax =ArrayMaximum(ADArray,1,10);
   int ADMin =ArrayMinimum(ADArray,1,10);
   
   //Calculating Max and Min values
   int ADMaxValue=ADArray[ADMax];
   int ADMinValue=ADArray[ADMin];

   //Comparing two values and giving signal
   //AD current is strong
   if(ADCurrrentValue>ADMaxValue)
   {
      Comment("AD Current value is strong","\n","AD current value is: ,",ADCurrrentValue,
   "\n","AD Max is: ",ADMaxValue,"\n","AD Min is: ",ADMinValue);
   }
   
   //AD current is weak
   if(ADCurrrentValue<ADMinValue)
   {
      Comment("AD Current value is weak","\n","AD current value is: ,",ADCurrrentValue,
   "\n","AD Max is: ",ADMaxValue,"\n","AD Min is: ",ADMinValue);
   }
  }
//+------------------------------------------------------------------+

Le code précédent présente de nombreuses différences en ce qui concerne la stratégie et ce dont nous avons besoin que l'EA fasse. Voici les différences :

int ADMax =ArrayMaximum(ADArray,1,10);
int ADMin =ArrayMinimum(ADArray,1,10);
int ADMaxValue=ADArray[ADMax];
int ADMinValue=ADArray[ADMin];
if(ADCurrrentValue>ADMaxValue)
{
 Comment("AD Current value is strong","\n","AD current value is: ,",ADCurrrentValue,
 "\n","AD Max is: ",ADMaxValue,"\n","AD Min is: ",ADMinValue);
}
if(ADCurrrentValue<ADMinValue)
{
 Comment("AD Current value is weak","\n","AD current value is: ,",ADCurrrentValue,
 "\n","AD Max is: ",ADMaxValue,"\n","AD Min is: ",ADMinValue);
}

Après avoir compilé ce code, l'EA est disponible dans le Navigateur :

AD dans le Navigateur 3

 

Après l'avoir glissé-déposé sur le graphique, sa fenêtre est affichée :

Fenêtre de Force AD Simple

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

Force AD Simple attaché

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

AD fort :

Signal de Force AD Simple - fort

AD faible :

Signal de Force AD Simple - faible

Voici le code complet pour créer le système de trading pour cette stratégie :

//+------------------------------------------------------------------+
//|                                          Simple AD - 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 two arrays for AD and price
   double ADArray[];
   MqlRates PriceArray[];
   
   //sorting the two arrays
   ArraySetAsSeries(ADArray,true);
   int Data=CopyRates(_Symbol,_Period,0,3,PriceArray);
   
   //defining AD
   int ADDef=iAD(_Symbol,_Period,VOLUME_TICK);
   
   //filling the ADArray with ADDef
   CopyBuffer(ADDef,0,0,3,ADArray);
   
   //calculating current AD and previous values
   int ADCurrrentValue=NormalizeDouble(ADArray[0],5);
   int ADPrevValue=NormalizeDouble(ADArray[1],5);
   
   //calculating current and previous highs
   double CurrentHighValue=NormalizeDouble(PriceArray[2].high,5);         
   double PrevHighValue=NormalizeDouble(PriceArray[1].high,5); 
   
   //Comparing two values and giving signal
   //Strong Up move
   if(ADCurrrentValue > ADPrevValue && CurrentHighValue>PrevHighValue)
   {
      Comment("Strong Up Move During The Uptrend","\n","AD current value is: ",ADCurrrentValue,
      "\n","AD previous value is: ",ADPrevValue,
      "\n","Current high value is: ",CurrentHighValue,
      "\n","Previous high value is: ",PrevHighValue);    
   }   
   
   //in case of divergence
   if(ADCurrrentValue < ADPrevValue && CurrentHighValue>PrevHighValue)
   {
      Comment("Bearish Divergence","\n","AD current value is: ",ADCurrrentValue,
      "\n","AD previous value is: ",ADPrevValue,
      "\n","Current low value is: ",CurrentHighValue,
      "\n","Previous low value is: ",PrevHighValue);      
   }   
  }
//+------------------------------------------------------------------+

Voici les différences dans ce code :

double ADArray[];
MqlRates PriceArray[];
ArraySetAsSeries(ADArray,true);
int Data=CopyRates(_Symbol,_Period,0,3,PriceArray);
int ADDef=iAD(_Symbol,_Period,VOLUME_TICK);

CopyBuffer(ADDef,0,0,3,ADArray);
int ADCurrrentValue=NormalizeDouble(ADArray[0],5);
int ADPrevValue=NormalizeDouble(ADArray[1],5);

double CurrentHighValue=NormalizeDouble(PriceArray[2].high,5);         
double PrevHighValue=NormalizeDouble(PriceArray[1].high,5); 
if(ADCurrrentValue > ADPrevValue && CurrentHighValue>PrevHighValue)
{
 Comment("Strong Up Move During The Uptrend","\n","AD current value is: ",ADCurrrentValue,
 "\n","AD previous value is: ",ADPrevValue,
 "\n","Current high value is: ",CurrentHighValue,
 "\n","Previous high value is: ",PrevHighValue);    
} 
if(ADCurrrentValue < ADPrevValue && CurrentHighValue>PrevHighValue)
{
 Comment("Bearish Divergence","\n","AD current value is: ",ADCurrrentValue,
 "\n","AD previous value is: ",ADPrevValue,
 "\n","Current low value is: ",CurrentHighValue,
 "\n","Previous low value is: ",PrevHighValue);      
} 

Après avoir compilé ce code, nous pouvons le trouver dans la fenêtre du Navigateur dans le dossier Expert Advisors :

AD dans le Navigateur 4

En double-cliquant pour l'exécuter, sa fenêtre apparaît :

Fenêtre de l’AD Simple - tendance haussière

Cliquez sur OK pour l'attacher au graphique :

AD Simple - tendance haussière attaché

Voici un exemple de signaux générés, avec les fenêtres des données des valeurs actuelles et précédentes :

Mouvement fort,

Données actuelles:

 AD Simple - Tendance haussière - signal de forte hausse - données actuelles

Données précédentes :

AD Simple - Tendance haussière - signal de forte hausse - données précédentes

Divergence baissière,

Données actuelles:

AD Simple - Tendance haussière - signal baissier - données actuelles

Données précédentes :

AD Simple - Tendance haussière - signal baissier - données actuelles

Voici le code complet pour créer le système de trading pour cette stratégie :

//+------------------------------------------------------------------+
//|                                        Simple AD - 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()
  {
   //creating a string variable for signal
   string signal="";
   
   //Create two arrays for AD and price
   double ADArray[];
   MqlRates PriceArray[];
   
   //sorting the two arrays
   ArraySetAsSeries(ADArray,true);
   int Data=CopyRates(_Symbol,_Period,0,3,PriceArray);
   
   //defining AD
   int ADDef=iAD(_Symbol,_Period,VOLUME_TICK);
   
   //filling the ADArray with ADDef
   CopyBuffer(ADDef,0,0,3,ADArray);
   
   //calculating current AD and previous values
   int ADCurrrentValue=NormalizeDouble(ADArray[0],5);
   int ADPrevValue=NormalizeDouble(ADArray[1],5);
   
   double CurrentLowValue=NormalizeDouble(PriceArray[2].low,5);         
   double PrevLowValue=NormalizeDouble(PriceArray[1].low,5); 
   
   //Comparing two values and giving signal
   //Strong down move
   if(ADCurrrentValue < ADPrevValue && CurrentLowValue<PrevLowValue)
   {
      Comment("Strong Down Move During The Downtrend","\n","AD current value is: ",ADCurrrentValue,
      "\n","AD previous value is: ",ADPrevValue,
      "\n","Current low value is: ",CurrentLowValue,
      "\n","Previous low value is: ",PrevLowValue);      
   }
   
   //in case of divergence
   if(ADCurrrentValue > ADPrevValue && CurrentLowValue<PrevLowValue)
   {
      Comment("Bullish Divergence","\n","AD current value is: ",ADCurrrentValue,
      "\n","AD previous value is: ",ADPrevValue,
      "\n","Current low value is: ",CurrentLowValue,
      "\n","Previous low value is: ",PrevLowValue);      
   }  
  }
//+------------------------------------------------------------------+

Les différences dans ce code sont les mêmes :

if(ADCurrrentValue < ADPrevValue && CurrentLowValue<PrevLowValue)
{
 Comment("Strong Down Move During The Downtrend","\n","AD current value is: ",ADCurrrentValue,
 "\n","AD previous value is: ",ADPrevValue,
 "\n","Current low value is: ",CurrentLowValue,
 "\n","Previous low value is: ",PrevLowValue);      
}
if(ADCurrrentValue > ADPrevValue && CurrentLowValue<PrevLowValue)
{
 Comment("Bullish Divergence","\n","AD current value is: ",ADCurrrentValue,
 "\n","AD previous value is: ",ADPrevValue,
 "\n","Current low value is: ",CurrentLowValue,
 "\n","Previous low value is: ",PrevLowValue);      
} 

Après avoir compilé ce code, l'EA peut être trouvé dans la fenêtre du Navigateur :

 AD dans le Navigateur 5

Après l'avoir glissé-déposé sur le graphique, sa fenêtre est affichée :

Fenêtre de l’AD Simple - tendance baissière

Cliquez sur OK pour attacher l'EA au graphique :

AD Simple - tendance baissière attaché

Voici un exemple de signaux générés, avec les fenêtres des données des valeurs actuelles et précédentes selon cette stratégie,

Mouvement baissier fort,

Données actuelles:

AD Simple - Tendance baissière - signal de forte baisse - données actuelles

Données précédentes :

AD Simple - Tendance baissière - signal de forte baisse - données précédentes

Divergence haussière,

Données actuelles:

AD Simple - Tendance baissière - signal de divergence haussière - données actuelles

Données précédentes :

AD Simple - Tendance baissière - signal de divergence haussière - données actuelles


Conclusion

Dans le présent article, j'ai expliqué l'indicateur Accumulation/Distribution (AD) qui est l'un des indicateurs basés sur le volume. Nous avons appris ce qu'est l'indicateur AD, ce qu'il mesure et comment le calculer manuellement pour apprendre le concept qui le sous-tend. Nous avons également découvert comment nous pouvons l’utiliser dans des stratégies simples. Ces stratégies sont : mouvement AD Simple, Force AD Simple, AD Simple - tendance haussière et AD Simple - tendance baissière. Nous avons ensuite conçu un plan pour chaque stratégie afin de créer un système de trading pour chacune d'entre elles. Après cela, nous avons mis en œuvre un système de trading en créant un EA en MQL5 pour chaque stratégie afin de les exécuter au moyen de la plateforme de trading MetaTrader 5. Et nous avons vu des exemples de signaux générés pour chaque stratégie. Le terminal nous permet d'automatiser ces stratégies pour générer des signaux. C'est une fonctionnalité magnifique car l’ordinateur négocie pour nous, ou du moins nous donne des informations claires, précises et rapides pour nous aider à améliorer nos décisions de trading sans impliquer d'émotions pouvant être nocives.

Il est important de mentionner à nouveau que vous devez tester toute stratégie avant de l'utiliser sur votre compte réel. Elle peut ne pas vous être utile ou appropriée car rien ne convient à tout le monde, ou du moins vous pouvez trouver qu'elle a besoin d'une optimisation pour obtenir de meilleurs résultats. L'objectif principal de cet article, et des autres de cette série, est d'apprendre à coder des stratégies simples en utilisant MQL5 pour les indicateurs techniques les plus populaires. J'espère que vous appliquerez les connaissances acquises et essayerez de coder par vous-même. La pratique est un facteur important de tout processus d'apprentissage.

J'espère que vous avez trouvé cet article utile et perspicace sur ce sujet, ou même sur tout autre sujet connexe. Si vous souhaitez lire plus d'articles similaires, vous pouvez consulter mes articles précédents de cette série pour apprendre à concevoir un système de trading simple basé sur les indicateurs techniques les plus populaires.