English Русский 中文 Español Deutsch 日本語 Português 한국어 Français Türkçe
preview
Impara come progettare un sistema di trading tramite Accumulazione/Distribuzione (AD)

Impara come progettare un sistema di trading tramite Accumulazione/Distribuzione (AD)

MetaTrader 5Trading | 22 novembre 2022, 10:09
508 0
Mohamed Abdelmaaboud
Mohamed Abdelmaaboud

Introduzione

La nostra serie di articoli è dedicata a conoscere nel dettaglio gli indicatori tecnici più popolari e ad applicarli sotto forma di semplici strategie. I sistemi di trading per queste strategie sono progettati utilizzando MQL5 per eseguirli nella piattaforma di trading MetaTrader 5. In questo articolo, scopriremo Accumulazione/Distribuzione (AD), un nuovo indicatore tecnico basato sui volumi che può mostrarci con un'altra prospettiva lo strumento. Tratteremo questo indicatore attraverso i seguenti argomenti:

  1. Definizione di AD
  2. Strategia con AD
  3. Schema della strategia con AD
  4. Sistema di trading con AD
  5. Conclusioni

In primo luogo, impareremo nel dettaglio questo nuovo indicatore tecnico e cosa misura, nonché su come possiamo usarlo e calcolarlo manualmente per conoscerne il concetto principale alla base. Quindi, progetteremo un sistema di trading basato su di esso. Applicheremo questo calcolo ad un esempio per comprendere meglio. Dopo aver appreso in dettaglio le basi dell'indicatore AD, impareremo come utilizzarlo in semplici strategie. Quindi progetteremo uno schema per ciascuna strategia menzionata per aiutarci a progettare e creare un sistema di trading per loro. Dopo aver progettato tutti gli schemi per tutte le strategie semplici menzionate, arriveremo alla parte più interessante di questo articolo poiché impareremo come creare o scrivere il nostro codice MQL5 per creare un sistema di trading da poter eseguire nella piattaforma di trading MetaTrader 5.

A quel punto, tratteremo in dettaglio l'indicatore AD imparando come usarlo. Successivamente, creeremo un sistema di trading per le strategie semplici menzionate. Ti consiglio di provare ad applicare ciò che impari scrivendo da solo i codici citati in quanto ciò ti aiuterà ad approfondire la tua comprensione perché l'obiettivo principale di questo articolo (proprio come quello degli altri di questa serie) è fornire spunti ai programmatori alle prime armi su come codificare o progettare sistemi di trading basati sugli indicatori più diffusi. Inoltre, utilizzeremo MetaQuotes Language (MQL5) per scrivere i nostri codici in MetaEditor integrato in MetaTrader 5. Se vuoi sapere come installare MetaTrader 5 o come utilizzare MetaEditor, leggi l’argomento Scrittura del codice MQL5 nel MetaEditor dal mio precedente articolo.

Avvertenza: Tutte le informazioni sono fornite "così come sono" solo a scopo didattico e non sono preparate per scopi commerciali o di consulenza. Le informazioni non garantiscono alcun tipo di risultato. Se scegliete di utilizzare questi materiali su uno qualsiasi dei vostri conti di trading, lo farete a vostro rischio e pericolo e sarete gli unici responsabili.

Ora, esaminiamo i nostri argomenti per fare un nuovo miglio nel nostro viaggio di apprendimento sul trading e MQL5.

Definizione di AD

Qui parlerò nel dettaglio dell'indicatore Accumulazione/Distribuzione (AD) e definirò cos'è, cosa misura, come possiamo calcolarlo e quale concetto sta dietro di esso. La linea dell’indicatore AD è stato sviluppato da Marc Chaikin. È un indicatore basato sui volumi, il che significa che il volume viene utilizzato nel suo calcolo e ci fornisce informazioni sul volume che è un aspetto importante nel trading in generale poiché misura il flusso cumulativo di denaro in entrata e in uscita dello strumento. Inoltre, utilizza il volume per confermare il trend o per avvisare dell'inversione. Se vuoi saperne di più sul trend, sui suoi tipi e su come possiamo identificarlo, leggi la sottosezione sulla definizione del trend nell'articolo precedente.

Proprio come qualsiasi indicatore cumulativo, la linea AD è il totale corrente del Volume del Flusso di Denaro di ciascun periodo. Questo fatto diventa molto chiaro durante il calcolo dell'indicatore. Vediamo come possiamo calcolare la linea AD attraverso i seguenti passaggi.

