Tiki em tempo real - página 18

 
prostotrader:

Enquanto o debate continua, fiz outra experiência.

Quero dizer, durante a inicialização, eu a cronometro por um microssegundo,

e antes de cada impressão, eu furo novamente o tempo.

Idealmente, deveria ser assim

Mas muitas vezes isso acontece (exposições de troncos):

Mas não cabe com 4 segundos...

oh, eles finalmente descobriram como cronometrá-la, progredir!)

s.s. como uma confirmação de que o tempo não está exatamente escrito em disco eu lhe darei um teste simples, entre operações no Teste são feitos alguns cálculos, levando em média 7 microssegundos.

Ao mesmo tempo, vemos que com o mesmo tempo em microssegundos as impressões são emitidas em dezenas + tais operações, e as impressões são emitidas a cada microssegundo. Acho que tudo isso faz sentido.

ap: se você colocar a primeira impressão logo antes da segunda, então o delta já é 0-1, então a impressão é a mais longa desta cadeia.

   for(int count=0;count<10000;count++) 
     { 
         ul=GetMicrosecondCount();         
         Print("MicrosecondCount ",ul);
         Test(); 
         ul_cur=GetMicrosecondCount(); 
         Print("MicrosecondCount ", ul_cur, " delta ",ul_cur-ul);
     }     



 
Aleksey Mavrin:

Oh, eles finalmente descobriram como cronometrá-lo, progredir!)

Qual é o seu problema, senhor? Você não tem nada melhor para fazer?

Foi aí que tudo começou!

 
prostotrader:

O senhor não? Você não tem nada melhor para fazer?

Foi aqui que tudo começou!

Adicionado por

Além disso, você não sabe quea GetMicrosecondCount() tem um erro de até 16 ms! :)

A função que dá microssegundos, tem um erro de até 16 milissegundos, ou seja, um erro muito maior do que seu nome, bem, bem))) você também pode confirmar com um pruf?

 
Aleksey Mavrin:

Uma função que dá microssegundos tem um erro de até 16 milissegundos, ou seja, um erro que é uma ordem de magnitude maior que seu nome, bem, bem)) você pode confirmar isso também com uma aspereza?

Entendi errado

 
prostotrader:

Errado

Bem, parabéns a você por admitir o erro de imediato ;)

A defasagem de 4 segundos é muito provavelmente verdadeira em algum momento o terminal ficou confuso, parece acontecer quando o antivírus começa a varredura, etc. casos.

E 4 segundos significa que a impressão é 4 segundos mais tarde no cache do registro, não que o OnBook veio 4 segundos mais tarde (embora eu ache que é possível dependendo de como o computador está carregado no momento)

s.w. como Print vai para a fila primeiro e de lá para o registro.
 
Aleksey Mavrin:

Bem, parabéns a você por admitir o erro de imediato ;)

O atraso de 4 segundos é mais provável que em algum momento o terminal fique confuso, parece acontecer quando os casos de antivírus começam a ser analisados, etc.

E 4 segundos exatamente significa que a impressão veio 4 segundos mais tarde no cache do registro, não que o OnBook veio 4 segundos mais tarde (embora eu ache que é possível dependendo de como você carrega o computador naquele momento)

s.w. como Print vai para a fila primeiro e de lá para o registro.

Sim, é possível.

 
Aleksey Mavrin:

E 4 segundos significa exatamente que a impressão veio 4 segundos depois no cache de registro, não que o OnBook veio 4 segundos depois (embora eu ache que é possível, dependendo de como o computador é carregado no momento)

s.w. Print vai primeiro para a fila e de lá para o registro.

Bem, sim, e quanto a isso?

Um gráfico estava rodando OnBook e o outro OnTick.

//+------------------------------------------------------------------+
//|                                                   Ticks_test.mq5 |
//|                                      Copyright 2019 prostotrader |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2019 prostotrader"
#property link      "https://www.mql5.com"
#property version   "1.00"
//---
bool is_book;
enum ENUM_BOOK_OR_TICK
{
        USE_BOOK,       // Use OnBookEvent
        USE_TICK        // Use OnTick
};

input ENUM_BOOK_OR_TICK Mode = USE_BOOK;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
{
  if(Mode == USE_BOOK) is_book = MarketBookAdd(Symbol());
  return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
  if(Mode == USE_BOOK)
  {
    if(is_book == true) MarketBookRelease(Symbol());
  }  
}
//+------------------------------------------------------------------+
//| BookEvent function                                               |
//+------------------------------------------------------------------+
void OnBookEvent(const string &symbol)
{
  if((Symbol() != symbol) || (Mode != USE_BOOK)) return;
  Print(__FUNCTION__, "; Time: ", GetTickCount(), " ms");
}
void OnTick()
{
  if(Mode != USE_TICK) return;
  Print(__FUNCTION__, "; Time: ", GetTickCount(), " ms");
}
//+------------------------------------------------------------------+


56 ms de diferença entre OnTick e OnBook

e a mesma diferença na impressão :)

