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 CATROnRingBufferTí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
- 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().
- 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
- iStochKomposterAlert: El Indicador de Señales para MetaTrader 5 con Alertas
- Ideal ZigZag: Un Indicador Rápido para MetaTrader 5
- iDeMarkerSignAlert: Tu nuevo indicador para MetaTrader 5
- AFL_Winner_HTF_Signal: Tu guía para señales de trading en MetaTrader 5
- Cruce de Líneas de Tendencia: Un Indicador Esencial para MetaTrader 5