Ci sono tre passaggi per calcolare la linea AD:

  1. Calcolo del moltiplicatore del flusso di denaro = ((chiusura-minimo)-(massimo-chiusura))/(massimo-minimo)
  2. Calcolo del volume del flusso di denaro = moltiplicatore del flusso di denaro * volume del periodo
  3. Linea AD = valore della linea AD precedente + volume del flusso di denaro corrente

Ora dobbiamo considerare un esempio per applicare questi passaggi per calcolare la linea AD avendo i seguenti dati per uno strumento:

Giorno Massimo Minimo Chiusura Volume
1 55 53 54 12000
2 56 54 55 10000
3 61 59 60 15000
4 67 64 65 20000
5 63 58 60 10000
6 58 52 55 5000
7 64 58 60 7000
8 52 47 50 7500
9 52 48 48 8000
10 50 48 49 5000
11 49 47 48 6000
12 48 47 47 7500
13 50 46 48 9000
14 52 45 47 10000
15 55 46 49 7000
16 53 45 47 7500
17 51 43 46 6000
18 50 42 44 5000
19 50 43 45 15000

Ora dobbiamo calcolare la linea AD in base ai dati forniti in precedenza. Il calcolo sarà come il seguente:

Per prima cosa, calcoleremo il moltiplicatore del flusso di denaro = ((chiusura-minimo)-(massimo-chiusura))/(massimo-minimo), quindi lo troveremo come nella figura seguente:

Calcolo AD

In secondo luogo, calcoleremo il volume del flusso di denaro = moltiplicatore del flusso di denaro * volume del periodo, quindi possiamo trovarlo come nella figura seguente:

Calcolo AD 1

Terzo, calcoleremo la linea AD = valore della linea AD precedente + volume del flusso di denaro attuale, quindi lo troveremo uguale alla figura seguente:

Calcolo AD 2

Ora abbiamo calcolato manualmente la linea AD, non è necessario farlo, ma lo abbiamo fatto per comprendere il concetto alla base dell'indicatore AD. Attualmente, se vogliamo vedere l'indicatore AD, tutto ciò che dobbiamo fare è sceglierlo tra gli indicatori disponibili nel terminale MetaTrader 5.

Innanzitutto, mentre apri MetaTrader 5, fai clic sulla scheda Inserisci --> Indicatori --> Volumi --> Accumulazione/Distribuzione

 Inserisci AD

Dopo aver scelto l'indicatore, verrà aperta la seguente finestra per i parametri dell'indicatore AD:

Finestra di inserimento AD

1. Tipi di volumi: Tick o Reale.

2. Colore della linea

3. Tipi di linea AD.

4. Spessore della linea AD.

Dopo aver determinato cosa è necessario utilizzare e aver premuto OK, verrà visualizzata la figura seguente per l'indicatore AD:

AD allegato

Ora, dobbiamo sapere come possiamo usare l'indicatore AD.


Strategia con AD

In questa sezione impareremo come possiamo utilizzare l'indicatore AD a nostro favore per migliorare il nostro trading attraverso semplici strategie. Spero che tu possa ottenere nuove idee che potrebbero essere utili per il tuo trading.

Potresti scoprire che queste strategie devono essere ottimizzate. Questo va bene perché l'obiettivo principale qui è condividere strategie semplici che possono essere utili a farci capire il concetto di base dietro l'indicatore AD e come possiamo creare un sistema di trading per loro tramite MQL5. Quindi devi testare ogni strategia prima di usarla sul tuo conto reale in quanto potrebbe essere necessario ottimizzarla o modificarla. Inoltre, puoi modificare la lunghezza dei periodi utilizzati in modo che sia più significativa o adatta al tuo trading.

Ora vedremo semplici strategie che possono essere utilizzate con l'indicatore AD.

  • Strategia uno - movimento AD semplice:

Secondo questa strategia, dobbiamo conoscere il movimento della linea AD, se è in aumento o in diminuzione. Eseguiremo un semplice confronto tra il valore AD attuale e il valore AD precedente. Se il valore AD attuale è maggiore del precedente, la linea AD è in aumento e viceversa. Se il valore corrente è inferiore al precedente, la linea AD è in calo.

Semplicemente, possiamo dire:

AD attuale > AD precedente --> la linea AD è in aumento

