Descrição
A classe CMACDOnRingBuffer foi criada para calcular o indicador técnico de Convergência/Divergência da Média Móvel (MACD) utilizando o algoritmo de buffer circular.
Declaração
class CMACDOnRingBufferTítulo
#include <IncOnRingBuffer\CMACDOnRingBuffer.mqh>O arquivo da classe CMACDOnRingBuffer.mqh deve ser colocado na pasta IncOnRingBuffer, que precisa ser criada em MQL5\Include\. Dois arquivos com exemplos que utilizam essa classe estão anexados à descrição. O arquivo da classe de buffer circular e o arquivo da classe de Média Móvel também devem estar nessa pasta.
Métodos da Classe
//--- método de inicialização: bool Init(// se houver erro, retorna false; se bem-sucedido - true int fast_period = 12, // período da Média Móvel rápida int slow_period = 26, // período da Média Móvel lenta int signal_period = 9, // período da Média Móvel do sinal ENUM_MA_METHOD fast_method = MODE_EMA, // método de suavização da Média Móvel rápida ENUM_MA_METHOD slow_method = MODE_EMA, // método de suavização da Média Móvel lenta ENUM_MA_METHOD signal_method = MODE_SMA, // método de suavização da linha de sinal int size_buffer = 256, // tamanho do buffer circular bool as_series = false);
//--- método de cálculo baseado em uma série temporal ou buffer de indicador: int MainOnArray(// retorna o número de elementos processados const int rates_total, // tamanho do array const int prev_calculated, // elementos processados na chamada anterior const double &array[]);
//--- método de cálculo baseado em elementos separados da série do array double MainOnValue(// retorna o valor do MACD para o elemento definido const int rates_total, const int prev_calculated, const int begin, const double value, const int index);
//--- métodos de acesso aos dados: int BarsRequired(); // Retorna o número necessário de barras para desenhar o indicador string Name(); // Retorna o nome do indicador string NameMain(); // Retorna o nome da linha principal do indicador string NameSignal(); // Retorna o nome da linha de sinal do indicador string FastMethod(); // Retorna o método de suavização da linha rápida string SlowMethod(); // Retorna o método de suavização da linha lenta string SignalMethod(); // Retorna o método de suavização da linha de sinal int FastPeriod(); // Retorna o período de suavização da linha rápida int SlowPeriod(); // Retorna o período de suavização da linha lenta int SignalPeriod(); // Retorna o período de suavização da linha de sinal int Size(); // Retorna o tamanho do buffer circular
Para obter os dados calculados do indicador a partir do buffer circular, é possível acessá-los como de um array comum. Por exemplo:
//--- classe com os métodos de cálculos do indicador MACD: #include <IncOnRingBuffer\CMACDOnRingBuffer.mqh> CMACDOnRingBuffer macd; ... //+------------------------------------------------------------------+ //| Função de iteração do indicador customizado | //+------------------------------------------------------------------+ 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: macd.MainOnArray(rates_total, prev_calculated, price); ... //--- use os dados dos buffers circulares "macd", // copie os dados nos buffers do indicador: for(int i=start; i<rates_total; i++) { MainBuffer[i] = macd[rates_total - 1 - i]; // histograma do indicador SignalBuffer[i] = macd.signal[rates_total - 1 - i]; // linha de sinal do indicador } //--- retorna o valor de prev_calculated para a próxima chamada: return(rates_total); }
Vale ressaltar que a indexação no buffer circular é a mesma que na série temporal.
Exemplos
- O arquivo
Test_MACD_OnArrayRB.mq5calcula o indicador baseado na série temporal de preços. A aplicação do métodoMainOnArray()é demonstrada. - O arquivo
Test_MACD_OnValueRB.mq5demonstra o uso do métodoMainOnValue(). Primeiro, o indicador MACD é calculado e desenhado. Depois, com base no buffer circular desse indicador, um outro indicador MACD é desenhado.

Resultado do arquivo Test_MACD_OnArrayRB.mq5 com o tamanho do buffer circular de 256 elementos

Resultado do arquivo Test_MACD_OnValueRB.mq5 com o tamanho do buffer circular de 256 elementos
Desenvolvimentos da MetaQuotes Software Corp., Integer e GODZILLA foram utilizados.
Comentário 0