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 constint rates_total, // tamanho do array constint prev_calculated, // elementos processados na chamada anterior constdouble &array[]);
//--- método de cálculo baseado em elementos separados da série do arraydouble MainOnValue(// retorna o valor do MACD para o elemento definido constint rates_total, constint prev_calculated, constint begin, constdouble value, constint index);
//--- métodos de acesso aos dados:int BarsRequired(); // Retorna o número necessário de barras para desenhar o indicadorstring Name(); // Retorna o nome do indicadorstring NameMain(); // Retorna o nome da linha principal do indicadorstring NameSignal(); // Retorna o nome da linha de sinal do indicadorstring FastMethod(); // Retorna o método de suavização da linha rápidastring SlowMethod(); // Retorna o método de suavização da linha lentastring SignalMethod(); // Retorna o método de suavização da linha de sinalint FastPeriod(); // Retorna o período de suavização da linha rápidaint SlowPeriod(); // Retorna o período de suavização da linha lentaint SignalPeriod(); // Retorna o período de suavização da linha de sinalint 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 |//+------------------------------------------------------------------+intOnCalculate(constint rates_total, constint prev_calculated, constint begin, constdouble &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