AD attuale < AD precedente --> la linea AD è in calo

  • Strategia due - forza AD semplice:

Secondo questa strategia, dobbiamo sapere se il movimento attuale della linea AD è forte o debole e lo faremo mediante un semplice confronto tra il valore AD attuale e il valore massimo o minimo degli ultimi dieci valori AD. Se il valore attuale è maggiore del valore massimo dei 10 valori AD precedenti, allora il valore AD attuale è forte e viceversa. Se il valore corrente è inferiore al valore minimo dei 10 valori AD precedenti, il valore AD corrente è debole.

Semplicemente, sarà lo stesso del seguente:

AD attuale > Valore massimo dei precedenti 10 valori AD -> il valore corrente di AD è forte

AD attuale < Valore minimo dei 10 valori AD precedenti --> il valore corrente di AD è debole

  • Strategia tre: AD semplice - trend rialzista:

Secondo questa strategia, dobbiamo sapere se l'attuale movimento al rialzo durante il trend rialzista è forte o se c'è una divergenza ribassista nella sua forma semplice. La divergenza ribassista è semplicemente quando vediamo che il prezzo crea un nuovo massimo ma l'indicatore non conferma questo movimento muovendosi più in basso. Lo verificheremo confrontando gli ultimi due valori consecutivi di AD e gli ultimi due valori massimi consecutivi solo per semplicità, ma è possibile modificare il periodo in esame per ottenere dati più significativi. Quindi, qui dobbiamo trarre vantaggio dal concetto che afferma che è meglio vedere il volume seguire il trend: durante il trend rialzista, il volume aumenta con i movimenti al rialzo e diminuisce in caso di correzione.

Confronteremo il valore AD attuale con quello precedente e il prezzo massimo attuale con il prezzo massimo precedente. Se il valore AD attuale è maggiore del valore AD precedente e il massimo attuale è maggiore del massimo precedente, allora c'è un forte movimento al rialzo durante il trend rialzista. Oppure, se il valore AD attuale è inferiore al valore AD precedente e il massimo attuale è maggiore del massimo precedente, c'è una divergenza ribassista.

Semplicemente, sarà lo stesso del seguente:

L'attuale AD > dell'AD precedente e il massimo attuale > del massimo precedente --> Forte movimento al rialzo durante il trend rialzista

L'attuale AD < dell'AD precedente e il massimo attuale > del massimo precedente --> Divergenza ribassista

  • Strategia quattro: AD semplice - trend ribassista:

Questa strategia sarà l'opposto della strategia AD semplice - trend rialzista, dobbiamo sapere se l'attuale movimento al ribasso durante il trend ribassista è forte o se c'è una divergenza rialzista nella sua forma semplice. La divergenza rialzista è quando vediamo che il prezzo crea un nuovo minimo ma l'indicatore non conferma questo movimento muovendosi più in alto e lo verificheremo confrontando gli ultimi due valori consecutivi dell'indicatore AD e gli ultimi due valori consecutivi del minimo. Se il valore AD attuale è inferiore al valore AD precedente e il minimo attuale è inferiore al minimo precedente, si verifica un forte movimento al ribasso durante il trend ribassista. Oppure, se il valore AD attuale è maggiore del valore AD precedente e il minimo attuale è inferiore al minimo precedente, c'è una divergenza rialzista.

Sarà semplice come il seguente:

L'attuale AD < dell'AD precedente e il minimo attuale < del minimo precedente --> Forte movimento al ribasso durante il trend ribassista

L'attuale AD > dell'AD precedente e il minimo attuale < del minimo precedente --> Divergenza rialzista 


Schema della strategia con AD

Ora è il momento di organizzare i nostri passaggi per creare il nostro sistema di trading perché in questa parte realizzeremo uno schema passo-passo per ogni strategia in modo da aiutarci a generare il nostro sistema di trading senza intoppi. Credo che questo passaggio sia molto importante in qualsiasi processo di creazione di un sistema di trading. Quindi, progetteremo uno schema per ciascuna strategia per sapere cosa dobbiamo fare e saranno come i seguenti.

In primo luogo, dobbiamo progettare uno schema per una strategia semplice che presenti il valore corrente AD come commento sul grafico come base per le strategie future. Lo chiameremo AD semplice e tutto ciò che vogliamo che questo sistema faccia è solo visualizzare il valore AD corrente sul grafico come commento e quello che segue è lo schema per farlo:

Schema AD semplice 

