Como Usar a Classe CMACDOnRingBuffer no MetaTrader 5 para Calcular o MACD

Mike 2012.12.28 17:51 63 0 0
Anexo

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 CMACDOnRingBuffer

Tí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

  1. O arquivo Test_MACD_OnArrayRB.mq5 calcula o indicador baseado na série temporal de preços. A aplicação do método MainOnArray() é demonstrada.
  2. O arquivo Test_MACD_OnValueRB.mq5 demonstra o uso do método MainOnValue(). 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.

Lista
Comentário 0