Como Utilizar o Indicador Fractais com Buffer Circular no MetaTrader 5

Mike 2013.01.18 22:00 34 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 - trueint  bars_right  = 2,  // número de barras à direita do extremoint  bars_left   = 2,  // número de barras à esquerda do extremoint  size_buffer = 256,  // tamanho do buffer circularbool 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 processadosconstint  rates_total,  // tamanho dos arraysconstint  prev_calculated,  // elementos processados na chamada anteriorconstdouble& high[],  // array dos máximosconstdouble& 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)constint  rates_total,  // tamanho do arrayconstint  prev_calculated,  // elementos processados do arrayconstint  begin,  // a partir de onde os dados significativos do array começamconstdouble high,  // máximo da barra atualconstint 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)constint  rates_total,  // tamanho do arrayconstint  prev_calculated,  // elementos processados do arrayconstint  begin,  // a partir de onde os dados significativos do array começamconstdouble low,  // mínimo da barra atual, máximo do elemento atual do array constint 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 indicadorstring Name();  // Retorna o nome do indicadorstring NameUpper();  // Retorna o nome dos fractais de altastring NameLower();  // Retorna o nome dos fractais de baixaint  BarsRight();  // Retorna o número de barras à direita do extremoint  BarsLeft();  // Retorna o número de barras à esquerda do extremoint  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                        |//+------------------------------------------------------------------+intOnCalculate(constint rates_total,
  constint prev_calculated,
  constdatetime& time[],
  constdouble& open[],
  constdouble& high[],
  constdouble& low[],
  constdouble& close[],
  constlong& tick_volume[],
  constlong& volume[],
  constint& 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