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 CFractalsOnRingBufferTí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.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