Descrizione
La classe COBVOnRingBuffer è progettata per calcolare l'indicatore tecnico On Balance Volume (OBV) utilizzando l'algoritmo del ring buffer.
Dichiarazione
class COBVOnRingBuffer : public CArrayRing
Inclusione
#include <IncOnRingBuffer\COBVOnRingBuffer.mqh>Il file della classe COBVOnRingBuffer.mqh deve essere posizionato nella cartella IncOnRingBuffer, che deve essere creata all'interno di MQL5\Include\. Due file contenenti esempi della classe sono allegati alla descrizione. Anche il file con la classe del ring buffer deve trovarsi in questa cartella.
Metodi della Classe
//--- metodo di inizializzazione: bool Init( // se errore restituisce false, se successo - true int period = 0, // il periodo dell'OBV int size_buffer = 256, // dimensione del ring buffer bool as_series = false // true, se è una serie temporale, altrimenti false );
Il periodo dell'OBV viene utilizzato come nel caso di Integer: se il valore è 0 (default), l'indicatore funziona come quello incluso nel terminale - verrà calcolato per tutte le barre del grafico. In caso di un altro valore positivo specificato, viene utilizzato il numero di barre (principio della media mobile) per il calcolo del valore ad ogni barra del grafico.
//--- metodo di calcolo basato su una serie temporale o sui buffer degli indicatori: int MainOnArray( // restituisce il numero degli elementi elaborati const int rates_total, // dimensione degli array const int prev_calculated, // elementi elaborati nella chiamata precedente const double& price[], // prezzo const long& volume[]); // volume );
//--- metodo di calcolo basato su elementi separati dell'array double MainOnValue( // restituisce il valore OBV per l'elemento impostato (barra) 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 price, // prezzo const long volume, // volume const int index // l'indice dell'elemento (barra) );
//--- metodi di accesso ai dati: int BarsRequired(); // Restituisce il numero necessario di barre per disegnare l'indicatore string Name(); // Restituisce il nome dell'indicatore int Period(); // Restituisce il periodo int Size(); // Restituisce la dimensione del ring buffer
Per ottenere i dati calcolati dell'indicatore dal ring buffer, è possibile procedere come da un normale array. Ad esempio:
//--- la classe con i metodi di calcolo dell'indicatore OBV: #include <IncOnRingBuffer\COBVOnRingBuffer.mqh> COBVOnRingBuffer obv; ... //+------------------------------------------------------------------+ //| 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 basato su una serie temporale: obv.MainOnArray(rates_total, prev_calculated, close, tick_volume); ... //--- utilizzare i dati dal ring buffer "obv", // ad esempio, copiare i dati nel buffer dell'indicatore: for(int i=start; iIsStopped(); i++) OBV_Buffer[i] = obv[rates_total-1-i]; // linea dell'indicatore ... //--- valore di ritorno di prev_calculated per la prossima chiamata: return(rates_total); }
Si prega di notare che l'indicizzazione nel ring buffer è la stessa della serie temporale.
Esempi
- L'indicatore calcola il file Test_OBV_OnArrayRB.mq5 sulla base della serie temporale dei prezzi. Viene dimostrato l'uso del metodo MainOnArray().
- Il file Test_OBV_OnValueRB.mq5 dimostra l'uso del metodo MainOnValue(). Inizialmente, l'indicatore OBV viene calcolato e disegnato. Successivamente, sulla base di questo indicatore, viene disegnato un altro OBV utilizzando il ring buffer.

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

Il risultato del lavoro del Test_OBV_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
- Volatilità Stocastica: Indicatore per MetaTrader 5 da Utilizzare sul Grafico
- Utilità per Serie e Informazioni sulle Rate in MetaTrader 5