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
Clase para la elaboración de OsCD usando el buffer circular - indicador para MetaTrader 5
- Visualizaciones:
- 974
- Ranking:
- Publicado:
- 2014.01.15 09:06
- 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 COsMAOnRingBuffer está diseñada para calcular el indicador técnico de Media Móvil del Oscilador (Moving Average of Oscillator, OsMA) usando el algoritmo del buffer circular.
Declaración
class COsMAOnRingBuffer : public CArrayRing
Título
#include <IncOnRingBuffer\COsMAOnRingBuffer.mqh>
Archivo de la clase COsMAOnRingBuffer.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 el buffer circular, el MACD y clases Media Móvil también deben 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 temporal o buffer del indicador: int MainOnArray( // devuelve el número de lemenetos procesados const int rates_total, // tamaño de la matriz array[] const int prev_calculated, // elementos procesados en la llamada anterior const double &array[] // matriz de los valores de entrada );
//--- el método de cálculo basado en los elementos de las series separadas de la matriz double MainOnValue( // devuelve el valor de OsMA al conjunto de elementos const int rates_total, // tamaño de la matriz const int prev_calculated, // elementos procesados del inicio de la matriz const int begin, // from where the significant data of the array starts const double value, // elementos significativos de la matriz const int index // ïndice de los elementos );
//--- método de acceso a los datos: int BarsRequired(); // Devuelve el número necesario de barras para la elaboración del indicador string Name() // Devuelve el nombre del indicador string FastMethod() // Devuelve el método de suavizado de la línea rápida en forma de línea de texto string SlowMethod() // Devuelve el método de suavizado de la línea lenta en forma de 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 cálculo del indicador OsMA: #include <IncOnRingBuffer\COsMAOnRingBuffer.mqh> COsMAOnRingBuffer osma; ... //+------------------------------------------------------------------+ //| Función de iteración del indicador personalizada | //+------------------------------------------------------------------+ int OnCalculate(const int rates_total, const int prev_calculated, const int begin, const double &price[]) { //--- el cálculo del indicador en base a una serie de precios: osma.MainOnArray(rates_total,prev_calculated,price); ... //--- usar el dato del buffer circular del "osma", // copiar lod datos en el buffer del indicador: for(int i=start;i<rates_total;i++) OsMABuffer[i]=osma[rates_total-1-i]; // histograma del indicador //--- devuelve el valor de prev_calculated para la llamada 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_OsMA_OnArrayRB.mq5 calcula el indicador basado en series temporales de precios. Se demuestra la aplicación del método MainOnArray()
- El archivo Test_OsMA_OnValueRB.mq5 muestra el uso del método MainOnValue(). En primer lugar se calcula y se traza el indicador OsMA. Después, sobre la base de este buffer circualr de este indicador se traza un indicador de OsMA más.
Resultado del trabajo del Test_OsMA_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.
Resultado del trabajo del Test_OsMA_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/1367
Implementación de la opción de cambiar el modo de dibujo, como se ejemplifica en el indicador CCI.
Clase para trazar el Estocástico usando el buffer circularLa clase está diseñada para el cálculo del indicador técnico Oscilador estocástico (Stochastic Oscillator) utilizando el algoritmo del buffer circular.
Este indicador señala un período de operación que especifica la hora de inicio del comercio y la hora de finalización del comercio.
Exp_VininI_TrendEl sistema de comercio Exp_VininI_Trend se basa en el cambio de dirección de la tendencia mostrada por el indicador VininI_Trend.