Discussão do artigo "Handler de evento "Nova barra"" - página 3

 
laplacianlab:

Bom artigo, obrigado por compartilhar! Tudo isso foi muito útil!

De qualquer forma, usei sua função isNewBar e ela exibe a seguinte mensagem ao compilar:"possível perda de dados devido à conversão de tipos".

Então, alterei os tipos de variável de datetime para long dessa forma:

Agora ela compila sem nenhum aviso e parece funcionar bem. Obrigado!


Provavelmente é mais claro alterar desta forma:

   datetime lastbar_time=(datetime)SeriesInfoInteger(Symbol(),Period(),SERIES_LASTBAR_DATE);
 

Na primeira maneira de solicitar uma nova linha de coluna, não entendo como o número de novas colunas pode ser atribuído diretamente a 1;

 //--- Verificar se há novas linhas de coluna.
   if(m_lastbar_time<newbar_time)       
     { 
      m_new_bars=1;               // Número de linhas da nova coluna
      m_lastbar_time=newbar_time; // Lembrar o tempo da última barra
      return(true);
     }
   //--- //--- Verificar se há novas linhas de coluna.
   if(m_lastbar_time<newbar_time)       
     { 
      m_new_bars=1;               // Número de linhas da nova coluna
      m_lastbar_time=newbar_time; // Lembrar o tempo da última barra
      return(true);
     }
   //---
 

Pelas regras de modelagem de objetos é um nome equivocado dar o nome de CIsNewBar.

Vejamos, se carro é uma classe posso criar/ter um objeto carro. Porém, se minha classe é "ÉUmCarroNovo", nós podemos ter o possuir um "ÉUmCarroNovo".

 O mais adequado seria o autor ter dado o nome de CNewBarChecker. Alguém poderia inventar um Verificador de Carro Novo e criá-lo (nossa classe seria CVerificadorDeCarroNovo.

[Excluído]  
Você não usa o Tempo, você usa as Barras
 
Há muitas variações de código no artigo, mas, no final, ainda não está claro qual função é mais correta para usar no MT4 para aumentar, pelo menos um pouco, a correspondência do que o testador desenha com a negociação. Dê-me uma dica!
 
Pavel Komarovsky:
Há muitas variações de código no artigo, mas, no final, ainda não está claro qual função é mais correta para usar no MT4 para aumentar, pelo menos um pouco, a correspondência do que o testador desenha com a negociação. Dê-me uma dica!
datetime counted_bar = 0;

int OnInit()
{
   counted_bar = 0; // se você quiser que a última barra seja analisada na reinicialização
   ...

void OnTick()
{
   // Se houver uma nova barra
   if ( iTime( _Symbol, _Period, 0 ) > counted_bar )
   {
      counted_bar = iTime( _Symbol, _Period, 0 );

      // Analisar indicadores
      ...
   }
 
Andrey Khatimlianskii:

Andrey, obrigado. Diga-me por que o iTime é usado agora. Antes, lembro que em todas as funções e exemplos, a maioria deles era baseada no iBars.

O iTime funciona com mais precisão?

 
Pavel Komarovsky:

Andrey, obrigado. Diga-me por que o iTime é usado agora. Antes, lembro que em todas as funções e exemplos, a maioria deles era baseada no iBars.

O iTime funciona com mais precisão?

Nunca usei o iBars para essa finalidade, não sei.
 
Por que será que esse exemplo não consegue obter os dados da série temporal? Copiar... sempre -1 e Bars() sempre 0. Ou seja, não há acesso aos dados da classe
 

Esse artigo é tão bom que é usado até mesmo em aulas de programação MQL5, incluindo comentários, colaborações e correções de bugs. Parabéns a todos vocês.