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 dibujar MACD usando el buffer circular - indicador para MetaTrader 5
- Visualizaciones:
- 1467
- Ranking:
- Publicado:
- 2014.01.15 09:08
- 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 CMACDOnRingBuffer está diseñada para el cálculo del indicador técnico Móvil Promedio convergencia/divergencia (Moving Average Convergence/Divergence,MACDl) usando el algoritmo del buffer circular.
Declaración
class CMACDOnRingBuffer
Título
#include <IncOnRingBuffer\CMACDOnRingBuffer.mqh>
Archivo de la clase CMACDOnRingBuffer.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
//--- método de inicio: bool Init( // si error devuelve falso, si exitoso - verdadero int fast_period = 12, // periodo del MA suavizado rápido int slow_period = 26, // periodo del MA suavizado lento int signal_period = 9, // periodo de la señal del MA suavizado ENUM_MA_METHOD fast_method = MODE_EMA, // método del MA suavizado rápidog ENUM_MA_METHOD slow_method = MODE_EMA, // método del MA suavizado lentog ENUM_MA_METHOD signal_method = MODE_SMA, // método de la señal del MA suavizado int size_buffer = 256, // tamaño del buffer circular, número de dato almacenado bool as_series = false // verdadero, si timeseries, falso si indexación habitual de los datos de entrada );
//--- método de cálculo basado en una serie de tiempo o el buffer del indicador: int MainOnArray( // devuelve el número de elementos procesados const int rates_total, // tamaño de la matriz array[] const int prev_calculated, // elementos procesados en la llamada anterior const double &array[] // la matriz de los valores de entrada );
//--- método de cálculo basado en los elementos de las series separadas de la matriz double MainOnValue( // devuelve el valor del MACD para el conjunto de elementos const int rates_total, // tamaño de la matriz const int prev_calculated, // wlwmwtos procesados de la matriz const int begin, // desde donde los datos significativos del inicio de la matriz const double value, // valor de los elementos de la matriz const int index // Índice de los elementos );
//--- métodos de acceso a los datos: int BarsRequired(); // Devuelve el número necesario de bares para trazar el indicador string Name() // Devuelve el nombre del indicador string NameMain() // Devuelve el nombre de la línea principal del indicador string NameSignal() // Devuelve el nombre de la línea de señal del indicador string FastMethod() // Devuelve el método de suavizado de línea rápida en forma de línea de texto string SlowMethod() // Devuelve el método de suavizado de línea lenta en la forma de la línea de texto string SignalMethod() // Devuelve el método de suavizado de la línea de señal en forma de línea de texto int FastPeriod() // Devuelve el período de suavizado de la línea rápida int SlowPeriod() // Devuelve el período de suavizado de la línea lenta int SignalPeriod() // Devuelve el período de suavizado de la línea de señal 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:
//--- clase con los métodos de los cálculos del indicador MACD: #include <IncOnRingBuffer\CMACDOnRingBuffer.mqh> CMACDOnRingBuffer macd; ... //+------------------------------------------------------------------+ //| Función de iteración del indicador personalizado | //+------------------------------------------------------------------+ int OnCalculate(const int rates_total, const int prev_calculated, const int begin, const double &price[]) { //--- cálculo del indicador basado en serie de precios: macd.MainOnArray(rates_total,prev_calculated,price); ... //--- usar los datos del buffer circular del "macd", // copiar los datos en los buffers del indicador: for(int i=start;i<rates_total;i++) { MainBuffer[i] = macd[rates_total-1-i]; // Histograma del indicador SignalBuffer[i] = macd.signal[rates_total-1-i]; // Linea de señal del indicador } //--- devuelve el valor del 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_MACD_OnArrayRB.mq5 calcula el indicador basado en series temporales de precios. Se demuestra la aplicación del método MainOnArray()
- El archivo Test_MACD_OnValueRB.mq5 muestra el uso del método MainOnValue(). Al principio el indicador MACD se calcula y se traza. Después sobre la base del búfer circular de este indicador, se traza un indicador MACD más.
El resultado del trabajo del Test_MACD_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_MACD_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/1361
Este indicador es la conversión del famoso indicador de Igorad llamado PriceChannel_Signal_v1 con la característica de la re-entrada.
up3x1_Krohabor_DAsesor Experto basado en tres medias móviles y la salida utilizando el Stop Loss o Take Profit. En ella se establece la entrada con la tendencia.
Otra variación en las medias móviles...
ATR_OpenIndent_v2El indicador muestra el precio de apertura de los marcos temporales superiores (por ejemplo, time frame 1-día) y dibuja una linea de guiones para el precio de apertura, formando de esta manera un rango.