Como Utilizar o Indicador Fractais com Buffer Circular no MetaTrader 5

Mike 2013.01.18 22:00 27 0 0
Anexo

Descrição

O CFractalsOnRingBuffer é um recurso incrível para calcular o indicador técnico Fractais, utilizando a eficiente técnica do buffer circular. Isso pode auxiliar muito na análise de gráficos e na tomada de decisões de trades.

Declaração da Classe

class CFractalsOnRingBuffer

Título

#include <IncOnRingBuffer\CFractalsOnRingBuffer.mqh>

O arquivo CFractalsOnRingBuffer.mqh deve ser colocado na pasta IncOnRingBuffer, que precisa estar configurada em MQL5\Include\. Dois arquivos de exemplos que utilizam esta classe estão anexados à descrição. O arquivo com a classe do buffer circular também deve estar nesta pasta.

Métodos da Classe

//--- método de inicialização:
bool Init(  // se houver erro retorna false, se sucesso - true  int  bars_right  = 2,  // número de barras à direita do extremo
  int  bars_left   = 2,  // número de barras à esquerda do extremo
  int  size_buffer = 256,  // tamanho do buffer circular
  bool as_series   = false  // true, se for uma série temporal, caso contrário - false
);
//--- método de cálculo baseado em uma série temporal ou nos buffers do indicador:
int MainOnArray(  // retorna o número de elementos processados
  const int  rates_total,  // tamanho dos arrays
  const int  prev_calculated,  // elementos processados na chamada anterior
  const double& high[],  // array dos máximos
  const double& low[]  // array dos mínimos
);
//--- método de cálculo de fractal baseado em uma série separada de elementos do array high[]
double MainOnHigh(  // retorna o valor do fractal de alta para o elemento index-bars_right (barra)
  const int  rates_total,  // tamanho do array
  const int  prev_calculated,  // elementos processados do array
  const int  begin,  // a partir de onde os dados significativos do array começam
  const double high,  // máximo da barra atual
  const int index  // índice do elemento atual (barra)
);
//--- método de cálculo de fractal de baixa baseado em uma série separada de elementos do array low[]
double MainOnLow(  // retorna o valor do fractal de baixa para o elemento index-bars_right (barra)
  const int  rates_total,  // tamanho do array
  const int  prev_calculated,  // elementos processados do array
  const int  begin,  // a partir de onde os dados significativos do array começam
  const double low,  // mínimo da barra atual, máximo do elemento atual do array 
  const int index  // índice do elemento atual (barra)
);
//--- 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 NameUpper();  // Retorna o nome dos fractais de alta
string NameLower();  // Retorna o nome dos fractais de baixa
int  BarsRight();  // Retorna o número de barras à direita do extremo
int  BarsLeft();  // Retorna o número de barras à esquerda do extremo
int  Size();  // Retorna o tamanho do buffer circular

Para obter os dados calculados do indicador a partir dos buffers circulares, você pode acessá-los como faria com um array comum. Por exemplo:

//--- classe com métodos de cálculo do indicador Fractais:
#include <IncOnRingBuffer\CFractalsOnRingBuffer.mqh>
CFractalsOnRingBuffer fractals;

...
//+------------------------------------------------------------------+
//| Função de iteração do indicador personalizado                        |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
  const int prev_calculated,
  const datetime& time[],
  const double& open[],
  const double& high[],
  const double& low[],
  const double& close[],
  const long& tick_volume[],
  const long& volume[],
  const int& spread[])
  {
//--- cálculo do indicador com base na série temporal de preços:
  fractals.MainOnArray(rates_total, prev_calculated, high, low);

...
//--- use os dados dos buffers circulares "fractals",
//    por exemplo, copie os dados no buffer do indicador:
  for(int i=start; i<rates_total-BarsRight && !IsStopped(); i++)
  {
    UpperBuffer[i] = fractals.upper[rates_total-1-i]; // fractais de alta
    LowerBuffer[i] = fractals.lower[rates_total-1-i]; // fractais de baixa
  }

...
//--- retorna valor de prev_calculated para a próxima chamada:
  return(rates_total);
  }

Observe que a indexação nos buffers circulares é a mesma que na série temporal.

Exemplos

  • O indicador calcula o arquivo Test_Fractals_OnArrayRB.mq5 com base na série temporal de preços. A aplicação do método MainOnArray() é demonstrada.
  • O arquivo Test_Fractals_OnValueRB.mq5 demonstra o uso do método MainOnValue(). Inicialmente, o indicador Fractais é calculado e desenhado. Em seguida, com base neste buffer circular do indicador, mais um Fractal é desenhado.


Resultado do funcionamento do Test_Fractals_OnArrayRB.mq5 com o tamanho do buffer circular de 256 elementos



Resultado do funcionamento do Test_Fractals_OnValueRB.mq5 com o tamanho do buffer circular de 256 elementos

 

Desenvolvimentos de MetaQuotes Software Corp., Integer  e GODZILLA foram utilizados.

Lista
Comentário 0