Inicio Indicador técnico Publicación

Clase CStochasticOnRingBuffer: Calculando el Oscilador Estocástico en MetaTrader 5

Archivos adjuntos
1372.zip (10.26 KB, Descargar 0 veces)

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 CStochasticOnRingBuffer

Tí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

  1. El archivo Test_Stochastic_OnArrayRB.mq5 calcula el indicador basado en la serie temporal de precios. Se demuestra la aplicación del método MainOnArray().
  2. El archivo Test_Stochastic_OnValueRB.mq5 demuestra el uso del método MainOnValue(). 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

Comentarios (0)