Tiki en tiempo real - página 21

 
Aleksey Mavrin:

Esa es la imagen del día. Por supuesto, no comprobamos si OnBook coincidía con Tick, sino que nos limitamos a tomar el siguiente, con la esperanza de que si OnTick se adelantaba a OnBook, el correspondiente fuera el mismo o ligeramente posterior.

Máximo, por supuesto, sin controles adicionales no es un indicador, o sobrepasar o realmente OnBook en algún lugar lento.


¿Pero es alguien que puede explicar? ¿Por qué se despliegan tantos OnTicks y no cabe un solo OnBook entre ellos?


Porque tú mismo escribiste"El código está torcido, tal vez esté torcido, miraré los resultados."

//+------------------------------------------------------------------+
//| BookEvent function                                               |
//+------------------------------------------------------------------+
void OnBookEvent(const string &symbol)
{ 
  if((Mode != USE_BOOK) || (symbol != Symbol())) return;
  TimeArrayBook[curBook]=GetMicrosecondCount();
  curBook++
 }
void OnTick()
{
  if(Mode != USE_TICK) return;
  TimeArrayTick[curTick]=GetMicrosecondCount();
  curTick++
}

Y no necesitas un temporizador para nada...

 
Pero me pregunto si el responsable está satisfecho con las respuestas a su pregunta.
 
prostotrader:

Porque tú mismo escribiste:"El código se ha puesto en marcha, tal vez esté torcido, miraré los resultados. "

Y no necesitas un temporizador para nada...

No ha encontrado que la razón sea por errores en el código. O no has entendido la pregunta. He puesto una marca en las funciones On, sin temporizador, pero sigue habiendo un montón de ticks entre los que no hay OnBooks.
 
Aleksey Mavrin:
No ha encontrado que la causa se deba a errores en el código. O no has entendido la pregunta. También acabo de imprimir una marca en las funciones On, sin temporizador, todavía hay una multitud de ticks entre los que no hay OnBooks.

1. No me queda nada claro cómo has ejecutado los EAs

2. Hay 2 códigos escritos por Andrei y por mí que

Secorroboran mutuamente. Entonces, ¿por qué molestarse con la suya?

3. Tanto Andrey como yo hemos ejecutado EAs en el mercado de derivados, y tú en el mercado de valores.

Tal vez el terminal tiene algunas fallas en el Fondo (Ni siquiera correr MT5 en el mercado de valores).

Personalmente, en el Fondo, opero a través de Quick

 
prostotrader:

1. No me queda nada claro cómo has ejecutado los EAs

2. Hay 2 códigos escritos por Andrei y por mí que

Se corroboran mutuamente. Entonces, ¿por qué molestarse con la suya?

3. Tanto Andrey como yo hemos ejecutado EAs en el mercado de derivados, y tú en el mercado de valores.

Tal vez el terminal tiene algunas fallas en el Fondo (Ni siquiera correr MT5 en el mercado de valores).

Personalmente, en el Fondo, comercio a través de Quick

Oh, ya veo. Lo probaré en los futuros mañana. ¿Por qué no usas mt5 en el fondo? ¿Hay alguna desventaja?
Z.s. El código ahí es de 3 líneas) sólo fija el tiempo de msk sin ninguna comprobación para que la cola no se ralentice de ninguna manera por el manejador, y en el temporizador imprime y cuenta el retraso. Yo tampoco he entendido bien tu código, el principio general de funcionamiento ya está claro por la salida.
 
Aleksey Mavrin:
1. Ah, ya veo. Mañana lo probaré en uno de los futuros. ¿Por qué no utiliza MT5 en el fondo? ¿Tiene alguna desventaja?
S.s. El código que hay es de 3 líneas) sólo fija el tiempo del msc sin ninguna comprobación para que la cola no se vea ralentizada de ninguna manera por el manejador, y en el temporizador lo imprime y cuenta el retraso. Yo tampoco he entendido bien tu código, el principio general de funcionamiento ya está claro por la salida.

1. El segundo y los siguientes terminales del broker son de pago, y no tengo estrategias en las que opere sólo con acciones(carteras de acciones).

2. Si va a emitir elGetMicrosecondCount() acumulado, entonces

hazlo sin temporizador en OnDeinit(), cuando el EA salga, todo se imprimirá.

void OnDeinit(const int reason)
{
  if(Mode == USE_BOOK)
  {
    if(is_book == true) MarketBookRelease(Symbol());
  } 
  if(reason == REASON_REMOVE)
  {
   //Распечатываем данные
  } 
}
 
prostotrader:

2. Si va a emitir elGetMicrosecondCount() acumulado, entonces

hágalo sin temporizador en OnDeinit(), cuando EA salga, todo se imprimirá.

También puedes hacerlo así, yo al principio lo hice así para tenerlo controlado. Pero debido al temporizador, los OnTicks pueden saltarse, pero los OnBooks no deberían hacerlo, ya que están garantizados. Tal vez no tomé en cuenta algo, tal vez no todos los Ticks inician un cambio de la copa, es decir, OnBook?
 
Aleksey Mavrin:
Sí, también puedes hacerlo así, yo lo hice originalmente así para que quedara más claro. Pero debido al temporizador, los OnTicks pueden saltarse, pero los OnBooks no deberían, están garantizados. Tal vez no tomé en cuenta algo, tal vez no todos los Ticks inician un cambio del vaso, es decir, OnBook?

También.

Tienes que comprobar los contadores:

void OnBookEvent(const string &symbol)
{ 
  if(curBook >= 65534) return;
  if((Mode != USE_BOOK) || (symbol != Symbol())) return;
  TimeArrayBook[curBook]=GetMicrosecondCount();
  curBook++
 }
void OnTick()
{
  if(curTick >= 65534) return;
  if(Mode != USE_TICK) return;
  TimeArrayTick[curTick]=GetMicrosecondCount();
  curTick++
}

A, al declarar las matrices, haz lo siguiente

ulong TimeArrayBook[
INT_MAX];

а инициализировать так
ArrayInitialize(TimeArrayBook, 0);

	          
 
prostotrader:

También.

Tenemos que hacer una contra-verificación:

A, en la inicialización el número debería ser65535 y no65536

No, no es necesario. Se hace así deliberadamente para no comprobar nada. Son Ushort. El tamaño de la matriz es excesivo, pero no afecta a nada.
 
Aleksey Mavrin:

¿Quién puede explicar esto? ¿Por qué se dan de baja tantos OnTicks y ni un solo OnBook entre ellos?

Mira la hora del registro. Todo esto ocurrió en un ms, y al lado (en el mismo ms) un montón de OnBooks.

Puedes contar todos los eventos mediante contadores, pero incluso visualmente puedes ver que hay más OnBooks.