Descripción
La clase CEROnRingBuffer está diseñada para calcular el indicador técnico Efficiency Ratio (ER), utilizado en la Media Móvil Adaptativa (AMA), empleando el algoritmo del buffer circular.
Declaración
class CEROnRingBuffer : public CArrayRing
Título
#include <IncOnRingBuffer\CEROnRingBuffer.mqh>El archivo CEROnRingBuffer.mqh debe ubicarse en la carpeta IncOnRingBuffer, que necesitas crear dentro de MQL5\Include\. Se adjuntan dos archivos de ejemplos que utilizan la clase desde esta carpeta. Además, el archivo de la buffer circular también debe estar presente en esta carpeta.
Métodos de la clase
//--- método de inicialización: bool Init( // regresa false si ocurre un error, true si es exitoso int period = 34, // periodo para el cálculo del ER 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 normal de los datos de entrada );
//--- método de cálculo basado en una serie temporal o buffer de indicador: int MainOnArray( // retorna el número de elementos procesados const int rates_total, // tamaño del array array[] const int prev_calculated, // elementos procesados en la llamada anterior const double &array[] // array de valores de entrada );
//--- método de cálculo basado en elementos separados de la serie: double MainOnValue( // retorna el valor de ER para el elemento establecido const int rates_total, // tamaño del array const int prev_calculated, // elementos procesados del array const int begin, // de dónde comienzan los datos significativos del array const double value, // valor del elemento del array 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 int Period() // Retorna el periodo de cálculo del ER 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 en un array normal. Por ejemplo:
//--- la clase con los métodos de cálculo del indicador ER: #include <IncOnRingBuffer\CEROnRingBuffer.mqh> CEROnRingBuffer er; ... //+------------------------------------------------------------------+ //| Función de iteración del indicador personalizado | //+------------------------------------------------------------------+ int OnCalculate(const int rates_total, const int prev_calculated, const int begin, const double &price[]) { //--- cálculo del indicador basado en series de precios: er.MainOnArray(rates_total, prev_calculated, price); ... //--- usa datos del buffer circular "er", // para, por ejemplo, copiar datos en los buffers del indicador: for(int i=start; i<rates_total; i++) { ER_Buffer[i] = er[rates_total - 1 - i]; // línea del indicador } //--- devuelve el valor de prev_calculated para la siguiente llamada: return(rates_total); }
Ten en cuenta que la indexación en el buffer circular es la misma que en la serie temporal.
Ejemplos
- El archivo Test_ER_OnArrayRB.mq5 calcula el indicador basado en series de precios. Se demuestra la aplicación del método MainOnArray().
- El archivo Test_ER_OnValueRB.mq5 demuestra el uso del método MainOnValue(). Primero se calcula y dibuja el indicador ER. Luego, basado en el buffer circular de este indicador, se dibuja otro ER.

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

Los resultados del trabajo de Test_ER_OnValueRB.mq5 con el tamaño del buffer circular de 256 elementos
Durante la escritura del código se utilizaron desarrollos de MetaQuotes Software Corp., Integer y GODZILLA.
Publicaciones relacionadas
- MetaCOT 2 CFTC ToolBox: Herramientas Esenciales para Análisis en MT4
- iWPRSignAlert: Tu nuevo aliado en MetaTrader 5
- iDeMarkerSignAlert: Tu nuevo indicador para MetaTrader 5
- iStochKomposterAlert: El Indicador de Señales para MetaTrader 5 con Alertas
- Predicción de Precios en Trading con Redes Neuronales