Ora, dobbiamo progettare uno schema per ciascuna strategia menzionata.

  • Strategia uno - movimento AD semplice:

Per ogni tick, abbiamo bisogno che il sistema di trading controlli continuamente i due valori dell'AD corrente e precedente, mentre viene eseguito, e decida se quello attuale è maggiore del precedente. Dobbiamo restituire un commento sul grafico con linea AD in aumento, il valore corrente di AD e il valore precedente di AD. Ogni valore sarà in una riga separata. Se invece il valore corrente è inferiore al precedente, dobbiamo restituire un commento al grafico con linea AD in diminuzione, il valore corrente AD e il valore precedente AD. Ogni valore è in una riga separata e il seguente è lo schema per creare questo sistema di trading:

Schema movimento AD semplice

  • Strategia due - forza AD semplice:

Secondo questa strategia, dobbiamo progettare un sistema di trading in grado di controllare continuamente ogni tick tre valori se eseguito. I tre valori sono il valore AD attuale, il valore massimo degli ultimi dieci valori AD e il valore minimo degli ultimi dieci valori AD. Se il valore AD corrente è maggiore del valore massimo, è necessario che il sistema restituisca la notifica appropriata, il valore corrente AD, il valore AD Max e il valore AD Min. Ogni valore è impostato in una riga separata. Se il valore AD corrente è inferiore al valore minimo, è necessario che il sistema restituisca la notifica appropriata, il valore corrente AD, il valore AD Max e il valore AD Min. Ogni valore è impostato in una riga separata.

Quello che segue è lo schema per farlo:

Schema di forza AD semplice

  • Strategia tre AD semplice - trend rialzista:

Abbiamo bisogno di creare un sistema di trading per questa strategia in grado di controllare quattro valori: AD attuale, AD precedente, massimo attuale e massimo precedente, ed eseguirlo ad ogni tick durante il trend rialzista. Quindi, abbiamo bisogno che il sistema decida se l'attuale AD è maggiore dell'AD precedente e se l'attuale massimo è maggiore del massimo precedente. Abbiamo bisogno che il sistema restituisca un commento sul grafico con forte movimento al rialzo durante il trend rialzista, AD corrente, AD precedente, massimo attuale e massimo precedente. Ogni valore è impostato in una riga separata. Un altro caso da segnalare è se l'AD attuale è inferiore al precedente e il massimo attuale è maggiore del massimo precedente. Abbiamo bisogno che il sistema restituisca divergenza ribassista, AD corrente, AD precedente, i massimi corrente e precedente e ciascun valore in una riga separata.

Quello che segue è lo schema per creare questo sistema di trading:

Schema AD semplice trend rialzista

  • Strategia quattro AD semplice - trend ribassista:

Abbiamo bisogno di creare un sistema di trading per questa strategia in grado di controllare quattro valori: l'AD attuale, l'AD precedente, il minimo attuale e il minimo precedente, ed eseguirlo ad ogni tick durante il trend ribassista. Quindi, è necessario che il sistema decida se l'AD corrente è inferiore all'AD precedente e se il minimo corrente è inferiore al minimo precedente. È necessario che il sistema restituisca un commento sul grafico con forte movimento al ribasso durante il trend ribassista, AD corrente, AD precedente, minimo corrente e minimo precedente a ciascun valore in una riga separata. Un altro caso che dobbiamo segnalare è se l'attuale AD è maggiore del precedente e il minimo corrente è inferiore al minimo precedente. Abbiamo bisogno che il sistema restituisca un commento con divergenza rialzista, AD attuale, AD precedente, i minimi attuale e precedente e ciascun valore in una riga separata.

Quello che segue è lo schema per creare questo sistema di trading:

Schema AD semplice trend ribassista


Sistema di trading delle strategie AD

In questa interessante sezione impareremo come creare un sistema di trading dopo aver compreso e progettato cosa è necessario fare. Inizieremo con la creazione di un semplice sistema AD restituendo solo il valore corrente AD come base per le nostre strategie. Quanto segue è come codificarlo:

  • Creazione di un array per l'AD utilizzando la funzione "double" per rappresentare il valore in una parte frazionaria.
double ADArray[];
  • Ordinamento dell'array dai dati più recenti utilizzando la funzione ArraySetAsSeries.
