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
Bibliotecas

A classe para criar o buffer anel - biblioteca para MetaTrader 5

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

O buffer anel é uma forma de organização de armazenamento de dados. Geralmente representa uma array finita de comprimento para a entrada, onde os elementos mais antigos são substituídos por dados mais recentes. Assim, sempre existirá o acesso a um certo número dos últimos dados. Principalmente utilizado para o assíncrona leitura/escrita de fluxo de dados. Para mais detalhes clique aqui.

Ao escrever os Expert Advisors e indicadores, muitas vezes não precisa armazenar os valores calculados para todas os barras. Será o suficiente para manter em mãos os últimos dados, por exemplo, para 100 barras. O buffer anel é adequado para isso. As vantagens óbvias:

  • aumento dos cálculos
  • economia de memória
  • fácil de usar, não há necessidade de se preocupar com a saída além da array.

Declaração

сlass CArrayRing

Título

#include <IncOnRingBuffer\CArrayRing.mqh>

O arquivo da classe CArrayRing.mqh precisa ser colocados na pasta IncOnRingBuffer que é necessária criar no MQL5\Include\. Abaixo exemplos para utilização desta classe.

Métodos de classe

//--- o buffer do método de inicialização :
bool Init(                  // Se com erro vai retornar false, se bem sucedida - true
   int    size,             // tamanho do buffer anel
   double volue=EMPTY_VALUE // significando localização vazia dos buffers
   );
//--- o método de adição de novo elemento no buffer:
void Add(
   const double element     // valor do elemento adicionado
   ); 
//--- o método substitui o valor do elemento com o índice fornecido:
bool Update(                // Se com erro vai retornar false, se bem sucedida - true
   const double element,    // novo valor do elemento
   const int index=0        // índice do elemento
   );  
//--- o método retorna o valor do elemento com o índice fornecido:
double At(                  // retorna o valor do elemento
   const int index          // índice do elemento
   ) const;
//--- o método retorna o valor da última escrita no elemento buffer:
double Last() const;
//--- O método substitui o último valor do elemento no buffer:
void Last(
   const double element     // novo valor do elemento element
   );  
//--- a método retorna o tamanho do buffer anel: 
int Size();
//---  método altera o tamanho do buffer anel:
bool Resize(
   const int size           // novo tamanho
   );

Nota:

  • quando o tamanho do buffer diminuir, então não será o último elemento e sim os elementos mais antigos que estão faltando
  • na realização obtida do buffer anel, a indexação é aceita como nas séries de tempo, ou seja, o oposto ao usual

Exemplos:

Há três exemplos de como usar o buffer anel para o momento da publicação:

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

A classe para desenhar uma média móvel usando o buffer anel (ring) A classe para desenhar uma média móvel usando o buffer anel (ring)

A classe foi projetada para cálculo de médias móveis (Moving Average) usando o algoritmo do buffer anel.

Blau_Ergodic Blau_Ergodic

Oscilador Ergodic por William Blau.

Blau_TSI Blau_TSI

Indicador Índice de Força verdadeira (TSI) por William Blau.

Exp_ColorLeManTrend Exp_ColorLeManTrend

O sistema de negociação Exp_ColorLeManTrend se baseia nas variações da direção da tendência exibidos pelo indicador ColorLeManTrend.