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

Mike 2012.12.28 17:51 35 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
   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

  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