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 OBV usando o buffer anel - indicador para MetaTrader 5

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

A classe COBVOnRingBuffer class foi projetada para o cálculo do indicador técnico On Balance Volume(OBV) utilizando o algoritmo do buffer anel.

Declaração

class COBVOnRingBuffer : public CArrayRing

Título

#include <IncOnRingBuffer\COBVnRingBuffer.mqh>

O arquivo da classe COBVOnRingBuffer.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. O arquivo da classe de buffer de ring também deve 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      = 0,           // período para cálculo do OBV 
   int                 size_buffer = 256,         // o tamanho do buffer anel
   bool                as_series   = false        // "true", se for uma série temporal, do contrário - "false"
   );

O período OBV é usado igual no caso de um Integer: se o valor = 0 (padrão), o indicador trabalha igual ao incluído originalmente no termimnal- ele será calculado para todas as barras do gráfico. Em caso de determinar qualquer outro valor positivo para número de barras, será usado (princípio da Média Móvel ) para cálculo do valor em cada barra de gráfico. 

//--- Método de cálculo baseado em série de tempo ou nos buffers do indicador:          
int MainOnArray(                  // retorna o número de elementos processados  
   const int     rates_total,     // o tamanho da array
   const int     prev_calculated, // elementos processados na chamada anterior
   const double& price[],         // preço
   const long&   volume[]);       // volume
   );
//--- Método de cálculo com base em elementos de série separados da array            
double MainOnValue(              // retorna o valor OBV para o elemento configurado(barra)
   const int    rates_total,     // o 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 price,           // preço
   const long   volume,          // volume
   const int    index            // o í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
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 OBV:
#include <IncOnRingBuffer\COBVOnRingBuffer.mqh>
COBVOnRingBuffer obv;

...

//+------------------------------------------------------------------+
//| 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:
      obv.MainOnArray(rates_total,prev_calculated,close,tick_volume);

...

//--- Utilizar os dados do buffer anel"obv",
//    por exemplo, copiar os dados no buffer do indicador:
   for(int i=start;i<rates_total && !IsStopped();i++)
      OBV_Buffer[i] = obv[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 indicador calcula o arquivo Test_OBV_OnArrayRB.mq5 com base na série temporal de preço. A aplicação do método MainOnArray() é demonstrado.
  2. O arquivo Test_OBV_OnValueRB.mq5 demonstra a utilização do método MainOnValue(). Primeiro o indicador OBV é calculado e desenhado. Em seguida, com base na buffer anel deste indicador, mais um OBV é desenhada.

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

O resultado do trabalho do Test_OBV_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/1402

RoundPrice-Ext RoundPrice-Ext

Indicador muito conveniente para confirmar qualquer sinal de entrada no mercado.

Renko_v1 Renko_v1

Indicador de tendência que desenha os limites de um canal.

Indicador АО 4-cor (4-color АО  ) Indicador АО 4-cor (4-color АО )

Indicador АО 4-cor (4-color АО).

StepSto_v1 StepSto_v1

Indicador de tendência. A linha de nível 50 do indicador pode servir como ponto para determinar a tendência.