Inicio Indicador técnico Publicación

Clase para Dibujar la Media Móvil Adaptativa (AMA) Usando Buffer Circular - Indicador para MetaTrader 5

Archivos adjuntos
1375.zip (8.46 KB, Descargar 0 veces)

Descripción

La clase CAMAOnRingBuffer está diseñada para calcular el indicador técnico Media Móvil Adaptativa (AMA) utilizando el algoritmo del buffer circular.

Declaración

class CAMAOnRingBuffer : public CArrayRing

Título

#include <IncOnRingBuffer\CAMAOnRingBuffer.mqh>

El archivo de la clase CAMAOnRingBuffer.mqh debe colocarse en la carpeta IncOnRingBuffer, que debe establecerse en MQL5\Include\. Se adjuntan dos archivos con los ejemplos utilizados por la clase desde esta carpeta. El archivo de la clase del buffer circular y la clase del Ratio de Eficiencia 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            periodo        = 10,       // el periodo de AMA 
   int            periodo_rapido   = 2,        // el periodo de EMA rápido 
   int            periodo_lento   = 30,       // el periodo de EMA lento
   int            tamaño_buffer   = 256,      // el tamaño del buffer circular, número de datos almacenados
   bool           como_serie     = false     // verdadero, si es una serie temporal, falso - si es un índice normal de los datos de entrada
   );
//--- 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     total_rates,     // el tamaño de la array array[]
   const int     prev_calculado, // 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 la AMA para el elemento establecido
   const int    total_rates,     // el tamaño del array
   const int    prev_calculado, // elementos procesados del array
   const int    inicio,           // desde dónde comienzan los datos significativos del array
   const double valor,           // el valor del elemento del array
   const int    índice            // el índice del elemento
    );
//--- 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
string FastPeriod();       // Devuelve el periodo de suavizado EMA rápido  
int     SlowPeriod();         // Devuelve el periodo de suavizado EMA lento
int    Periodo();           // Devuelve el periodo de AMA
int    Tamaño();           // 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 métodos de cálculo del indicador AMA:
#include <IncOnRingBuffer\CAMAOnRingBuffer.mqh>
CAMAOnRingBuffer ama;

...

//+------------------------------------------------------------------+
//| Función de iteración del indicador personalizado                              |
//+------------------------------------------------------------------+
int OnCalculate(const int    total_rates, 
                const int    prev_calculado, 
                const int    inicio, 
                const double &precio[]) 
  {
//--- cálculo del indicador basado en la serie temporal de precios:
   ama.MainOnArray(total_rates,prev_calculado,precio);

...

//--- usar los datos del buffer circular "ama",
//    por ejemplo, copiar los datos en el buffer del indicador:
   for(int i=inicio;i<total_rates;i++)
      AMA_Buffer[i] = ama[total_rates-1-i];          // línea del indicador

//--- valor de retorno de prev_calculado para la próxima llamada:
   return(total_rates);
  }

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_AMA_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_AMA_OnValueRB.mq5 demuestra el uso del método MainOnValue(). Primero se calcula y dibuja el indicador AMA. Luego, sobre la base de este buffer circular del indicador, se dibuja otra AMA.


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



El resultado del trabajo del Test_AMA_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 GODZILLA.

Publicaciones relacionadas

Comentarios (0)