ArraySetAsSeries(ADArray,true);
  • Definizione dell'AD utilizzando la funzione iAD dopo aver creato una variabile intera ADDef. La funzione iAD restituisce l'handle dell'indicatore di Accumulazione/Distribuzione ei suoi parametri sono (simbolo, periodo e volume applicato).
int ADDef=iAD(_Symbol,_Period,VOLUME_TICK);
  • Riempimento di ADArray utilizzando la funzione CopyBuffer per restituire il conteggio dei dati copiati e i relativi parametri sono (handle dell'indicatore, numero del buffer, ora di inizio, ora di fine e buffer).
CopyBuffer(ADDef,0,0,3,ADArray);
  • Calcolo del valore attuale di AD usando la funzione NormalizeDouble che restituisce un valore di tipo double dopo aver creato una variabile intera per ADValue. 
int ADValue=NormalizeDouble(ADArray[0],5);
  • Creazione di un commento sul grafico utilizzando la funzione Comment.
Comment("AD Value is: ",ADValue);

Quello che segue è il codice completo dell’AD semplice:

//+------------------------------------------------------------------+
//|                                                    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);  
  }
//+------------------------------------------------------------------+

Dopo aver compilato questo codice, possiamo trovarlo nella finestra del Navigatore all'interno della cartella Expert Advisors:

AD Nav

Possiamo eseguirlo trascinando e rilasciando l'EA sul grafico. Si aprirà la seguente finestra:

Finestra AD semplice

Dopo aver fatto clic su OK, verrà allegato al grafico come mostrato di seguito:

AD semplice allegatoAD semplice allegato

Quello che segue è un esempio del commento generato in base a questo EA dal test:

Test segnale AD semplice

Se dobbiamo assicurarci che l'EA generi lo stesso valore dell'indicatore MetaTrader 5 originale, possiamo inserire l'indicatore e collegare l'EA contemporaneamente. Possiamo vedere che sono uguali:

AD semplice - Stesso segnale

  • Strategia uno - movimento AD semplice:

Quello che segue è il codice completo per creare un EA che può essere eseguito e genera i segnali desiderati secondo questa strategia:

//+------------------------------------------------------------------+
//|                                           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);
   }  
  }
//+------------------------------------------------------------------+

Il codice precedente è diverso dal codice base e le seguenti sono le differenze:

  • Calcolo dei due valori dell’AD attuale e precedente:
int ADCurrrentValue=NormalizeDouble(ADArray[0],5);
int ADPrevValue=NormalizeDouble(ADArray[1],5);
  • Impostazione delle condizioni e dei commenti generati secondo questa strategia:
    • Linea AD in aumento:
if(ADCurrrentValue>ADPrevValue)
{
 Comment("AD line is rising","\n","AD current value is: ",ADCurrrentValue,
 "\n","AD previous value is: ",ADPrevValue);
}
    • Linea AD in calo:
if(ADCurrrentValue<ADPrevValue)
{
 Comment("AD line is declining","\n","AD current value is: ",ADCurrrentValue,
 "\n","AD previous value is: ",ADPrevValue);
} 

Dopo aver compilato questo codice, possiamo trovare l'EA nella finestra del Navigatore:

AD Nav 2

Facendo doppio clic su di esso, possiamo trovare la seguente finestra:

Finestra del movimento AD semplice

Dopo aver premuto OK, verrà allegato al grafico:

Movimento AD semplice allegato

Quello che segue è un esempio dei segnali generati con la presentazione di una finestra dei dati attuali e precedenti:

Linea AD in aumento,

Dati attuali: 

Movimento AD semplice - AD crescente - corrente 

Dati precedenti:

Movimento AD semplice - AD crescente - precedente

AD in calo,

Dati attuali:

Movimento AD semplice - AD in calo - corrente

Dati precedenti:

 Movimento AD semplice - AD in calo - precedente

  • Strategia due - forza AD semplice:

Quello che segue è il codice completo per creare un EA che esegua la nostra strategia di 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);
   }
  }
//+------------------------------------------------------------------+

Il codice precedente presenta molte differenze in relazione alla strategia e a ciò di cui abbiamo bisogno che l'EA faccia, e quanto segue è un chiarimento di queste differenze:

  • Definizione dei valori massimo e minimo di AD usando le funzioni ArrayMaximum e ArrayMinimum dopo aver creato le variabili intere ADMaxValue e ADMinValue. ArrayMaximum restituisce un indice dell’elemento trovato tenendo in considerazione il seriale dell'array e ricerca l'elemento più grande, mentre i suoi parametri sono l'array numerico, l'indice da cui iniziare e il numero di elementi da cercare. ArrayMinimum è lo stesso di ArrayMaximum ma cerca l'elemento più piccolo.
