Assista a como baixar robôs de negociação gratuitos
Encontre-nos em Telegram!
Participe de nossa página de fãs
Script interessante?
Coloque um link para ele, e permita que outras pessoas também o avaliem
Você gostou do script?
Avalie seu funcionamento no terminal MetaTrader 5
Indicadores

A classe para desenhar o indicador MFI usando o buffer anel - indicador para MetaTrader 5

Visualizações:
1848
Avaliação:
(19)
Publicado:
2014.01.14 15:10
Atualizado:
2016.11.22 07:33
\MQL5\Include\IncOnRingBuffer\ \MQL5\Indicators\IncOnRingBuffer\
Precisa de um robô ou indicador baseado nesse código? Solicite-o no Freelance Ir para Freelance

A classe CMFIOnRingBuffer foi projetada para cálculo do indicador técnico Índice de Fluxo de Dinheiro (Money Flow Index, MFI) utilizando o algoritmo do buffer anel.

Declaração

class CMFIOnRingBuffer : public CArrayRing

Título

#include <IncOnRingBuffer\CMFIOnRingBuffer.mqh>

O arquivo da classe CMFIOnRingBuffer.mqh deve ser colocado na pasta IncOnRingBuffer que precisa ser criada em MQL5\Include\. Dois arquivos com exemplos são utilizados pela classe a partir desta pasta que está anexado para a descrição. Arquivo com a classe do buffer anel e a classe Média Móvel também devem estar nesta pasta.

Métodos de classe

//--- Método de inicialização:
bool Init(                                             // Se com erro vai retornar - "false",
                                                       // se bem sucedido - "true"
   int                 period         = 14,            // período da MFI
   ENUM_MA_METHOD      method         = MODE_SMA,      // método de suavização  
   ENUM_APPLIED_PRICE  applied_price  = PRICE_TYPICAL, // preço usado para o cálculo
   ENUM_APPLIED_VOLUME applied_volume = VOLUME_TICK,   // volume usado para o cálculo
   int                 size_buffer    = 256,           // tamanho do buffer anel
   bool                as_series      = false          // "true", se for uma série temporal,do contrário - "false"
   );
//--- O método de cálculo baseado na série temporal ou nos buffers do indicadore:          
int MainOnArray(                  // retorna o número de elementos processados  
   const int     rates_total,     // o tamanho das  arrays
   const int     prev_calculated, // elementos processados na chamada anterior
   const double& open[],          // abertura dos preços
   const double& high[],          // máxima dos preços 
   const double& low[],           // mínima dos preços 
   const double& close[],         // fechamento dos preços
   const long&   tick_volume[],   // volume de tick
   const long&   volume[]);       // volume de estoque
   );
//--- Método de cálculo com base em elementos de série separados da array            
double MainOnValue(              // retorna o valor MFI para o elemento configurado (barra)
   const int    rates_total,     // to tamanho da array
   const int    prev_calculated, // elementos processados da array
   const int    begin,           // a partir de onde os dados significativos da array iniciam
   const double open,            // abertura da barra de preço
   const double high,            // o valor da máxima da barra preço 
   const double low,             // o valor da mínima da barra preço
   const double close,           // fechamento da barra de preço
   const long   tick_volume,     // volume de tick da barra
   const long   volume,          // volume de estoque da barra
   const int    index            // índice do elemento (barra)
   );
//--- Os 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
int                 Period();       // Retorna o período 
string              Method();       // Retorna o método na forma de linha de texto 
ENUM_APPLIED_PRICE  Price();        // Retorna o tipo de preço usado
ENUM_APPLIED_VOLUME Volume();       // Retorna o tipo de volume usado
int                 Size();         // Retorna o tamanho do buffer anel

Os dados calculados do indicador a partir do buffer anel são possíveis de serem obtidos a partir da array usual. Por exemplo:

//--- A classe com os métodos de cálculo do indicador MFI:
#include <IncOnRingBuffer\CMFIOnRingBuffer.mqh>
CMFIOnRingBuffer mfi;

...

//+------------------------------------------------------------------+
//| 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 baseado na série temporal do preço:
   mfi.MainOnArray(rates_total,prev_calculated,open,high,low,close,tick_volume,volume);

...

//--- Utilizar os dados do buffer anel "mfi",
//    por exemplo, copiar os dados no buffer do indicador:
   for(int i=start;i<rates_total && !IsStopped();i++)
      MFI_Buffer[i] = mfi[rates_total-1-i]; /linha do indicador

...

//--- Valor de retorno de prev_calculated para a próxima chamada:
   return(rates_total);
  }

Por favor, note que a indexação no buffer anel é a mesma que na série temporal.

Exemplos:

  1. O arquivo Test_MFI_OnArrayRB.mq5 calcula o indicador com base no preço das séries temporais. A aplicação do método MainOnArray() é demonstrado.
  2. O arquivo Test_MFI_OnValueRB.mq5 demonstra a utilização do método MainOnValue(). Primeiro o indicador MFI é calculado e desenhado. Em seguida, com base no buffer anel deste indicador, mais um indicador MFI é desenhado.

O resultado do trabalho do Test_MFI_OnArrayRB.mq5 com o tamanho do buffer anel de 256 elementos

O resultado do trabalho do Test_MFI_OnValueRB.mq5 com o tamanho do buffer anel de 256 elementos

Ao escrever código foram utilizados os desenvolvimentos da MetaQuotes Software Corp, Integer  e  GODZILLA.

Traduzido do russo pela MetaQuotes Ltd.
Publicação original: https://www.mql5.com/ru/code/1395

BrainTrend2Stop BrainTrend2Stop

BrainTrend2Stop é um indicador de detecção de inversão de tendência, ele é exibido pelas linhas de stops. A Intersecção da linha indica a reversão de tendência e o tempo para fechar as posições abertas anteriormente.

BrainTrend1 BrainTrend1

Indicador de Direção de Tendência BrainTrend1.

A classe para desenhar o indicador AMA usando o buffer anel. A classe para desenhar o indicador AMA usando o buffer anel.

A classe foi projetada para cálculo do indicador técnico Média Móvel Adaptativa (Adaptive Moving Average, AMA) utilizando o algoritmo do buffer anel.

BrainTrend2Sig BrainTrend2Sig

BrainTrend2Sig é um indicador de tendências do mercado, que atribui um símbolo tipo semáforo abaixo ou acima dos candles de acordo com a direção da tendência.