Inicio Indicador técnico Publicación

Cómo Utilizar la Clase CMomentumOnRingBuffer en MetaTrader 5 para Calcular el Momentum

Archivos adjuntos
1396.zip (6.02 KB, Descargar 0 veces)

Descripción

La clase CMomentumOnRingBuffer está diseñada para calcular el indicador técnico Momentum (Momentum) utilizando el algoritmo de buffer circular.

Declaración

class CMomentumOnRingBuffer : public CArrayRing

Título

#include <IncOnRingBuffer\CMomentumOnRingBuffer.mqh>

El archivo CMomentumOnRingBuffer.mqh debe ubicarse en la carpeta IncOnRingBuffer, que a su vez debe estar en MQL5\Include\. Se adjuntan dos archivos con ejemplos utilizados por la clase desde esta carpeta. También debes asegurarte de que el archivo con la clase de el buffer circular esté en esta carpeta.

Métodos de la clase

//--- método de inicialización:
bool Init(                  // si hay error retorna falso, si es exitoso - verdadero
   int  periodo      = 14,   // el período del Momentum
   int  tam_buffer = 256,  // el tamaño del buffer circular
   bool es_serie   = false // verdadero, si es una serie temporal, de lo contrario - falso
   );
//--- método de cálculo basado en una serie temporal o el buffer del indicador:          
int MainOnArray(                  // retorna el número de elementos procesados  
   const int     total_rates,     // tamaño del array array[]
   const int     prev_calculado, // elementos procesados en la llamada anterior
   const double& array[],         // array de datos de entrada
   );
//--- método de cálculo basado en elementos separados de la serie del array           
double MainOnValue(               // retorna el valor del Momentum para el elemento establecido
   const int    total_rates,      // tamaño del array
   const int    prev_calculado,  // elementos procesados del array
   const int    inicio,            // desde donde comienza los datos significativos del array
   const long   valor,            // el valor del elemento del array
   const int    indice             // el índice del elemento
   );
//--- métodos para acceder a los datos:
int                 BarsRequired(); // Retorna el número necesario de barras para dibujar el indicador
string              Name();         // Retorna el nombre del indicador
int                 Período();       // Retorna el período
int                 Tamaño();         // retorna el tamaño del buffer circular

Obtener los datos calculados del indicador desde el buffer circular es posible como desde un array normal. Por ejemplo:

//--- la clase con los métodos de cálculo del indicador Momentum:
#include <IncOnRingBuffer\CMomentumOnRingBuffer.mqh>
CMomentumOnRingBuffer momentum;

...

//+------------------------------------------------------------------+
//| Función de iteración del indicador personalizado                              |
//+------------------------------------------------------------------+
int OnCalculate (const int total_rates,      // tamaño del array price[]
                 const int prev_calculado,  // barras procesadas en la llamada anterior
                 const int inicio,            // desde donde comienzan los datos significativos
                 const double& precio[])      // el array para el cálculo
  {
//--- cálculo del indicador basado en series temporales:
   momentum.MainOnArray(total_rates,prev_calculado,precio);

...
 
//--- usa los datos del buffer circular de "momentum",
//    por ejemplo, copia los datos en el buffer del indicador:
   for(int i=inicio;i<total_rates && !IsStopped();i++)
      Momentum_Buffer[i] = momentum[total_rates-1-i]; // la línea del indicador

...

//--- retorna el valor de prev_calculado para la próxima llamada:
   return(total_rates);
  }

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

Ejemplos

  1. El archivo Test_Momentum_OnArrayRB.mq5 calcula el indicador en base a la serie de precios. Se demuestra la aplicación del método MainOnArray().
  2. El archivo Test_Momentum_OnValueRB.mq5 demuestra el uso del método MainOnValue(). Primero se calcula y dibuja el indicador Momentum. Luego, basado en este buffer circular, se dibuja otro indicador Momentum.


Resultado del trabajo del Test_Momentum_OnArrayRB.mq5 con un tamaño de buffer circular de 256 elementos



Resultado del trabajo del Test_Momentum_OnValueRB.mq5 con un tamaño de buffer circular de 256 elementos

 

El desarrollo del código involucra a MetaQuotes Software Corp.Integer GODZILLA.

Publicaciones relacionadas

Comentarios (0)