Inicio Indicador técnico Publicación

Cómo dibujar el ER con el buffer circular: indicador para MetaTrader 5

Archivos adjuntos
1374.zip (6.13 KB, Descargar 0 veces)

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

  1. El archivo Test_ER_OnArrayRB.mq5 calcula el indicador basado en series de precios. Se demuestra la aplicación del método MainOnArray().
  2. 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

Comentarios (0)