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
- 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.
- 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
- Calendário Econômico: Monitoramento e Cache para Testes de Estratégia no MetaTrader 5
- iMFISignAlert: O Indicador para MetaTrader 5 que Gera Alertas
- Buffers Horários para Coleta de Dados no MetaTrader 5
- FFC - Calendário Forex Factory: Um Indicador Essencial para MetaTrader 4
- Painel Gráfico: Mostre a Tendência Atual em Todos os Tempos no MetaTrader 4