Mira cómo descargar robots gratis
¡Búscanos en Telegram!
Pon "Me gusta" y sigue las noticias
¿Es interesante este script?
Deje un enlace a él, ¡qué los demás también lo valoren!
¿Le ha gustado el script?
Evalúe su trabajo en el terminal MetaTrader 5
Indicadores

La clase para la elaboración del IMF usando el buffer circular - indicador para MetaTrader 5

Visualizaciones:
1102
Ranking:
(19)
Publicado:
2014.01.15 08:55
Actualizado:
2016.11.22 07:33
\MQL5\Include\IncOnRingBuffer\
carrayring.mqh (6.64 KB) ver
\MQL5\Indicators\IncOnRingBuffer\
¿Necesita un robot o indicador basado en este código? Solicítelo en la bolsa freelance Pasar a la bolsa

Descripción

La clase CMFIOnRingBuffer está diseñada para calcular el indicador técnico Índice de Flujo de Dinero (Money Flow Index, MFI) utilizando el algoritmo del buffer circular

Declaración

class CMFIOnRingBuffer : public CArrayRing

Título

#include <IncOnRingBuffer\CMFIOnRingBuffer.mqh>

El archivo de la clase CMFIOnRingBuffer.mqh debe colocarse en la carpeta IncOnRingBuffer que es necesario establecer en MQL5\Include\. Se adjuntan a la descripción dos archivos con los ejemplos utilizados por la clase de esta carpeta. Archivo con la clase del buffer circular y la clase de Media Móvil también debe estar en esta carpeta.

Métodos de la clase

//--- étodo de inicio:
bool Init(                                             // si error devuelve falso,
                                                       // si exitoso - verdadero
   int                 period         = 14,            // periodo del MFI
   ENUM_MA_METHOD      method         = MODE_SMA,      // método del suavizado  
   ENUM_APPLIED_PRICE  applied_price  = PRICE_TYPICAL, // precio utilizado para los cálculos
   ENUM_APPLIED_VOLUME applied_volume = VOLUME_TICK,   // volumen utilizado en los cálculos
   int                 size_buffer    = 256,           // tamaño del buffer circular
   bool                as_series      = false          // verdadero, si timeseries, de otra manera - falsa
   );
//--- el método de cálculo basado en la serie de tiempo o buffers circulares:          
int MainOnArray(                  // devuelve el número de los elementos procesados  
   const int     rates_total,     // tamaño de la matriz
   const int     prev_calculated, // elemsentos procesados en la llamda anterior
   const double& open[],          // precio de apertura
   const double& high[],          // precio máximo
   const double& low[],           // precio mínimo
   const double& close[],         // precio de cierre
   const long&   tick_volume[],   // volumen de tick
   const long&   volume[]);       // volumen de stock
   );
//--- método de cálculo sobre la base de los elementos de las series separadas de la matriz           
double MainOnValue(              // devuelve el valor MFI para el conjunto de elementos (barras)
   const int    rates_total,     // tamaño de la matriz
   const int    prev_calculated, // elementos procesados de la matriz
   const int    begin,           // desde donde comienza los datos significativos de la matriz
   const double open,            // precio de apertura de las barras
   const double high,            // máximo precio de la barra
   const double low,             // mínimo precio de la barra
   const double close,           // precio de cierre de las barras
   const long   tick_volume,     // volumen del tick de las barras
   const long   volume,          // volumen de stock de las barras
   const int    index            // íondice de los elementos (barras)
   );
//--- métodos de acceso a los datos:
int                 BarsRequired(); // Devuelve el número necesario de barras para dibujar el indicador
string              Name();         // Devuelve el nombre del indicador
int                 Period();       // Devuelve el período 
string              Method();       // Devuelve el método en forma de línea de texto 
ENUM_APPLIED_PRICE  Price();        // Devuelve el tipo del precio utilizado
ENUM_APPLIED_VOLUME Volume();       // Devuelve el tipo del volumen utilizado
int                 Size();         // Devuelve el tamaño del buffer circular

Es posible obtener los datos calculados del indicador desde el buffer circular a partir de la matriz habitual. Por ejemplo:

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

...

//+------------------------------------------------------------------+
//| Función itració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 a partir de series de tiempo:
   mfi.MainOnArray(rates_total,prev_calculated,open,high,low,close,tick_volume,volume);

...

//--- utilizar los datos de los buffers circulares deel "IMF",
//    por ejemplo, copiar los datos en el buffer de indicador:
   for(int i=start;i<rates_total && !IsStopped();i++)
      MFI_Buffer[i] = mfi[rates_total-1-i]; // linea del indicator

...

//--- devuelve el valor de prev_calculated para la llamda siguiente:
   return(rates_total);
  }

Tenga en cuenta que la indexación en el búfer circular es la misma que en la timeserie.

Ejemplos

  1. El archivo Test_MFI_OnArrayRB.mq5 calcula el indicador basado en la serie de tiempo de precio. Se demuestra la aplicación del método MainOnArray()
  2. El archivo Test_MFI_OnValueRB.mq5 muestra el uso del método MainOnValue(). Al principio el indicador MFI se calcula y se dibuja. Después sobre la base de este buffer circular de este indicador se dibuja un indicador IMF mas. 


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



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

 

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

Traducción del ruso realizada por MetaQuotes Ltd
Artículo original: https://www.mql5.com/ru/code/1395

Exp_BinaryWave Exp_BinaryWave

Este sistema de trading se basa en las señales de entrada del oscilador integral BinaryWave.

Exp_XMACD Exp_XMACD

Este sistema de trading se basa en las señales del histograma universal de XMACD.

Terminator_v2.0 Terminator_v2.0

La posición inicial se abre de acuerdo a las señales del indicador. (Hay seis variantes). Si la posición deja de ser rentable, su volumen se incrementa.

La clase para la elaboración de la AMA usando el buffer circular La clase para la elaboración de la AMA usando el buffer circular

La clase está diseñada para el cálculo del indicador técnico Media Móvil Adaptable (Adaptive Moving Average, AMA) utilizando el algoritmo del tampón de anillo.