int ADMax =ArrayMaximum(ADArray,1,10);
int ADMin =ArrayMinimum(ADArray,1,10);
  • Calcolo di ADMaxValue e ADMinValue dopo aver creato variabili intere per loro:
int ADMaxValue=ADArray[ADMax];
int ADMinValue=ADArray[ADMin];
  • Impostazione delle condizioni della strategia e dei commenti in base a ciascuna condizione,
    • Valore AD forte:
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);
}
    • Valore AD debole:
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);
}

Dopo aver compilato questo codice, l'EA sarà disponibile nel Navigatore:

AD Nav 3

 

Dopo averlo trascinato e rilasciato sul grafico, apparirà la sua finestra:

Finestra forza AD semplice

Dopo aver premuto OK, verrà allegato al grafico:

Forza AD semplice allegato

Quello che segue è un esempio tratto dal test di segnali generati:

AD forte:

Segnale forza AD semplice - forte

AD debole:

Segnale forza AD semplice - debole

  • Strategia tre: trend rialzista di AD semplice:

Quello che segue è il codice completo per creare un sistema di trading per questa strategia:

//+------------------------------------------------------------------+
//|                                          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);      
   }   
  }
//+------------------------------------------------------------------+

Differenze in questo codice:

  • Creazione di due array: uno per AD utilizzando la funzione 'double' e un altro per il prezzo utilizzando la funzione MqlRates che memorizza le informazioni sui prezzi.
double ADArray[];
MqlRates PriceArray[];
  • Ordinamento di due array, uno per AD utilizzando la funzione ArraySetAsSeries e un altro per il prezzo utilizzando la funzione CopyRates per ottenere i dati storici della struttura MqlRates dopo aver creato una variabile intera per Data.
ArraySetAsSeries(ADArray,true);
int Data=CopyRates(_Symbol,_Period,0,3,PriceArray);
  • Definizione di AD, riempimento dell'array AD:
int ADDef=iAD(_Symbol,_Period,VOLUME_TICK);

CopyBuffer(ADDef,0,0,3,ADArray);
  • Calcolo AD attuale, AD precedente, massimo attuale e massimo precedente:
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); 
  • Impostazione delle condizioni della strategia e dei commenti desiderati:
    • Forte movimento:
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);    
} 
    • Divergenza ribassista:
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);      
} 

Dopo aver compilato questo codice, possiamo trovarlo nella finestra del Navigatore tra le cartelle Expert Advisors:

AD Nav 4

Facendo doppio clic per eseguirlo, apparirà la sua finestra:

Finestra di trend rialzista AD semplice

Cliccare su OK per allegarlo al grafico:

Trend rialzista AD semplice allegato

Quello che segue è un esempio di segnali generati con una finestra dei dati dei valori correnti e precedenti:

Forte movimento,

Dati attuali:

 Tendenza rialzista AD semplice - segnale di forte movimento - corrente

Dati precedenti:

Tendenza rialzista AD semplice - segnale di forte movimento - precedente

Divergenza ribassista,

Dati attuali:

Tendenza rialzista AD semplice - segnale ribassista - corrente

Dati precedenti:

Trend rialzista AD semplice - segnale ribassista - precedente

  • Strategia quattro AD semplice - trend ribassista:

Quello che segue è il codice completo per creare un sistema di trading per questa strategia:

//+------------------------------------------------------------------+
//|                                        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);      
   }  
  }
//+------------------------------------------------------------------+

Le differenze in questo codice sono le stesse:

  • Condizioni di questa strategia e dei commenti richiesti:
    • Forte movimento ribassista:
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);      
}
    • Divergenza rialzista:
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);      
} 

Dopo aver compilato questo codice, possiamo trovare l'EA nella finestra del Navigatore:

 AD Nav 5

Dopo averlo trascinato e rilasciato sul grafico, apparirà la sua finestra:

Finestra trend ribassista AD semplice

Fare clic su OK per allegare l'EA al grafico:

Trend ribassista AD semplice allegato

Quello che segue è un esempio di segnali generati con finestra dati dei valori attuali e precedenti secondo questa strategia,

Forte movimento ribassista,

Dati attuali:

