Inicio Indicador técnico Publicación

Cómo Utilizar la Clase CATROnRingBuffer para Calcular el ATR en MetaTrader 5

Archivos adjuntos
1344.zip (8.86 KB, Descargar 0 veces)

Descripción

La clase CATROnRingBuffer está diseñada para calcular el indicador de Average True Range (ATR) utilizando el algoritmo del buffer circular.

Declaración

class CATROnRingBuffer

Título

#include <IncOnRingBuffer\CATROnRingBuffer.mqh>

El archivo CATROnRingBuffer.mqh debe ubicarse en la carpeta IncOnRingBuffer, que se debe establecer en MQL5\Include\. Se adjuntan dos archivos con ejemplos utilizados por la clase desde esta carpeta. El archivo con la clase del buffer circular y el de la Media Móvil también deben estar en esta carpeta.

Métodos de la clase

//--- método de inicialización:
bool Init(                                // si hay error retorna false, si es exitoso - true
   int            ma_period   = 14,       // el periodo de suavizado de la Media Móvil
   ENUM_MA_METHOD ma_method   = MODE_SMA, // el método de suavizado de la Media Móvil
   int            size_buffer = 256,      // tamaño del buffer circular, número de datos almacenados
   bool           as_series   = false     // true si es una serie temporal, false si es un índice común de los datos de entrada
   );             
//--- método de cálculo basado en series temporales o buffers de indicadores:
int MainOnArray(                  // retorna el número de elementos procesados
   const int     rates_total,     // el tamaño de los arrays
   const int     prev_calculated, // elementos procesados en la llamada anterior
   const double &high[]           // array de valores máximos
   const double &low[]            // array de valores mínimos
   const double &close[]           // array de precios de cierre
   );
//--- método de cálculo basado en elementos de series separados en el array
double MainOnValue(              // retorna el valor del ATR para el elemento establecido
   const int    rates_total,     // el tamaño del array
   const int    prev_calculated, // elementos procesados del array
   const int    begin,           // desde dónde inician los valores significativos del array
   const double high,            // valor máximo
   const double low,             // valor mínimo
   const double close,           // precio de cierre
   const int    index            // índice del elemento
   );
//--- métodos de acceso a los datos:
int    BarsRequired();   // Retorna el número necesario de barras para dibujar el indicador
string Name();           // Retorna el nombre del indicador
string MAMethod();       // Retorna el método de suavizado en forma de línea de texto
int    MAPeriod();       // Retorna el periodo de suavizado
int    Size();           // Retorna el tamaño del buffer circular

Para obtener los datos calculados del indicador desde el buffer circular, se puede acceder de la misma manera que desde un array común. Por ejemplo:

#include <IncOnRingBuffer\CATROnRingBuffer.mqh>
CATROnRingBuffer atr;

...
//+------------------------------------------------------------------+
//| 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[])
  {
//--- cálculo del indicador:
   atr.MainOnArray(rates_total,prev_calculated,high,low,close);

   ...

//--- copiar datos del buffer "atr" al indicador:
   for(int i=start;i<rates_total;i++)
     {
      ATR_Buffer[i]=atr[rates_total-1-i];
     }
   return(rates_total);
  }

Recuerda que la indexación en el buffer circular es la misma que en la serie temporal.

Ejemplos

  1. El archivo Test_ATR_OnArrayRB.mq5 calcula el indicador basado en la serie temporal de precios. Se demuestra la aplicación del método MainOnArray().
  2. El archivo Test_ATR_OnValueRB.mq5 demuestra el uso del método MainOnValue(). Primero se calcula y dibuja el indicador ATR. Luego, sobre la base del buffer circular de este indicador, se calcula otra línea del indicador ATR.


El resultado del trabajo del archivo Test_ATR_OnArrayRB.mq5 con un tamaño de buffer circular de 256 elementos



El resultado del trabajo del archivo Test_ATR_OnValueRB.mq5 con un tamaño de buffer circular de 256 elementos


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

Publicaciones relacionadas

Comentarios (0)