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

 

Bom dia e bom humor a todos!

Gostaria de saber se este código

bool IsNewBar()
  {
   static datetime TimeOld;
   datetime TimeNew[1];
   CopyTime(_Symbol,PERIOD_CURRENT,0,1,TimeNew);
   if(TimeNew[0]!=TimeOld)
     {
      TimeOld=TimeNew[0];
      return(true);
     }
   return(false);
  }

funcionará? Eu o encontrei no site da MQL5 há muito tempo e não me lembro de quem o copiei.

Saudações, Vladimir.

 
MrBrooklin #:

Bom dia e bom ânimo a todos!

Gostaria de saber se um código como este:

funcionará? Eu o encontrei no site da MQL5 há muito tempo e não me lembro de quem o copiei.

Saudações, Vladimir.

A propósito, eu também uso esse código e ele funciona muito bem, mas é um pouco mais amplo, podendo ser usado para qualquer TF!

bool isNewBar(string INST,int K, ENUM_TIMEFRAMES timeFrame)
  {
//----
   bool res=false;               // variável de resultado da análise 
   int  i=0;                     // matriz número de células old_Times[] 
   datetime new_Time[1];         // hora da nova barra

   switch(K)
     {
      case 0:  i= 0; break;
      case 1:  i= 1; break;
      case 2:  i= 2; break;
      case 3:  i= 3; break;
      case 4:  i= 4; break;
      case 5:  i= 5; break;
      case 6: i= 6; break;
      case 7: i= 7; break;
      case 8: i= 8; break;
      case 9: i= 9; break;
      case 10: i=10; break;
      case 11:  i=11; break;
      case 12:  i=12; break;
      case 13:  i=13; break;
     }
   // copiar a hora da última barra para a célula new_Time[0] 
   int copied=CopyTime(INST,timeFrame,0,1,new_Time);
   
   if(copied>0) // tudo ok. dados copiados
      {
      if(old_Times[i]!=new_Time[0])       // se o tempo da barra antiga não for igual ao tempo da barra nova
         {
         if(old_Times[i]!=0) res=true;    // se essa não for a primeira execução, então true = new bar
         old_Times[i]=new_Time[0];        // lembrar o horário do bar 
         }
      }      
//----
   return(res);
  }
 
switch(K)
     {
      case 0:  i= 0; break;
      case 1:  i= 1; break;
      case 2:  i= 2; break;
      case 3:  i= 3; break;
      case 4:  i= 4; break;
      case 5:  i= 5; break;
      case 6: i= 6; break;
      case 7: i= 7; break;
      case 8: i= 8; break;
      case 9: i= 9; break;
      case 10: i=10; break;
      case 11:  i=11; break;
      case 12:  i=12; break;
      case 13:  i=13; break;
     }

Uau).

 
Dmitry Fedoseev #:

Uau).

Quem está em K? Acho que já dei uma olhada em tudo.

comparação de matriz

Fiquei desapontado com a nova barra, não há coincidência de negociações, por algum motivo que não está claro para mim, não há impressão, ou seja, não há acionamento ou serieslastbar ou apenas um atraso no tempo, tenho um ping alto (140), talvez esse seja o motivo.

Tentei muitas variantes do newbar, em todos os lugares havia uma gagueira, testada em 3 terminais em um computador.

Removi o newbar e todos os terminais negociaram no servidor 1in1 100% por vários dias.

 
Fast235 #:

Quem está em K? Acho que já dei uma olhada em tudo.

comparação de matriz

Estou decepcionado com a nova barra, não há coincidência de negócios, por motivos que não entendo, não há impressão, ou seja, não há acionamento ou serieslastbar ou apenas um atraso no tempo, tenho um ping alto (140), talvez seja esse o motivo.

Nos parâmetros K.

Porque com essa função não há uma segunda tentativa no caso de um erro com uma ordem.

 

e a negociação não é feita no OnTick, mas no OnChartEvent(spy), e na implementação mais rápida possível, somente por meio do id, o restante não é transferido

7 símbolos, a passagem de um símbolo em um grande número de condições e contagens, na sessão americana, 0,5-0,7% ryzen 3700x

tentou até mesmo uma nova barra através de uma nova barra do indicador, também divergem negócios, 5 normais e, em seguida, em um, em seguida, no outro gagueja.

 
De qualquer forma, o algoritmo analisa a última barra e, nesse caso, há até uma vantagem: se a negociação for cancelada, ela não irá a lugar algum dentro dos limites do spread e da limitação do "desvio"
 
Mihail Marchukajtes #:

A propósito, eu também uso esse código e ele funciona muito bem, só que é um pouco mais amplo, você pode usá-lo para qualquer TF!

Obrigado, Mikhail, vou adicioná-lo à minha biblioteca de funções.

Saudações, Vladimir.

 
Armen Shahinyan #:

Não tenho nenhum método mais simples do que este.
Rastreia o horário de abertura da barra atual e os compara a cada tick.


Remova a primeira função do código. E a vida ficará melhor.

 

Em geral, duas circunstâncias são interessantes:

1. Todos foram banidos por algum motivo.

2. Uma nova barra é sempre diferente no tempo da anterior. A qualquer momento, porque ela sempre vai da esquerda para a direita. Pegue qualquer hora. Se ela não coincidir com a mesma anterior, então a barra é nova.