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 constint rates_total, constint prev_calculated, constdouble &array[]);
//--- metodo di calcolo basato su singoli elementi della serie:double MainOnValue(// ritorna il valore MACD per l'elemento impostato constint rates_total, constint prev_calculated, constint begin, constdouble value, constint index);
//--- metodi di accesso ai dati:int BarsRequired(); // Restituisce il numero necessario di barre per disegnare l'indicatorestring Name(); // Restituisce il nome dell'indicatorestring NameMain(); // Restituisce il nome della linea principale dell'indicatorestring NameSignal(); // Restituisce il nome della linea di segnale dell'indicatorestring FastMethod(); // Restituisce il metodo di smoothing della linea veloce in forma di stringastring SlowMethod(); // Restituisce il metodo di smoothing della linea lenta in forma di stringastring SignalMethod(); // Restituisce il metodo di smoothing della linea di segnale in forma di stringaint FastPeriod(); // Restituisce il periodo di smoothing della linea veloceint SlowPeriod(); // Restituisce il periodo di smoothing della linea lentaint SignalPeriod(); // Restituisce il periodo di smoothing della linea di segnaleint 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 |//+------------------------------------------------------------------+intOnCalculate(constint rates_total, constint prev_calculated, constint begin, constdouble &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