2020.02.04 22:37:48.212 Ticks_test_2 (GOLD-3.20,M1)     OnTick; Time: 205482644 ms
2020.02.04 22:37:49.268  Ticks_test_2 (GOLD-3.20,M1)     OnBookEvent; Time: 20548369 0 ms

2020.02.04 22:37:50.354 Ticks_test_2 (GOLD-3.20,M1)     OnTick; Time: 205484782 ms
2020.02.04 22:37:50.354 Ticks_test_2 (GOLD-3.20,M1)     OnBookEvent; Time: 205484782 ms

2020.02.04 22:37:51.064 Ticks_test_2 (GOLD-3.20,M1)     OnTick; Time: 205485484 ms
2020.02.04 22:37:51.064 Ticks_test_2 (GOLD-3.20,M1)     OnBookEvent; Time: 205485484 ms

2020.02.04 22:37:52.833 Ticks_test_2 (GOLD-3.20,M1)     OnTick; Time: 205487262 ms
2020.02.04 22:37:52.833 Ticks_test_2 (GOLD-3.20,M1)     OnBookEvent; Time: 205487262 ms

2020.02.04 22:38:01.932 Ticks_test_2 (GOLD-3.20,M1)     OnTick; Time: 205496357 ms
2020.02.04 22:38:01.932 Ticks_test_2 (GOLD-3.20,M1)     OnBookEvent; Time: 205496357 ms

2020.02.04 22:38:05.310 Ticks_test_2 (GOLD-3.20,M1)     OnTick; Time: 205499742 ms
2020.02.04 22:38:05.310 Ticks_test_2 (GOLD-3.20,M1)     OnBookEvent; Time: 205499742 ms

2020.02.04 22:38:07.706 Ticks_test_2 (GOLD-3.20,M1)     OnTick; Time: 205502129 ms
2020.02.04 22:38:07.706 Ticks_test_2 (GOLD-3.20,M1)     OnBookEvent; Time: 205502129 ms

2020.02.04 22:38:09.426 Ticks_test_2 (GOLD-3.20,M1)     OnTick; Time: 205503845 ms
2020.02.04 22:38:09.426 Ticks_test_2 (GOLD-3.20,M1)     OnBookEvent; Time: 205503845 ms

2020.02.04 22:38:10.035 Ticks_test_2 (GOLD-3.20,M1)     OnTick; Time: 205504453 ms
2020.02.04 22:38:10.035 Ticks_test_2 (GOLD-3.20,M1)     OnBookEvent; Time: 205504453 ms

2020.02.04 22:38:14.225 Ticks_test_2 (GOLD-3.20,M1)     OnTick; Time: 205508650 ms
2020.02.04 22:38:14.225 Ticks_test_2 (GOLD-3.20,M1)     OnBookEvent; Time: 205508650 ms

2020.02.04 22:38:14.252 Ticks_test_2 (GOLD-3.20,M1)     OnTick; Time: 205508681 ms
2020.02.04 22:38:14.252 Ticks_test_2 (GOLD-3.20,M1)     OnBookEvent; Time: 205508681 ms

2020.02.04 22:38:14.593 Ticks_test_2 (GOLD-3.20,M1)     OnTick; Time: 205509024 ms
2020.02.04 22:38:14.593 Ticks_test_2 (GOLD-3.20,M1)     OnBookEvent; Time: 205509024 ms

2020.02.04 22:38:15.105 Ticks_test_2 (GOLD-3.20,M1)     OnTick; Time: 205509523 ms
2020.02.04 22:38:15.105 Ticks_test_2 (GOLD-3.20,M1)     OnBookEvent; Time: 205509523 ms

2020.02.04 22:38:15.584 Ticks_test_2 (GOLD-3.20,M1)     OnTick; Time: 205510007 ms
2020.02.04 22:38:16.226 Ticks_test_2 (GOLD-3.20,M1)     OnBookEvent; Time: 205510647 ms

2020.02.04 22:38:16.232 Ticks_test_2 (GOLD-3.20,M1)     OnTick; Time: 205510662 ms
2020.02.04 22:38:16.232 Ticks_test_2 (GOLD-3.20,M1)     OnBookEvent; Time: 205510662 ms

2020.02.04 22:38:21.476 Ticks_test_2 (GOLD-3.20,M1)     OnTick; Time: 205515904 ms
2020.02.04 22:38:21.477 Ticks_test_2 (GOLD-3.20,M1)     OnBookEvent; Time: 205515904 ms

2020.02.04 22:38:22.403 Ticks_test_2 (GOLD-3.20,M1)     OnTick; Time: 205516824 ms
2020.02.04 22:38:22.404 Ticks_test_2 (GOLD-3.20,M1)     OnBookEvent; Time: 205516824 ms

2020.02.04 22:38:23.582 Ticks_test_2 (GOLD-3.20,M1)     OnTick; Time: 205518010 ms
2020.02.04 22:38:23.583 Ticks_test_2 (GOLD-3.20,M1)     OnBookEvent; Time: 205518010 ms

