Discussion de l'article "Apprenez à concevoir un système de trading basé sur l’ADX" - page 2

 
Bonjour, je viens de commencer à apprendre l'adx et le dmi depuis quelques mois. j'aimerais qu'il y ait un ea pour cet indicateur. étant donné qu'il s'agit d'un indicateur retardé, le timeframe M15 est peut-être mieux adapté. pouvez-vous en créer un ? où puis-je vous contacter pour connaître les conditions ? merci.
 

Bonjour Mohamed,

Au lieu de :

   double ADXArray0[];
   double ADXArray1[];
...
   double ADXValue=NormalizeDouble(ADXArray0[0],2);
   double ADXValueLast=NormalizeDouble(ADXArray1[1],2);

Ne serait-ce pas suffisant ?

      double ADXArray[];
...
      double ADXValue=NormalizeDouble(ADXArray[0],2);
      double ADXValueLast=NormalizeDouble(ADXArray[1],2);

Salutations,

Juan Luis

Learn how to design a trading system by ADX
Learn how to design a trading system by ADX
  • www.mql5.com
In this article, we will continue our series about designing a trading system using the most popular indicators and we will talk about the average directional index (ADX) indicator. We will learn this indicator in detail to understand it well and we will learn how we to use it through a simple strategy. By learning something deeply we can get more insights and we can use it better.
 
Juan Luis De Frutos Blanco #:

Bonjour Mohamed,

Au lieu de :

Ne serait-ce pas suffisant ?

Je vous prie d'agréer, Madame, Monsieur, l'expression de mes salutations distinguées,

Juan Luis

Bonjour Juan,

Vous avez raison, cela peut aussi être comme vous l'avez mentionné.


Je vous remercie,

 
Bon article : l'un des piliers de l'EA que je suis en train de construire.
Merci Mohamed. 🏅🏅🏅

 
J'ai l'idée que lorsque la ligne ADX est supérieure à 25 et que le dmi plus croise le dmi moins, la couleur de la bougie devient verte, ce qui indique que la tendance est haussière et vice versa.
 
1
 

Excellent article ! Cependant, j'ai repéré une erreur dans l'un d'entre eux, et j'ai également repéré une opportunité pour une astuce. L'erreur concerne les CopyBuffers, et l'utilisation du même index de tampon pour le même handle. Un handle d' indicateur dans MQL5 ne peut accéder à un tampon spécifique qu'en utilisant son index de tampon unique correspondant dans un appel à la fonction CopyBuffer().


Ainsi, lorsque vous mettez :

CopyBuffer(ADXDef,0,0,3,ADXArray0);
CopyBuffer(ADXDef,0,0,2,ADXArray1);
CopyBuffer(ADXDef,1,0,3,PDIArray);
CopyBuffer(ADXDef,2,0,3,NDIArray);


Il devrait l'être :

CopyBuffer(ADXDef,0,0,3,ADXArray0);
CopyBuffer(ADXDef,1,0,2,ADXArray1);
CopyBuffer(ADXDef,2,0,3,PDIArray);
CopyBuffer(ADXDef,3,0,3,NDIArray);


Les points clés concernant les poignées d'indicateurs et les tampons sont les suivants :
  • Indexation unique: Chaque poignée d'indicateur gère un ensemble de tampons internes, chacun identifié par un index unique (commençant à 0).
  • Une poignée, un index: Lorsque vous utilisez CopyBuffer(handle, buffer_index, ...) , vous spécifiezle tampon unique associé à ce handle dont vous voulez copier les données.
  • Appels multiples: Si un indicateur a plusieurs tampons de données (par exemple, une bande haute et une bande basse d'un canal), vous devez appeler CopyBuffer() plusieurs fois, en utilisant le même handle mais avec des index de tampons différents (par exemple, index 0 pour la bande haute, index 1 pour la bande basse).
Vous ne pouvez pas avoir deux appels distincts à CopyBuffer pour le même index de tampon dans le même handle qui, d'une manière ou d'une autre, pointent vers des données différentes, car l'index est l'identifiant unique de la série de données dans ce handle.


Je suppose qu'il s'agit d'une erreur de frappe, mais j'ai pensé qu'il fallait la signaler au cas où quelqu'un d'autre serait confus. C'était correct dans le code complet, mais pas dans l'exemple.


Et maintenant, la petite astuce...

Ce n'est pas grand-chose, mais cela vous évitera certainement d'appuyer inutilement sur une touche lorsque vous écrivez :


 Comment("Simple ADX System - Signal is ",signal,"\n""ADX Value is ", ADXValue,
   "\n""ADX Value Last is ", ADXValueLast, "\n""+DI Value is ", PDIValue,
   "\n""-DI Value is ", NDIValue);


Il y a des guillemets supplémentaires dont vous n'avez pas besoin. Pour simplifier, vous pourriez faire ceci :


 Comment("Simple ADX System - Signal is ",signal,"\nADX Value is ", ADXValue,
   "\nADX Value Last is ", ADXValueLast, "\n+DI Value is ", PDIValue,
   "\n-DI Value is ", NDIValue);


A part cela, j'ai trouvé l'article très instructif et détaillé.


 

La seule autre chose que j'ajouterais ici est la gestion des erreurs dans OnInit() et DeOnit(), et changer le nom de la variable de ADXDef à h_ADXDef (ou handle_ADXDef), de sorte que ce soit plus clair à la lecture du code et que ce soit un meilleur identifiant qui montre son but spécifique.

In OnInit() :


  if(h_ADXDef == INVALID_HANDLE)
   {
      Print("Error creating indicator handles: ", GetLastError());
      return(INIT_FAILED);
   }


Et, dans DeOninit() :


if(h_ADXDef != INVALID_HANDLE) IndicatorRelease(h_ADXDef);