Mira cómo descargar robots gratis
¡Búscanos en Facebook!
Pon "Me gusta" y sigue las noticias
¿Es interesante este script?
Deje un enlace a él, ¡qué los demás también lo valoren!
¿Le ha gustado el script?
Evalúe su trabajo en el terminal MetaTrader 5
Indicadores

Clase para dibujar el OBV usando el buffer circular - indicador para MetaTrader 5

Visualizaciones:
1206
Ranking:
(21)
Publicado:
2014.01.15 08:41
Actualizado:
2016.11.22 07:33
\MQL5\Indicators\OnRingBuffer\ \MQL5\Include\IncOnRingBuffer\
carrayring.mqh (6.64 KB) ver
MQL5 Freelance ¿Necesita un robot o indicador basado en este código? Solicítelo en la bolsa freelance Pasar a la bolsa

Descripción

La clase COBVOnRingBuffer está diseñada para el cálculo del indicador técnico Volumen en Equilibrio (On Balance Volume, OBV) utilizando el algoritmo del buffer circular.  

Declaración

class COBVOnRingBuffer : public CArrayRing

Título

#include <IncOnRingBuffer\COBVnRingBuffer.mqh>

El archivo de la clase COBVOnRingBuffer.mqh debe colocarse en la carpeta IncOnRingBuffer que es necesario establecer en MQL5\Include\. Se adjuntan a la descripción dos archivos con los ejemplos utilizados por la clase de esta carpeta. El archivo con la clase del búfer circular también debe estar en esta carpeta.

Métodos de la clase

//--- método de inicio:
bool Init(                                        // si error devuelve falso, si exitoso - verdadero
   int                 period      = 0,           // periodo del OBV
   int                 size_buffer = 256,         // tamaño del buffer circular
   bool                as_series   = false        // verdadero, si timeseries, de otra manera - falso
   );

El período OBV se utiliza como en el caso de Integer: Si el valor es 0 (por defecto) el indicador trabaja como el que se incluye en la terminal - se calcularán para todas las barras del gráfico. En caso de que se use cualquier otro valor número positivo especificado de barras (principio de media móvil) para el cálculo del valor en cada barra gráfica. 

//--- el método de cálculo basado en una serie de tiempo o los buffers de indicadores:          
int MainOnArray(                  // devuelve el número de los elementos procesados  
   const int     rates_total,     // tamaño de la matriz
   const int     prev_calculated, // elementos procesados en la llamada anterior
   const double& price[],         // precio
   const long&   volume[]);       // volumen
   );
//--- el método de cálculo basado en una serie de elementos separados de la matriz           
double MainOnValue(              // devuelve el valor OBV para el conjuntos de elementos (barras)
   const int    rates_total,     // tamaño de la matriz
   const int    prev_calculated, // elementos procesados de la matriz
   const int    begin,           // desde donde comienzan los datos significativos de la matriz
   const double price,           // precio
   const long   volume,          // volumen
   const int    index            // índice del elemento (barra)
   );
//--- metodo 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 buffer circular

Es posible obtener los datos calculados del indicador desde el buffer circular a partir de la matriz habitual. Por ejemplo:

//--- la clase con los métodos de cálculo del indicador OBV:
#include <IncOnRingBuffer\COBVOnRingBuffer.mqh>
COBVOnRingBuffer obv;

...

//+------------------------------------------------------------------+
//| Función 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 de tiempo:
      obv.MainOnArray(rates_total,prev_calculated,close,tick_volume);

...

//--- utilizar los datos del buffer circular "OBV",
//    por ejemplo, copiar los datos en el buffer de indicador:
   for(int i=start;i<rates_total && !IsStopped();i++)
      OBV_Buffer[i] = obv[rates_total-1-i]; // linea del indicador

...

//--- devuelve el valor de prev_calculated para la próxima llamada:
   return(rates_total);
  }

Tenga en cuenta que la indexación en el búfer circular es la misma que en la timeserie.

Ejemplos

  1. El indicador calcula el archivo Test_OBV_OnArrayRB.mq5 sobre la base de las series temporales de precios. Se demuestra la aplicación del método MainOnArray()
  2. El archivo Test_OBV_OnValueRB.mq5 muestra el uso del método MainOnValue(). Al principio el indicador OBV se calcula y se dibuja. Después sobre la base de este buffer circular del indicador se traza un OBV más. 


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



El resultado del trabajo del Test_OBV_OnValueRB.mq5 con el tamaño del buffer circular de 256 elementos

 

Al escribir el código fueron utilizados los desarrollos de MetaQuotes Software Corp., Integer y GODZILLA.

Traducción del ruso realizada por MetaQuotes Ltd
Artículo original: https://www.mql5.com/ru/code/1402

RoundPrice-Ext RoundPrice-Ext

Un indicador muy cómodo para confirmar cualquier señal de entrada al mercado

Renko_v1 Renko_v1

Indicador de tendencia que dibuja las fronteras del canal

El indicador 4-color АО El indicador 4-color АО

El indicador 4-color АО.

StepSto_v1 StepSto_v1

Indicador de tendencia. La posición de las líneas del indicador con respecto al nivel 50 puede servir como punto de referencia para definir una tendencia