Descrizione
La classe COsMAOnRingBuffer è progettata per calcolare l'indicatore tecnico Media Mobile dell'Oscillatore (Moving Average of Oscillator, OsMA) utilizzando l'algoritmo del ring buffer.
Dichiarazione
class COsMAOnRingBuffer : public CArrayRing
Titolo
#include <IncOnRingBuffer\COsMAOnRingBuffer.mqh>Il file della classe COsMAOnRingBuffer.mqh deve essere posizionato nella cartella IncOnRingBuffer, che deve essere creata in MQL5\Include\. Due file con gli esempi utilizzati dalla classe di questa cartella sono allegati alla descrizione. I file con il ring buffer, il MACD e le classi delle Medie Mobili devono essere presenti in questa cartella.
Metodi della classe
//--- metodo di inizializzazione:
bool Init( // se c'è un errore ritorna false, se ha successo - true
int fast_period = 12, // periodo di Media Mobile veloce
int slow_period = 26, // periodo di Media Mobile lenta
int signal_period = 9, // periodo di Media Mobile del segnale
ENUM_MA_METHOD fast_method = MODE_EMA, // metodo di Media Mobile veloce
ENUM_MA_METHOD slow_method = MODE_EMA, // metodo di Media Mobile lenta
ENUM_MA_METHOD signal_method = MODE_SMA, // metodo di Media Mobile del segnale
int size_buffer = 256, // dimensione del ring buffer
bool as_series = false // true se è una serie temporale
);
//--- metodo di calcolo basato su serie temporali o buffer di indicatori:
int MainOnArray( // ritorna il numero di elementi elaborati
const int rates_total, // dimensione dell'array
const int prev_calculated, // elementi elaborati nella chiamata precedente
const double &array[] // array dei valori di input
);
//--- metodo di calcolo basato sugli elementi della serie separati:
double MainOnValue( // ritorna il valore OsMA per l'elemento impostato
const int rates_total, // dimensione dell'array
const int prev_calculated, // elementi elaborati dell'array
const int begin, // da dove inizia il dato significativo dell'array
const double value, // elementi significativi dell'array
const int index // indice dell'elemento
);
//--- metodi di accesso ai dati:
int BarsRequired(); // Ritorna il numero necessario di barre per disegnare l'indicatore
string Name() // Ritorna il nome dell'indicatore
string FastMethod() // Ritorna il metodo di smoothing della linea veloce
string SlowMethod() // Ritorna il metodo di smoothing della linea lenta
string SignalMethod() // Ritorna il metodo di smoothing della linea segnale
int FastPeriod() // Ritorna il periodo di smoothing della linea veloce
int SlowPeriod() // Ritorna il periodo di smoothing della linea lenta
int SignalPeriod() // Ritorna il periodo di smoothing della linea segnale
int Size(); // Ritorna la dimensione del ring buffer
Per ottenere i dati calcolati dell'indicatore dal ring buffer, è possibile farlo come da un array normale. Ad esempio:
//--- la classe con i metodi di calcolo dell'indicatore OsMA:
#include <IncOnRingBuffer\COsMAOnRingBuffer.mqh>
COsMAOnRingBuffer osma;
...
//+------------------------------------------------------------------+
//| 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 su una serie temporale di prezzi:
osma.MainOnArray(rates_total,prev_calculated,price);
...
//--- usa i dati dai buffer di "osma",
// copiando i dati nel buffer dell'indicatore:
for(int i=start;i<rates_total;i++)
OsMABuffer[i]=osma[rates_total-1-i]; // istogramma dell'indicatore
//--- ritorna il valore di prev_calculated per la prossima chiamata:
return(rates_total);
}
Si prega di notare che l'indicizzazione nel ring buffer è la stessa delle serie temporali.
Esempi
- Il file
Test_OsMA_OnArrayRB.mq5calcola l'indicatore basato su serie temporali di prezzo. È dimostrato l'uso del metodoMainOnArray(). - Il file
Test_OsMA_OnValueRB.mq5dimostra l'uso del metodoMainOnValue(). Inizialmente viene calcolato e disegnato l'indicatore OsMA, quindi sulla base di questo ring buffer viene disegnato un altro indicatore OsMA.

Il risultato dell'esecuzione di Test_OsMA_OnArrayRB.mq5 con una dimensione del ring buffer di 256 elementi.

Il risultato dell'esecuzione di Test_OsMA_OnValueRB.mq5 con una dimensione del ring buffer di 256 elementi.
Nel codice sono stati utilizzati sviluppi di MetaQuotes Software Corp., Integer e GODZILLA.
Commento 0