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 constint rates_total, // dimensione degli array constint prev_calculated, // elementi elaborati nella chiamata precedente constdouble& price[], // prezzo constlong& volume[]); // volume );
//--- metodo di calcolo basato su elementi separati dell'arraydouble MainOnValue( // restituisce il valore OBV per l'elemento impostato (barra) constint rates_total, // dimensione dell'array constint prev_calculated, // elementi elaborati dell'array constint begin, // da dove inizia il dato significativo dell'array constdouble price, // prezzo constlong volume, // volume constint index // l'indice dell'elemento (barra) );
//--- metodi di accesso ai dati:int BarsRequired(); // Restituisce il numero necessario di barre per disegnare l'indicatorestring Name(); // Restituisce il nome dell'indicatoreintPeriod(); // Restituisce il periodoint 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 |//+------------------------------------------------------------------+intOnCalculate(constint rates_total, constint prev_calculated, constdatetime& time[], constdouble& open[], constdouble& high[], constdouble& low[], constdouble& close[], constlong& tick_volume[], constlong& volume[], constint& 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.

Commento 0