Descrizione
La classe CADXWOnRingBuffer è progettata per calcolare l'indicatore tecnico Average Directional Movement Index Wilder (ADX Wilder) sfruttando l'algoritmo del ring buffer.
Dichiarazione
class CADXWOnRingBufferTitolo
#include <IncOnRingBuffer\CADXWOnRingBuffer.mqh>Il file CADXWOnRingBuffer.mqh deve essere posizionato nella cartella IncOnRingBuffer, che dovrà essere creata in MQL5\Include\. Sono allegati due file di esempio utilizzati dalla classe in questa cartella. 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( // restituisce false in caso di errore, true se ha successo int ma_period = 14, // il periodo di lisciatura della Media Mobile ENUM_MA_METHOD ma_method = MODE_SMMA, // metodo di lisciatura della Media Mobile int size_buffer = 256, // dimensione del ring buffer, numero di dati memorizzati bool as_series = false // true se è una serie temporale, false se è un indicizzazione normale dei dati di input );
//--- metodo di calcolo basato su una serie temporale o buffer di indicatori: int MainOnArray( // restituisce il numero di elementi elaborati const int rates_total, // dimensione delle 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 su base di singoli elementi della serie: double MainOnValue( // restituisce il valore ADXW per l'elemento impostato const int rates_total, // dimensione dell'array const int prev_calculated, // elementi elaborati dell'array const int begin, // inizio dei dati significativi dell'array const double high, // valore massimo const double low, // valore minimo const double close, // prezzo di chiusura const int index // indice dell'elemento );
//--- metodi di accesso ai dati: int BarsRequired(); // Restituisce il numero necessario di barre per disegnare l'indicatore string NameADXW(); // 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 direzionale positivo string MAMethod(); // Restituisce il metodo di lisciatura sotto forma di stringa int MAPeriod(); // Restituisce il periodo di lisciatura int Size(); // Restituisce la dimensione del ring buffer
Per ottenere i dati calcolati dell'indicatore dal ring buffer, è possibile farlo come da un array normale. Ad esempio:
#include <IncOnRingBuffer\CADXWOnRingBuffer.mqh> CADXWOnRingBuffer adxw; ... //+------------------------------------------------------------------+ //| 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: adxw.MainOnArray(rates_total, prev_calculated, high, low, close); ... //--- copia dei dati dai buffer del "adxw" nell'indicatore: for(int i=start; i<rates_total; i++) { ADXW_Buffer[i] = adxw[rates_total-1-i]; // indice direzionale medio Wilder PDI_Buffer[i] = adxw.pdi[rates_total-1-i]; // indice direzionale positivo NDI_Buffer[i] = adxw.ndi[rates_total-1-i]; // indice direzionale negativo } ... }
Si prega di notare che l'indicizzazione nel ring buffer è la stessa di quella nelle serie temporali.
Esempi
- Il file
Test_ADXW_OnArrayRB.mq5calcola l'indicatore basato sulla serie temporale dei prezzi. Viene dimostrato l'uso del metodoMainOnArray(). - Il file
Test_ADXW_OnValueRB.mq5dimostra l'uso del metodoMainOnValue(). Inizialmente viene calcolato e disegnato l'indicatore ADXW. Poi, sulla base del ring buffer di questo indicatore, vengono calcolate tre linee dell'indicatore ADXW.

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

Il risultato del lavoro del Test_ADXW_OnValueRB.mq5 con la dimensione del ring buffer di 256 elementi
Durante la scrittura del codice sono stati utilizzati i contributi 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
- Utilità per Serie e Informazioni sulle Rate in MetaTrader 5
- Volatilità Stocastica: Indicatore per MetaTrader 5 da Utilizzare sul Grafico