Descripción
La clase COBVOnRingBuffer está diseñada para calcular el indicador técnico On Balance Volume (OBV) utilizando el algoritmo de ring buffer.
Declaración
class COBVOnRingBuffer : public CArrayRing
Título
#include <IncOnRingBuffer\COBVOnRingBuffer.mqh>El archivo de la clase COBVOnRingBuffer.mqh debe colocarse en la carpeta IncOnRingBuffer, que debe establecerse en MQL5\Include\. Dos archivos con ejemplos utilizados por la clase de esta carpeta están adjuntos a la descripción. El archivo con la clase de ring buffer también debe estar en esta carpeta.
Métodos de la Clase
//--- método de inicialización: bool Init( // si hay error devuelve false, si es exitoso - true int period = 0, // el periodo del OBV int size_buffer = 256, // tamaño del ring buffer bool as_series = false // true, si es una serie temporal, de lo contrario - false );
El periodo del OBV se utiliza como en el caso de Integer: si el valor es 0 (predeterminado) el indicador funciona como el incluido en el terminal, se calculará para todas las barras del gráfico. Si se especifica cualquier otro valor positivo, se utilizará el número especificado de barras (principio de Media Móvil) para el cálculo del valor en cada barra del gráfico.
//--- método de cálculo basado en una serie temporal o los buffers del indicador: int MainOnArray( // devuelve el número de elementos procesados const int rates_total, // tamaño de los arrays const int prev_calculated, // elementos procesados en la llamada anterior const double& price[], // precio const long& volume[]); // volumen );
//--- método de cálculo basado en elementos individuales del array double MainOnValue( // devuelve el valor OBV para el elemento (barra) const int rates_total, // tamaño del array const int prev_calculated, // elementos procesados del array const int begin, // desde dónde empiezan los datos significativos del array const double price, // precio const long volume, // volumen const int index // el índice del elemento (barra) );
//--- métodos de acceso a los datos: int BarsRequired(); // Devuelve el número necesario de barras para dibujar el indicador string Name(); // Devuelve el nombre del indicador int Period(); // Devuelve el periodo int Size(); // Devuelve el tamaño del ring buffer
Para obtener los datos calculados del indicador desde el ring buffer, es posible hacerlo como desde un array normal. Por ejemplo:
//--- la clase con los métodos de cálculo del indicador OBV: #include <IncOnRingBuffer\COBVOnRingBuffer.mqh> COBVOnRingBuffer obv; ... //+------------------------------------------------------------------+ //| Función de iteración del indicador personalizado | //+------------------------------------------------------------------+ 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[]) {//--- el cálculo del indicador basado en una serie temporal: obv.MainOnArray(rates_total, prev_calculated, close, tick_volume); ... //--- usa los datos del ring buffer "obv", // por ejemplo, copia los datos en el buffer del indicador: for(int i=start; i<rates_total && !IsStopped(); i++) OBV_Buffer[i] = obv[rates_total-1-i]; // línea del indicador ... //--- devuelve el valor de prev_calculated para la próxima llamada: return(rates_total); }
Recuerda que la indexación en el ring buffer es la misma que en la serie temporal.
Ejemplos
- El indicador calcula el archivo Test_OBV_OnArrayRB.mq5 sobre la base de la serie temporal de precios. Se demuestra la aplicación del método MainOnArray().
- El archivo Test_OBV_OnValueRB.mq5 demuestra el uso del método MainOnValue(). Primero se calcula y dibuja el indicador OBV. Luego, con base en este ring buffer de indicadores, se dibuja otro OBV.

El resultado del trabajo del Test_OBV_OnArrayRB.mq5 con el tamaño del ring buffer de 256 elementos

El resultado del trabajo del Test_OBV_OnValueRB.mq5 con el tamaño del ring buffer de 256 elementos
Al escribir el código se utilizaron los desarrollos de MetaQuotes Software Corp., Integer y GODZILLA.
Publicaciones relacionadas
- MetaCOT 2 CFTC ToolBox: Herramientas Esenciales para Análisis en MT4
- iStochKomposterAlert: El Indicador de Señales para MetaTrader 5 con Alertas
- iDeMarkerSignAlert: Tu nuevo indicador para MetaTrader 5
- Ideal ZigZag: Un Indicador Rápido para MetaTrader 5
- AFL_Winner_HTF_Signal: Tu guía para señales de trading en MetaTrader 5