Descrizione
La classe CADXOnRingBuffer è stata progettata per calcolare l'indicatore tecnico Average Directional Movement Index (ADX) utilizzando l'algoritmo del ring buffer.
Dichiarazione
class CADXOnRingBufferIntestazione del file
#include <IncOnRingBuffer\CADXOnRingBuffer.mqh>Il file della classe CADXOnRingBuffer.mqh deve essere collocato nella cartella IncOnRingBuffer, che deve essere creata in MQL5\Include\. Due file di esempio utilizzati dalla classe sono allegati alla descrizione. Il file con la classe del ring buffer e la classe della Media Mobile devono anch'essi trovarsi in questa cartella.
Metodi della classe
//--- metodo di inizializzazione: bool Init( // se errore ritorna false, se successo - true int ma_period = 14, // periodo di smussamento della Media Mobile ENUM_MA_METHOD ma_method = MODE_EMA, // metodo di smussamento della Media Mobile int size_buffer = 256, // dimensione del ring buffer, numero di dati memorizzati bool as_series = false // true, se serie temporale, false se indicizzazione normale dei dati di input );
//--- metodo di calcolo basato su serie temporali o buffer di indicatori: int MainOnArray( // restituisce il numero di elementi elaborati const int rates_total, // la dimensione degli array const int prev_calculated, // elementi elaborati nella chiamata precedente const double &high[] // array dei valori massimi const double &low[] // array dei valori minimi const double &close[] // array dei prezzi di chiusura );
//--- metodo di calcolo basato su elementi separati della serie dell'array double MainOnValue( // restituisce il valore ADX per l'elemento impostato const int rates_total, // la dimensione dell'array const int prev_calculated, // elementi elaborati dell'array const int begin, // da dove iniziano i valori significativi dell'array const double high, // valore massimo const double low, // valore minimo const double close, // prezzo di chiusura const int index // l'indice dell'elemento );
//--- metodi di accesso ai dati: int BarsRequired(); // Restituisce il numero necessario di barre per disegnare l'indicatore string NameADX(); // Restituisce il nome dell'indicatore string NameNDI(); // Restituisce il nome della linea dell'indicatore di movimento direzionale negativo string NamePDI(); // Restituisce il nome della linea dell'indicatore di movimento direzionale positivo string MAMethod(); // Restituisce il metodo di smussamento in forma di stringa int MAPeriod(); // Restituisce il periodo di smussamento int Size(); // Restituisce la dimensione del ring buffer
Per ottenere i dati calcolati dell'indicatore dal ring buffer è possibile procedere come in un normale array. Ad esempio:
#include <IncOnRingBuffer\CADXOnRingBuffer.mqh> CADXOnRingBuffer adx; ... //+------------------------------------------------------------------+ //| Funzione di iterazione dell'indicatore personalizzato | //+------------------------------------------------------------------+ int OnCalculate(const int rates_total, const int prev_calculated, const datetime& time[], const double& open[], const double& high[], const double& low[], const double& close[], const long& tick_volume[], const long& volume[], const int& spread[]) { //--- calcolo dell'indicatore: adx.MainOnArray(rates_total,prev_calculated,high,low,close); ... //--- copia dei dati dai ring buffers "adx" all'indicatore: for(int i=start;i<rates_total;i++) { ADX_Buffer[i]=adx[rates_total-1-i]; // indice di movimento direzionale medio PDI_Buffer[i]=adx.pdi[rates_total-1-i]; // indice di movimento direzionale positivo NDI_Buffer[i]=adx.ndi[rates_total-1-i]; // indice di movimento direzionale negativo } ... }
Si prega di notare che l'indicizzazione nel ring buffer è la stessa che nelle serie temporali.
Esempi
- Il file Test_ADX_OnArrayRB.mq5 calcola l'indicatore sulla base della serie temporale dei prezzi. Viene dimostrato l'utilizzo del metodo MainOnArray().
- Il file Test_ADX_OnValueRB.mq5 dimostra l'uso del metodo MainOnValue(). All'inizio viene calcolato e disegnato l'indicatore ADX. Poi, sulla base del ring buffer di questo indicatore, vengono calcolate tre linee dell'indicatore ADX.

Il risultato del lavoro del Test_ADX_OnArrayRB.mq5 con la dimensione del ring buffer di 256 elementi

Il risultato del lavoro del Test_ADX_OnValueRB.mq5 con la dimensione del ring buffer di 256 elementi
Durante la scrittura del codice sono stati utilizzati i lavori di MetaQuotes Software Corp., Integer e GODZILLA.
Post correlati
- Indicatori per la Raccolta Dati: Buffer Orari in MetaTrader 5
- Indice di Volatilità Chaikin: Scegli il Giusto Algoritmo di Smussamento per MetaTrader 5
- Indice di Vigorità Relativa (RVI): Guida all'Utilizzo su MetaTrader 5
- Volatilità Stocastica: Indicatore per MetaTrader 5 da Utilizzare sul Grafico
- Indicatore di Equità e Bilancio per MetaTrader 5: Monitoraggio della Tua Performance di Trading