Inicio Indicador técnico Publicación

Cómo Dibujar el ADX con el Buffer Anular en MetaTrader 5

Archivos adjuntos
1343.zip (9.86 KB, Descargar 0 veces)

Descripción

La clase CADXOnRingBuffer está diseñada para calcular el indicador técnico Índice de Movimiento Direccional Promedio (ADX) utilizando el algoritmo del buffer anular.

Declaración

class CADXOnRingBuffer

Título

#include <IncOnRingBuffer\CADXOnRingBuffer.mqh>

El archivo CADXOnRingBuffer.mqh debe ubicarse en la carpeta IncOnRingBuffer que deberá crearse en MQL5\Include\. Se adjuntan dos archivos con ejemplos utilizados por la clase desde esta carpeta. También se debe incluir el archivo con la clase del buffer anular y el archivo con la clase de Media Móvil.

Métodos de la clase

//--- método de inicialización:
bool Init(                                // si hay error devuelve false, si es exitoso - true
   int            ma_period   = 14,       // periodo de suavizado de la Media Móvil
   ENUM_MA_METHOD ma_method   = MODE_EMA, // método de suavizado de la Media Móvil
   int            size_buffer = 256,      // tamaño del buffer anular, número de datos almacenados
   bool           as_series   = false     // true, si es una serie temporal, false si el índice es normal de los datos de entrada
   );            
//--- método de cálculo basado en una serie temporal o buffers de indicadores:          
int MainOnArray(                  // devuelve el número de elementos procesados  
   const int     rates_total,     // 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 para cálculo basado en elementos separados de la serie de array            
double MainOnValue(              // devuelve el valor de ADX para el elemento establecido
   const int     rates_total,     // tamaño del array
   const int     prev_calculated, // elementos procesados del array
   const int     begin,           // desde donde comienzan 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            // el índice del elemento
   );
//--- métodos de acceso a los datos:
int     BarsRequired();   // Devuelve el número necesario de barras para dibujar el indicador
string NameADX();        // Devuelve el nombre del indicador
string NameNDI();        // Devuelve el nombre de la línea del indicador de movimiento direccional negativo
string NamePDI();        // Devuelve el nombre de la línea del indicador de movimiento direccional positivo
string MAMethod();       // Devuelve el método de suavizado en forma de línea de texto  
int     MAPeriod();       // Devuelve el período de suavizado
int     Size();           // Devuelve el tamaño del buffer anular

Se pueden obtener los datos calculados del indicador del buffer anular de la misma manera que de un array común. Por ejemplo:

#include <IncOnRingBuffer\CADXOnRingBuffer.mqh>
CADXOnRingBuffer adx;

...

//+------------------------------------------------------------------+
//| 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:
   adx.MainOnArray(rates_total,prev_calculated,high,low,close);

   ...
     
//--- copia de los datos desde los buffers del "adx" al indicador:
   for(int i=start;i<rates_total;i++)
     {
      ADX_Buffer[i]=adx[rates_total-1-i];      // índice de movimiento direccional promedio
      PDI_Buffer[i]=adx.pdi[rates_total-1-i];  // índice direccional positivo
      NDI_Buffer[i]=adx.ndi[rates_total-1-i];  // índice direccional negativo
     }

   ...
  }

Ten en cuenta que la indexación en el buffer anular es igual que en la serie temporal.

Ejemplos

  1. El archivo Test_ADX_OnArrayRB.mq5 calcula el indicador en base a la serie temporal de precios. Se demuestra la aplicación del método MainOnArray().
  2. El archivo Test_ADX_OnValueRB.mq5 demuestra el uso del método MainOnValue(). Primero se calcula y dibuja el indicador ADX. Luego, con el buffer anular de este indicador, se calculan tres líneas del indicador ADX.


El resultado del trabajo del Test_ADX_OnArrayRB.mq5 con un tamaño de buffer anular de 256 elementos



El resultado del trabajo del Test_ADX_OnValueRB.mq5 con un tamaño de buffer anular de 256 elementos

 

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

Publicaciones relacionadas

Comentarios (0)