Trend ribassista AD semplice - forte segnale di movimento al ribasso - corrente

Dati precedenti:

Trend ribassista AD semplice - forte segnale di movimento al ribasso - precedente

Divergenza rialzista,

Dati attuali:

Trend ribassista AD semplice - segnale di divergenza rialzista - corrente

Dati precedenti:

Trend ribassista AD semplice - segnale di divergenza rialzista - precedente\


Conclusioni

Nel presente articolo, ho trattato l'argomento dell'indicatore di accumulazione/distribuzione (AD), che è uno degli indicatori basati sui volumi. Abbiamo imparato cos'è l'indicatore AD, cosa misura e come possiamo calcolarlo manualmente per apprenderne il concetto alla base. Abbiamo scoperto come utilizzare l'indicatore AD in semplici strategie. Queste strategie sono: movimento AD semplice, forza AD semplice, AD semplice - trend rialzista e AD semplice - trend ribassista. Quindi abbiamo progettato uno schema per ciascuna strategia per creare un sistema di trading per ognuna di esse. Successivamente, abbiamo imparato come implementare un sistema di trading creando un EA in MQL5 per ciascuna strategia per eseguirli tramite la piattaforma di trading MetaTrader 5 e abbiamo visto esempi di segnali generati da ognuna. Il terminale ci consente di automatizzare queste strategie per generare segnali. Questa è una caratteristica magnifica dal momento che il trade algoritmico almeno per noi ci fornisce informazioni chiare, accurate e rapide per aiutarci a migliorare le nostre decisioni di trading senza coinvolgere emozioni che possono essere dannose.

È importante ricordare ancora che devi testare qualsiasi strategia prima di utilizzarla sul tuo conto reale in quanto potrebbe non essere utile o adatta a te perché non c'è nulla che sia adatto a tutte le persone o almeno potresti trovare necessario un'ottimizzazione per ottenere risultati migliori. L'obiettivo principale di questo articolo e di altri in questa serie è imparare a codificare semplici strategie utilizzando MQL5 per gli indicatori tecnici più popolari. Spero che applicherai le conoscenze acquisite e proverai a programmare da solo poiché la pratica è un fattore importante di qualsiasi processo di apprendimento.

Spero che tu abbia trovato questo articolo utile e interessante riguardo all'argomento o anche a qualsiasi argomento correlato. Se vuoi leggere altri articoli simili, puoi dare un'occhiata ai miei precedenti articoli di questa serie per imparare a progettare un semplice sistema di trading basato sugli indicatori tecnici più popolari.

Tradotto dall’inglese da MetaQuotes Ltd.
Articolo originale: https://www.mql5.com/en/articles/10993

Operazioni con matrici e vettori in MQL5 Operazioni con matrici e vettori in MQL5
Le matrici e i vettori sono stati introdotti in MQL5 per un’operatività efficiente con soluzioni matematiche. I nuovi tipi offrono metodi integrati per creare codice conciso e comprensibile, vicino alla notazione matematica. Gli array offrono ampie possibilità, ma ci sono molti casi in cui le matrici sono molto più efficienti.
Scopri come progettare un sistema di trading tramite OBV Scopri come progettare un sistema di trading tramite OBV
Questo è un nuovo articolo che continua la nostra serie per principianti su come progettare un sistema di trading basato su alcuni degli indicatori popolari. Scopriremo un nuovo indicatore che è On Balance Volume (OBV) e impareremo come usarlo e a progettare un sistema di trading basato su di esso.
Sviluppare un Expert Advisor per il trading da zero (Parte 12): Times e Trade (I) Sviluppare un Expert Advisor per il trading da zero (Parte 12): Times e Trade (I)
Oggi creeremo Times & Trade con interpretazione rapida per la lettura del flusso degli ordini. È la prima parte in cui costruiremo il sistema. Nel prossimo articolo completeremo il sistema con le informazioni mancanti. Per implementare questa nuova funzionalità, dovremo aggiungere parecchie cose nuove al codice del nostro Expert Advisor.
Sviluppare un Expert Advisor per il trading da zero (Parte 11): Sistema di ordini incrociati Sviluppare un Expert Advisor per il trading da zero (Parte 11): Sistema di ordini incrociati
In questo articolo creeremo un sistema di ordini incrociati. C'è un tipo di asset che rende la vita dei trader molto difficile — i contratti future. Ma perché rendono la vita difficile?