Início Indicador técnico Postagem

Aprenda a Usar a Classe CAMAOnRingBuffer para o Indicador AMA no MetaTrader 5

Anexo
1375.zip (8.46 KB, Baixar 0 vezes)

Descrição

A classe CAMAOnRingBuffer foi criada para calcular o indicador técnico Adaptive Moving Average (AMA) utilizando o algoritmo de buffer circular.

Declaração

class CAMAOnRingBuffer : public CArrayRing

Título

#include <IncOnRingBuffer\CAMAOnRingBuffer.mqh>

O arquivo da classe CAMAOnRingBuffer.mqh deve ser colocado na pasta IncOnRingBuffer, que precisa ser criada dentro de MQL5\Include\. Dois arquivos com exemplos de uso da classe já estão anexados à descrição. O arquivo da classe do buffer circular e a classe do Efficiency Ratio também devem estar nessa pasta.

Métodos da classe

//--- método de inicialização:
bool Init(                                  // se erro retorna falso, se bem sucedido - verdadeiro
   int            period        = 10,       // período da AMA 
   int            fast_period   = 2,        // período da EMA rápida 
   int            slow_period   = 30,       // período da EMA lenta
   int            size_buffer   = 256,      // tamanho do buffer circular, quantidade de dados armazenados
   bool           as_series     = false     // verdadeiro, se for uma série temporal, falso - se for um indexador normal dos dados de entrada
   );
//--- método de cálculo baseado em uma série temporal ou buffer de indicador:          
int MainOnArray(                  // retorna a quantidade de elementos processados  
   const int     rates_total,     // tamanho do array array[]
   const int     prev_calculated, // elementos processados na chamada anterior
   const double &array[]          // array de valores de entrada
   );
//--- método de cálculo baseado nos elementos separados da série do array           
double MainOnValue(              // retorna o valor da AMA para o elemento definido
   const int    rates_total,     // tamanho do array
   const int    prev_calculated, // elementos processados do array
   const int    begin,           // de onde começam os dados significativos do array
   const double value,           // valor do elemento do array
   const int    index            // índice do elemento
    );
//--- métodos de acesso aos dados:
int    BarsRequired();   // Retorna a quantidade necessária de barras para desenhar o indicador
string Name();           // Retorna o nome do indicador
string FastPeriod();       // Retorna o período de suavização da EMA rápida  
int     SlowPeriod();        // Retorna o período de suavização da EMA lenta
int    Period();           // Retorna o período da AMA
int    Size();           // Retorna o tamanho do buffer circular

Os dados calculados do indicador podem ser obtidos do buffer circular da mesma forma que um array comum. Por exemplo:

//--- a classe com métodos de cálculo do indicador AMA:
#include <IncOnRingBuffer\CAMAOnRingBuffer.mqh>
CAMAOnRingBuffer ama;

...

//+------------------------------------------------------------------+
//| Função de iteração do indicador personalizado                              |
//+------------------------------------------------------------------+
int OnCalculate(const int    rates_total, 
                const int    prev_calculated, 
                const int    begin, 
                const double &price[]) 
  {
//--- cálculo do indicador baseado na série temporal de preços:
   ama.MainOnArray(rates_total,prev_calculated,price);

...
//--- use os dados do buffer circular "ama",
//    por exemplo, copie os dados no buffer do indicador:
   for(int i=start;i<rates_total;i++)
      AMA_Buffer[i] = ama[rates_total-1-i];          // linha do indicador

//--- retorna o valor de prev_calculated para a próxima chamada:
   return(rates_total);
  }

É importante notar que a indexação no buffer circular é a mesma que nas séries temporais.

Exemplos

  1. O arquivo Test_AMA_OnArrayRB.mq5 calcula o indicador com base na série temporal de preços. A aplicação do método MainOnArray() é demonstrada.
  2. O arquivo Test_AMA_OnValueRB.mq5 demonstra o uso do método MainOnValue(). Primeiro, o indicador AMA é calculado e desenhado. Em seguida, com base nesse buffer circular do indicador, um novo AMA é desenhado.


O resultado do trabalho do Test_AMA_OnArrayRB.mq5 com o tamanho do buffer circular de 256 elementos



O resultado do trabalho do Test_AMA_OnValueRB.mq5 com o tamanho do buffer circular de 256 elementos

 

Ao escrever o código, foram utilizados desenvolvimentos da MetaQuotes Software Corp., Integer e GODZILLA.

Publicações relacionadas

Comentário (0)