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:
- 1131
- Ranking:
- Publicado:
- 2014.01.15 08:37
- 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 CDEMAOnRingBuffer está diseñada para el cálculo del indicador técnico Media Móvil Exponencial Doble (Double Exponential Moving Average, DEMA) utilizando el algoritmo del buffer circular.
Declaración
class CDEMAOnRingBuffer : public CArrayRing
Título
#include <IncOnRingBuffer\CDEMAnRingBuffer.mqh>
El archivo de la clase CDEMAOnRingBuffer.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 las clases del buffer circular y la 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 exitosdo - verdadero int period = 12, // peridod DEMA ENUM_MA_METHOD method = MODE_EMA, // método de suavizado int size_buffer = 256, // tamaño deñ buffer circular bool as_series = false // verdadero, si timeseries, de otra manera - falso );
//--- el método de cálculo basado en una serie de tiempo o los buffers de indicadores: int MainOnArray( // devuelve el número de los elementos procesados const int rates_total, // tamaño de la matriz const int prev_calculated, // elementos procesados en la llamada anterior const double& price[], // la matriz para los cálculos );
//--- el método para el cálculo basado en una serie separada de elementos de la matriz double MainOnValue( // devuelve el valor DEMA 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 comienzan los datos significativos de la matriz const double value, // valor de los elementos (barras) value const int index // índice 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 periodo int Size(); // Devuelve el tamaño del buffer circular double MA(int index); // Devuelve el valordel MA, indexando como una timeseries
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 DEMA: #include <IncOnRingBuffer\CDEMAOnRingBuffer.mqh> CDEMAOnRingBuffer dema; ... //+------------------------------------------------------------------+ //| Función iteración del indicador personalizado | //+------------------------------------------------------------------+ int OnCalculate (const int rates_total, // tamaño de la matriz price[] const int prev_calculated, // barras procesadas en la llamada anterior const int begin, // desde donde comienza la información significativa const double& price[]) // la matriz para el cálculo { //--- cálculo del indicador sobre la base de una serie de tiempo: dema.MainOnArray(rates_total,prev_calculated,price); ... //--- utiliza los datos del buffer circular "dema", // por ejemplo, copia los datos en el buffer del indicador: for(int i=start;i<rates_total && !IsStopped();i++) DEMA_Buffer[i] = dema[rates_total-1-i]; // the DEMA indicator line ... //--- devuelve el valor de prev_calculated para la próxima llamada: return(rates_total); }
Cuando se calcula del DEMA también se realiza el cálculo de la Media Móvil con los mismos parámetros. Podemos obtener los datos del buffer circular del MA utilizando el método del MA (int index):
//--- utilizar los datos del buffer circular de la Media Móvil, // por ejemplo, copiar los datos en el buffer del indicador: for(int i=start;i<rates_total && !IsStopped();i++) MA_Buffer[i] = dema.MA(rates_total-1-i); // linea del indicador MA
Tenga en cuenta que la indexación de los buffers circulares es igual que en la serie de tiempo.
Ejemplos
- El indicador calcula el archivo Test_DEMA_OnArrayRB.mq5 sobre la base de las series temporales de precios. Se demuestra la aplicación del método MainOnArray()
- El archivo Test_DEMA_OnValueRB.mq5 muestra el uso del método MainOnValue(). En primer lugar se calcula y se dibuja el indicador DEMA. Después, sobre la base de este buffer circular del indicador se traza un DEMA más.
El resultado del trabajo del Test_DEMA_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_DEMA_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/1416

El sistema de comercio Exp_RD-TrendTrigger se basa en el cambio de dirección de la tendencia mostrada por el oscilador RD-TrendTrigger.

Un indicador de tendencia sencillo de tipo NRTR

Indicador Prev Day And Floating Pivot

Indicador de tendencia que dibuja las fronteras del canal