Pon "Me gusta" y sigue las noticias
Deje un enlace a él, ¡qué los demás también lo valoren!
Evalúe su trabajo en el terminal MetaTrader 5
![Indicadores](https://c.mql5.com/i/code/indicator.png)
La clase para la elaboración del IMF usando el buffer circular - indicador para MetaTrader 5
- Visualizaciones:
- 1121
- Ranking:
- Publicado:
- 2014.01.15 08:55
- Actualizado:
- 2016.11.22 07:33
-
¿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
- 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()
- 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 Al escribir el código fueron utilizados los desarrollos de MetaQuotes Software Corp., Integer y GODZILLA.
El resultado del trabajo del Test_MFI_OnValueRB.mq5 con el tamaño del buffer circular de 256 elementos
Traducción del ruso realizada por MetaQuotes Ltd
Artículo original: https://www.mql5.com/ru/code/1395
![Exp_BinaryWave](https://c.mql5.com/i/code/expert.png)
Este sistema de trading se basa en las señales de entrada del oscilador integral BinaryWave.
![Exp_XMACD](https://c.mql5.com/i/code/expert.png)
Este sistema de trading se basa en las señales del histograma universal de XMACD.
![Terminator_v2.0](https://c.mql5.com/i/code/expert.png)
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](https://c.mql5.com/i/code/indicator.png)
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.