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
La clase para la elaboración del IMF usando el buffer circular - indicador para MetaTrader 5
- Visualizaciones:
- 1156
- 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
Este sistema de trading se basa en las señales de entrada del oscilador integral BinaryWave.
Exp_XMACDEste sistema de trading se basa en las señales del histograma universal de XMACD.
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 circularLa 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.