Tiki en tiempo real - página 18

 
prostotrader:

Mientras se desarrolla el debate, hice otro experimento.

Es decir, durante la inicialización lo cronometro en un microsegundo,

y antes de cada impresión, vuelvo a perforar el tiempo.

Lo ideal sería que fuera así

Pero muy a menudo resulta así (exposiciones de registro):

Pero no encaja con 4 segundos...

oh, por fin se han dado cuenta de cómo cronometrarlo, ¡progreso!)

s.s. como confirmación de que el tiempo no se escribe exactamente en el disco te voy a dar una prueba sencilla, entre las operaciones en el Test se hacen algunos cálculos, tomando en promedio 7 microsegundos.

Al mismo tiempo vemos que con el mismo tiempo en microsegundos las impresiones salen en decenas + tales operaciones, y las impresiones salen cada microsegundo. Creo que todo tiene sentido.

ap: si pones la primera impresión justo antes de la segunda, entonces el delta ya es 0-1, por lo que la Impresión es la más larga de esta cadena.

   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, por fin han descubierto cómo cronometrarlo, ¡progreso!)

¿Qué le pasa, señor? ¿No tienes nada mejor que hacer?

Ahí es donde empezó todo.

 
prostotrader:

¿No es así, señor? ¿No tienes nada mejor que hacer?

Aquí es donde empezó todo.

Añadido por

Además, ¿no sabes queGetMicrosecondCount() tiene un error de hasta 16 ms? :)

La función que da microsegundos, tiene un error de hasta 16 milisegundos, es decir, el error es un orden de magnitud mayor que su nombre, bueno, bueno)) ¿también puedes confirmar con un pruf?

 
Aleksey Mavrin:

Una función que da microsegundos tiene un error de hasta 16 milisegundos, es decir, un error que es un orden de magnitud mayor que su nombre, bueno, bueno)) ¿también puedes confirmar con un pruff?

Se equivocó

 
prostotrader:

Equivocado

Bueno, felicidades por admitir el error de inmediato ;)

El lag de 4 segundos es muy probable que en algún momento el terminal se haya confundido, parece que ocurre cuando el antivirus empieza a escanear, etc. casos.

Y 4 segundos significa que la impresión es 4 segundos más tarde en la caché del registro, no que OnBook haya llegado 4 segundos más tarde (aunque creo que es posible dependiendo de cómo esté cargado el ordenador en ese momento)

s.w. como Print va a la cola primero y de ahí al registro.
 
Aleksey Mavrin:

Bueno, felicidades por admitir el error de inmediato ;)

Lo de los 4 segundos de retardo es muy probable que en algún momento el terminal se haya confundido, parece que ocurre cuando el antivirus empieza a escanear, etc. casos.

Y 4 segundos exactamente significa que la Impresión llegó 4 segundos después en la caché del registro, no que OnBook llegó 4 segundos después (aunque creo que es posible dependiendo de cómo se cargue el ordenador en ese momento)

s.w. como Print va a la cola primero y de ahí al registro.

Sí, es posible.

 
Aleksey Mavrin:

Y 4 segundos significa exactamente que Print llegó 4 segundos más tarde en la caché del registro, no que OnBook llegó 4 segundos más tarde (aunque supongo que es posible dependiendo de cómo esté cargado el ordenador en ese momento)

s.w. La impresión va primero a la cola y de ahí al registro.

Bueno, sí, ¿qué te parece?

Un gráfico estaba ejecutando OnBook y el otro 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 diferencia entre OnTick y OnBook

y la misma diferencia en la impresión :)

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:

Bien, ¿qué tal esto?

Un gráfico estaba ejecutando OnBook y el otro OnTick


56 ms de diferencia entre OnTick y OnBook

Y la misma diferencia en la impresión :)

De nuevo, no estoy exactamente seguro, ya que tengo sueño y las dudas son propias de los experimentados y sabios).

Pero creo que es elemental queSymbol() se coma el tiempo )))

tan verdadera prueba - comprobar - soy demasiado perezoso)

es 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:

De nuevo, no estoy seguro, porque tengo sueño y las dudas son propias de los experimentados y los sabios).

Pero creo que es elemental queSymbol() mastique el tiempo )))

tan verdadera prueba - comprobar - soy demasiado perezoso)

es ulong glob. perm.

:), buenas noches

 
Aleksey Mavrin:

De nuevo, no estoy seguro, porque tengo sueño y las dudas son propias de los experimentados y sabios).

Pero creo que es elemental queSymbol() mastique el tiempo )))

tan verdadera prueba - comprobar - soy demasiado perezoso)

es 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 la preocupación de que Symbol() consuma tiempo, deje que ambos manejadores se "alimenten" por igual.

Razón de la queja: