Descripción
La clase CStochasticOnRingBuffer está diseñada para calcular el indicador técnico Oscilador Estocástico (Oscilador Estocástico) utilizando el algoritmo de buffer circular.
Declaración
class CStochasticOnRingBufferTítulo
#include <IncOnRingBuffer\CStochasticOnRingBuffer.mqh>El archivo CStochasticOnRingBuffer.mqh debe colocarse en la carpeta IncOnRingBuffer que debe ser creada dentro de MQL5\Include\. Se adjuntan dos archivos con ejemplos utilizados por la clase desde esta carpeta. También se debe incluir el archivo de la clase del buffer circular y la clase de Media Móvil en esta carpeta.
Métodos de la clase
//--- método de inicialización: bool Init( // si hay error, retorna falso, si es exitoso - verdadero int period_k = 5, // el periodo %K int period_d = 3, // el periodo %D int period_s = 3, // el periodo de desaceleración %K ENUM_MA_METHOD method = MODE_SMA, // el método %D int size_buffer = 256, // el tamaño del buffer circular, número de datos almacenados bool as_series = false // verdadero, si es una serie temporal, falso - si es un índice habitual de los datos de entrada )
//--- método de cálculo basado en una serie temporal o buffers de indicadores: int MainOnArray( // retorna el número de elementos procesados const int rates_total, // el tamaño de los arrays const int prev_calculated, // elementos procesados en la llamada anterior const double&high[] // el array de valores máximos const double&low[] // el array de valores mínimos const double&close[] // el array de precios de cierre );
//--- el método de cálculo basado en los elementos separados de la serie del array double MainOnValue( // retorna el valor Estocástico para el elemento establecido const int rates_total, // el tamaño del elemento const int prev_calculated, // elementos procesados del array const int begin, // desde donde comienzan los datos significativos del array const double high, // el valor máximo const double low, // el valor mínimo const double close, // precio de cierre const int index // el índice del elemento );
//--- los métodos de acceso a los datos: int BarsRequired(); // Retorna el número necesario de barras para dibujar el indicador string Name(); // Retorna el nombre del indicador string NameSignal(); // Retorna el nombre de la línea de señal del indicador string Method(); // Retorna el método de suavizado en forma de línea de texto int PeriodK() // Retorna el periodo de %K int PeriodS() // Retorna el periodo de desaceleración %K int PeriodD() // Retorna el periodo de %D int Size(); // Retorna el tamaño del buffer circular
Para obtener los datos calculados del indicador desde el buffer circular, se puede acceder de la misma manera que en un array habitual. Por ejemplo:
//--- la clase con los métodos de cálculo del indicador Estocástico: #include <IncOnRingBuffer\CStochasticOnRingBuffer.mqh> CStochasticOnRingBuffer st; ... //+------------------------------------------------------------------+ //| Función de iteració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 basado en la serie temporal de precios: st.MainOnArray(rates_total,prev_calculated,high,low,close); ... //--- usa los datos de los buffers circulares "st", // por ejemplo, copia los datos en los buffers del indicador: for(int i=start;i<rates_total && !IsStopped();i++) { MainBuffer[i] = st[rates_total-1-i]; // la línea principal del indicador SignalBuffer[i] = st.signal[rates_total-1-i]; // la línea de señal del indicador } ... //--- retorno del valor de prev_calculated para la próxima llamada: return(rates_total); }
Por favor, ten en cuenta que el indexado en el buffer circular es el mismo que en la serie temporal.
Ejemplos
- El archivo
Test_Stochastic_OnArrayRB.mq5calcula el indicador basado en la serie temporal de precios. Se demuestra la aplicación del métodoMainOnArray(). - El archivo
Test_Stochastic_OnValueRB.mq5demuestra el uso del métodoMainOnValue(). Primero se calcula y dibuja el indicador Oscilador Estocástico. Luego, sobre la base del buffer circular, se dibujan dos líneas más del Oscilador Estocástico.

El resultado del trabajo del archivo Test_Stochastic_OnArrayRB.mq5 con un tamaño de buffer circular de 256 elementos

El resultado del trabajo del archivo Test_Stochastic_OnValueRB.mq5 con un tamaño de buffer circular de 256 elementos
Al escribir el código se utilizaron desarrollos de MetaQuotes Software Corp., Integer y GODZILLA.
Publicaciones relacionadas
- MetaCOT 2 CFTC ToolBox: Herramientas Esenciales para Análisis en MT4
- Oscilador Estocástico con Reducción de Ruido para MetaTrader 4
- iMFISignAlert: Un Indicador Esencial para MetaTrader 5
- iStochKomposterAlert: El Indicador de Señales para MetaTrader 5 con Alertas
- Señales de Tendencia con Heiken Ashi Suavizado en MetaTrader 5