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
- Visualizaciones:
- 1609
- Ranking:
- Publicado:
- Actualizado:
-
¿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.

Asesor 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...

El 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.