2020.02.04 22:38:24.707 Ticks_test_2 (GOLD-3.20,M1)     OnTick; Time: 205519133 ms
2020.02.04 22:38:24.708 Ticks_test_2 (GOLD-3.20,M1)     OnBookEvent; Time: 205519133 ms

2020.02.04 22:38:30.962 Ticks_test_2 (GOLD-3.20,M1)     OnTick; Time: 205525389 ms
2020.02.04 22:38:30.962 Ticks_test_2 (GOLD-3.20,M1)     OnBookEvent; Time: 205525389 ms

2020.02.04 22:38:31.188 Ticks_test_2 (GOLD-3.20,M1)     OnTick; Time: 205525607 ms
2020.02.04 22:38:31.189 Ticks_test_2 (GOLD-3.20,M1)     OnBookEvent; Time: 205525607 ms

2020.02.04 22:38:31.989 Ticks_test_2 (GOLD-3.20,M1)     OnTick; Time: 205526418 ms
2020.02.04 22:38:31.989 Ticks_test_2 (GOLD-3.20,M1)     OnBookEvent; Time: 205526418 ms

2020.02.04 22:38:32.048 Ticks_test_2 (GOLD-3.20,M1)     OnTick; Time: 205526481 ms
2020.02.04 22:38:32.048 Ticks_test_2 (GOLD-3.20,M1)     OnBookEvent; Time: 205526481 ms

2020.02.04 22:38:32.140 Ticks_test_2 (GOLD-3.20,M1)     OnTick; Time: 205526559 ms
2020.02.04 22:38:32.140 Ticks_test_2 (GOLD-3.20,M1)     OnBookEvent; Time: 205526559 ms

2020.02.04 22:38:32.153 Ticks_test_2 (GOLD-3.20,M1)     OnTick; Time: 205526574 ms
2020.02.04 22:38:32.153 Ticks_test_2 (GOLD-3.20,M1)     OnBookEvent; Time: 205526574 ms

2020.02.04 22:38:32.589 Ticks_test_2 (GOLD-3.20,M1)     OnTick; Time: 205527011 ms
2020.02.04 22:38:32.590 Ticks_test_2 (GOLD-3.20,M1)     OnBookEvent; Time: 205527011 ms

2020.02.04 22:38:39.930 Ticks_test_2 (GOLD-3.20,M1)     OnTick; Time: 205534359 ms
2020.02.04 22:38:39.931 Ticks_test_2 (GOLD-3.20,M1)     OnBookEvent; Time: 205534359 ms

2020.02.04 22:38:40.009 Ticks_test_2 (GOLD-3.20,M1)     OnTick; Time: 205534437 ms
2020.02.04 22:38:40.009 Ticks_test_2 (GOLD-3.20,M1)     OnBookEvent; Time: 205534437 ms
 
prostotrader:

Certo, e quanto a isso?

Um gráfico estava rodando OnBook e o outro OnTick


56 ms de diferença entre OnTick e OnBook

E a mesma diferença na impressão :)

Mais uma vez, não tenho exatamente certeza, pois estou com sono e as dúvidas são a maior parte dos experientes e sábios).

Mas eu acho que é apenas elementar que oSymbol() come o tempo ))))

tão verdadeiro teste - cheque - sou muito preguiçoso)

é ulong glob. perm.

void OnBookEvent(const string &symbol)
{
ul=GetTickCount();
  if((Symbol() != symbol) || (Mode != USE_BOOK)) return;
  Print(__FUNCTION__, "; Time: ", ul, " ms");
}
void OnTick()
{
ul=GetTickCount();
  if(Mode != USE_TICK) return;
  Print(__FUNCTION__, "; Time: ", ul, " ms");
}
//+------------------------------------------------------------------+
 
Aleksey Mavrin:

Mais uma vez, não tenho certeza, porque estou com sono e as dúvidas são a maior parte dos experientes e sábios).

Mas eu acho elementar que oSymbol() mastiga o tempo ))))

tão verdadeiro teste - cheque - sou muito preguiçoso)

é ulong glob. perm.

:), boa noite

 
Aleksey Mavrin:

Mais uma vez, não tenho certeza, porque estou com sono e as dúvidas são a maior parte dos experientes e sábios).

Mas eu acho elementar que oSymbol() mastiga o tempo ))))

tão verdadeiro teste - cheque - sou muito preguiçoso)

é ulong glob. perm.

string gSymbol;
int OnInit()
{
gSymbol = Symbol(); 
return 0;
}

void OnBookEvent(const string &symbol)
{
ul=GetTickCount();
  if((Symbol() != symbol) || (Mode != USE_BOOK)) return;
  Print(__FUNCTION__, "; Time: ", ul, " ms");
}
void OnTick()
{
ul=GetTickCount();
  if((Symbol() != gSymbol) || (Mode != USE_TICK)) return;  // можно попробовать привести оба обработчика к одинаковому коду
  Print(__FUNCTION__, "; Time: ", ul, " ms");
}
//+------------------------------------------------------------------+

Alternativamente, para eliminar as preocupações que a Symbol() come o tempo, deixe que ambos os manipuladores "se alimentem" igualmente.