Discussione sull’articolo "Impara a progettare un sistema di trading tramite ADX" - pagina 2

 
Ciao. ho appena iniziato a studiare adx e dmi da un paio di mesi. e vorrei che ci fosse un'ea per questo. dato che si tratta di un indicatore ritardato. forse il timeframe M15 è più adatto. puoi crearne una? dove posso contattarti per termini e condizioni? grazie
 

Ciao Mohamed,

Invece di:

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

Non sarebbe sufficiente?

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

Saluti,

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 #:

Ciao Mohamed,

Invece di:

Non sarebbe sufficiente?

Saluti,

Juan Luis

Ciao Juan,

Hai ragione, può essere anche come hai detto tu.


Saluti,

 
Ottimo articolo: una delle gambe dell'EA che sto costruendo al momento.
Grazie Mohamed. 🏅🏅🏅

 
Ho idea che quando la linea ADX supera i 25 e il dmi plus incrocia il dmi minus, il colore della candela diventa verde, indicando che il trend è rialzista e viceversa.
 
1
 

Tuttavia, ho riscontrato un errore in uno degli articoli e ho anche individuato un'opportunità per un suggerimento. L'errore riguarda i CopyBuffer e l'utilizzo dello stesso indice di buffer per lo stesso handle. Un handle di indicatore in MQL5 può accedere a un buffer specifico solo utilizzando il suo indice di buffer unico corrispondente in una chiamata alla funzione CopyBuffer().


Quindi, quando si mette:

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


Dovrebbe essere:

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


I punti chiave riguardanti gli handle degli indicatori e i buffer sono:
  • Indicizzazione univoca: Ogni handle di indicatore gestisce un insieme di buffer interni, ciascuno identificato da un indice unico (a partire da 0).
  • Una maniglia, un indice: Quando si usa CopyBuffer(handle, buffer_index, ...) si specificada quale singolo buffer associato a quell' handle si vogliono copiare i dati.
  • Chiamate multiple: Se un indicatore ha più buffer di dati (ad esempio, una banda alta e una banda bassa di un canale), è necessario chiamare CopyBuffer() più volte, utilizzando lo stesso handle ma con indici di buffer diversi (ad esempio, indice 0 per la banda superiore, indice 1 per la banda inferiore).
Non è possibile avere due chiamate CopyBuffer separate per lo stesso indice di buffer all'interno dello stesso handle che in qualche modo puntano a dati diversi, poiché l'indice è l'identificatore unico per le serie di dati all'interno di quell'handle.


Immagino che si tratti di un errore di battitura, ma ho pensato di segnalarlo nel caso in cui qualcun altro si sia confuso. Era corretto nel codice completo, ma non nell'esempio.


Ora il piccolo suggerimento...

Non è un grosso problema, ma sicuramente vi farà risparmiare qualche battuta inutile quando scrivete:


 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);


Ci sono delle virgolette in più che non servono. Per semplificare, si potrebbe fare così:


 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 parte questo, ho trovato l'articolo molto informativo e dettagliato.


 

L'unica altra cosa che aggiungerei è la gestione degli errori in OnInit() e DeOnit(), e cambiare il nome della variabile da ADXDef a h_ADXDef (o handle_ADXDef), in modo che sia più chiaro quando si legge il codice e che sia un identificatore migliore che mostri il suo scopo specifico.

In OnInit():


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


E in DeOninit():


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