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.mq5com base na série temporal de preços. A aplicação do métodoMainOnArray()é demonstrada. - O arquivo
Test_Fractals_OnValueRB.mq5demonstra o uso do métodoMainOnValue(). 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.
Comentário 0