Descripción
La clase COsMAOnRingBuffer está diseñada para calcular el indicador técnico Media Móvil del Oscilador (Moving Average of Oscillator, OsMA) utilizando el algoritmo del buffer circular.
Declaración
class COsMAOnRingBuffer : public CArrayRing
Título
#include <IncOnRingBuffer\COsMAOnRingBuffer.mqh>El archivo de la clase COsMAOnRingBuffer.mqh debe colocarse en la carpeta IncOnRingBuffer que debe establecerse en MQL5\Include\. Se adjuntan dos archivos con ejemplos utilizados por la clase desde esta carpeta. Los archivos que contienen el buffer circular, el MACD y las clases de Media Móvil también deben estar en esta carpeta.
Métodos de la clase
//--- método de inicialización: bool Init( // si hay error devuelve falso, si es exitoso - verdadero int fast_period = 12, // el periodo de la media móvil rápida int slow_period = 26, // el periodo de la media móvil lenta int signal_period = 9, // el periodo de la media móvil de señal ENUM_MA_METHOD fast_method = MODE_EMA, // el método de la media móvil rápida ENUM_MA_METHOD slow_method = MODE_EMA, // el método de la media móvil lenta ENUM_MA_METHOD signal_method = MODE_SMA, // el método de la media móvil de señal 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 indexado normal de datos );
//--- el método de cálculo basado en una serie temporal o buffer de indicador: int MainOnArray( // devuelve el número de elementos procesados const int rates_total, // el tamaño del array array[] const int prev_calculated, // elementos procesados en la llamada anterior const double &array[] // el array de los valores de entrada );
//--- el método de cálculo basado en los elementos separados de la serie del array double MainOnValue( // devuelve el valor de OsMA para el elemento establecido const int rates_total, // el tamaño del array const int prev_calculated, // elementos procesados del array const int begin, // desde donde inician los datos significativos del array const double value, // elementos significativos del array const int index // el índice del elemento );
//--- los métodos para acceder a los datos: int BarsRequired(); // Devuelve el número necesario de barras para dibujar el 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 texto string SlowMethod() // Devuelve el método de suavizado de la línea lenta en forma de texto string SignalMethod() // Devuelve el método de suavizado de la línea de señal en forma de texto int FastPeriod() // Devuelve el periodo de suavizado de la línea rápida int SlowPeriod() // Devuelve el periodo de suavizado de la línea lenta int SignalPeriod() // Devuelve el periodo de suavizado de la línea de señal int Size(); // Devuelve el tamaño del buffer circular
Para obtener los datos calculados del indicador desde el buffer circular, es posible hacerlo como desde un array normal. Por ejemplo:
//--- la clase con los métodos del cálculo del indicador OsMA: #include <IncOnRingBuffer\COsMAOnRingBuffer.mqh> COsMAOnRingBuffer osma; ... //+------------------------------------------------------------------+ //| Función de iteración del indicador personalizado | //+------------------------------------------------------------------+ int OnCalculate(const int rates_total, const int prev_calculated, const int begin, const double &price[]) { //--- el cálculo del indicador basado en una serie temporal de precios: osma.MainOnArray(rates_total,prev_calculated,price); ... //--- usar los datos de los buffers de "osma", // copiar los datos en el buffer del indicador: for(int i=start;i<rates_total;i++) OsMABuffer[i]=osma[rates_total-1-i]; // histograma del indicador //--- valor de retorno de prev_calculated para la próxima llamada: return(rates_total); }
Ten en cuenta que la indexación en el buffer circular es la misma que en la serie temporal.
Ejemplos
- El archivo
Test_OsMA_OnArrayRB.mq5calcula el indicador basado en la serie temporal de precios. Se demuestra la aplicación del métodoMainOnArray() - El archivo
Test_OsMA_OnValueRB.mq5demuestra el uso del métodoMainOnValue(). Primero se calcula y dibuja el indicador OsMA. Luego, sobre la base de este buffer circular de este indicador se dibuja otro indicador OsMA.

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

El resultado del trabajo del archivo Test_OsMA_OnValueRB.mq5 con el tamaño del buffer circular de 256 elementos.
Al escribir el código se utilizaron los desarrollos de MetaQuotes Software Corp., Integer y GODZILLA.
Comentarios 0