Descrizione
La classe CMACDOnRingBuffer è progettata per il calcolo dell'indicatore tecnico Moving Average Convergence/Divergence (MACD) utilizzando l'algoritmo del ring buffer.
Dichiarazione
class CMACDOnRingBufferTitolo
#include <IncOnRingBuffer\CMACDOnRingBuffer.mqh>Il file della classe CMACDOnRingBuffer.mqh deve essere collocato nella cartella IncOnRingBuffer, che deve essere creata in MQL5\Include\. Due file con gli esempi utilizzati dalla classe in questa cartella sono allegati alla descrizione. Anche il file con la classe del ring buffer e la classe di Moving Average devono trovarsi in questa cartella.
Metodi della Classe
//--- metodo di inizializzazione: bool Init(// se errore ritorna false, se successo - true int fast_period = 12, // il periodo della media mobile veloce int slow_period = 26, // il periodo della media mobile lenta int signal_period = 9, // il periodo della media mobile del segnale ENUM_MA_METHOD fast_method = MODE_EMA, // metodo di smoothing della media mobile veloce ENUM_MA_METHOD slow_method = MODE_EMA, // metodo di smoothing della media mobile lenta ENUM_MA_METHOD signal_method = MODE_SMA, // metodo di smoothing della media mobile del segnale int size_buffer = 256, // dimensione del ring buffer bool as_series = false);
//--- metodo di calcolo basato su una serie temporale o buffer dell'indicatore: int MainOnArray(// ritorna il numero di elementi elaborati const int rates_total, const int prev_calculated, const double &array[]);
//--- metodo di calcolo basato su singoli elementi della serie: double MainOnValue(// ritorna il valore MACD per l'elemento impostato const int rates_total, const int prev_calculated, const int begin, const double value, const int index);
//--- metodi di accesso ai dati: int BarsRequired(); // Restituisce il numero necessario di barre per disegnare l'indicatore string Name(); // Restituisce il nome dell'indicatore string NameMain(); // Restituisce il nome della linea principale dell'indicatore string NameSignal(); // Restituisce il nome della linea di segnale dell'indicatore string FastMethod(); // Restituisce il metodo di smoothing della linea veloce in forma di stringa string SlowMethod(); // Restituisce il metodo di smoothing della linea lenta in forma di stringa string SignalMethod(); // Restituisce il metodo di smoothing della linea di segnale in forma di stringa int FastPeriod(); // Restituisce il periodo di smoothing della linea veloce int SlowPeriod(); // Restituisce il periodo di smoothing della linea lenta int SignalPeriod(); // Restituisce il periodo di smoothing della linea di segnale int Size(); // Restituisce la dimensione del ring buffer
Per ottenere i dati calcolati dell'indicatore dal ring buffer, è possibile farlo come da un normale array. Ad esempio:
//--- la classe con i metodi di calcolo dell'indicatore MACD: #include <IncOnRingBuffer\CMACDOnRingBuffer.mqh> CMACDOnRingBuffer macd; ... //+------------------------------------------------------------------+ //| Funzione di iterazione dell'indicatore personalizzato | //+------------------------------------------------------------------+ int OnCalculate(const int rates_total, const int prev_calculated, const int begin, const double &price[]) { //--- calcolo dell'indicatore basato sulla serie temporale dei prezzi: macd.MainOnArray(rates_total,prev_calculated,price); ... //--- utilizzo dei dati dai buffer "macd", // copiare i dati nei buffer dell'indicatore: for(int i=start;i<rates_total;i++) { MainBuffer[i] = macd[rates_total-1-i]; // istogramma dell'indicatore SignalBuffer[i] = macd.signal[rates_total-1-i]; // linea di segnale dell'indicatore } //--- valore di prev_calculated per la prossima chiamata: return(rates_total); }
Si prega di notare che l'indicizzazione nel ring buffer è la stessa che nelle serie temporali.
Esempi
- Il file
Test_MACD_OnArrayRB.mq5calcola l'indicatore basato sulla serie temporale dei prezzi. Viene dimostrato l'uso del metodoMainOnArray() - Il file
Test_MACD_OnValueRB.mq5dimostra l'uso del metodoMainOnValue(). Inizialmente, l'indicatore MACD viene calcolato e disegnato. Poi, sulla base del ring buffer di questo indicatore, viene disegnato un altro indicatore MACD.

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

Il risultato del lavoro del Test_MACD_OnValueRB.mq5 con la dimensione del ring buffer di 256 elementi
Durante la scrittura del codice sono stati utilizzati gli sviluppi di MetaQuotes Software Corp., Integer e GODZILLA.
Commento 0