Características del lenguaje mql5, sutilezas y técnicas - página 27

 

Foro sobre trading, sistemas de trading automatizados y pruebas de estrategias de trading

Bichos, errores, preguntas

fxsaber, 2017.02.07 13:41

SymbolInfoTick en los indicadores funciona de manera muy diferente que en los EAs.

En un indicador siempre devuelve el tick que fue el iniciador de la llamada OnCalculate. Y estos ticks de iniciación en el indicador no deben ser omitidos - esta es la ideología de los desarrolladores. El problema está en la formación de la cola de estas garrapatas.

En el Asesor Experto, SymbolInfoTick en OnTick no devuelve el tick que inició la llamada de OnTick, sino que hace una petición completa del estado actual.

 
fxsaber:

En otras palabras:

El indicador mostrará el primer tick de todo el paquete cuando llegue un lote de ticks, mientras que el EA mostrará el último tick.

¿Estoy leyendo bien?

 
Artyom Trishkin:

En otras palabras:

El indicador mostrará el primer tick de todo el paquete cuando llegue un paquete de ticks, y el EA mostrará el último tick.

¿Lo he entendido bien?

Sí, OnCalculate no será llamado en cada tic del paquete en el orden de la cola.
 
fxsaber:
Sí. OnCalculate no será llamado en cada tic del paquete en el orden de la cola.

¿En cada garrapata? Porque tú NO escribiste...

Resulta que con la llegada de un paquete de ticks, el indicador comenzará en el orden de los ticks del paquete entrante?

Me pregunto, si el paquete se recibió en la apertura de una nueva barra, ¿cuántas veces durante este paquete de ticks realizará el indicador el recálculo completo?

 
Artyom Trishkin:

¿En cada garrapata? Porque NO has escrito...

Probablemente no escribió muchas cosas.

Resulta que con la llegada de un paquete de garrapatas, el indicador se iniciará en el orden de las garrapatas del paquete entrante?

Me pregunto, si el paquete ha llegado a la apertura de una nueva barra - ¿cuántas veces durante este paquete de ticks hará el indicador un recálculo completo?

El evento de cálculo se genera en CADA tick. Por lo tanto, hay una cola de ticks para los indicadores. Si alcanza una cantidad determinada, el diario recibirá una advertencia de que el indicador es demasiado lento.

Las barras en sí mismas son indicadores por naturaleza y están formadas por eventos de cálculo. Por lo tanto, si el TF M1 y es 10:15:00.020 y un paquete de 50 ms viene, entonces la primera garrapata en él todavía tiene tiempo 10:14:59.970. Y todos los indicadores son llamados primero en este evento Calculate - primero el indicador de series de tiempo y luego los indicadores personalizados con estas series de tiempo. Es decir, en este trazado la barra de las 10:15 aún no está formada como la barra cero. Y la barra de cero es de 10:14.


Entonces, cuando el paquete comience a desenrollarse a través de los eventos de Cálculo, también aparecerá la barra de las 10:15. Creo que lo he explicado con detalle.

 
fxsaber:

Probablemente hay muchas cosas que no he escrito.

El evento Calcular se genera en CADA tick. Por lo tanto, hay una cola de ticks para los indicadores. Si llega a una determinada cantidad, hay una advertencia en el registro de que el indicador es demasiado lento.

Las barras en sí mismas son indicadores por naturaleza y están formadas por eventos de Cálculo. Por lo tanto, si el TF M1 y son las 10:15:00.020 y viene un paquete de 50 ms, entonces el primer tick en él todavía tiene el tiempo 10:14:59.970. Y todos los indicadores son llamados primero en este evento Calculate - primero el indicador de series de tiempo y luego los indicadores personalizados con estas series de tiempo. Es decir, en este trazado la barra de las 10:15 aún no está formada como la barra cero. Y la barra de cero es de 10:14.


Entonces, cuando el paquete empiece a desenrollarse a través de los eventos de Cálculo, también aparecerá la barra de las 10:15. Creo que lo he explicado con detalle.

Gracias.
 

En consecuencia, es bastante normal que el EA reciba un tick de una barra que aún no se ha formado. Pero se trata de un punto tan sutil que incluso reproducirlo a propósito supondría un gran esfuerzo. En general, es más teórico que práctico.


Si somos paranoicos con la velocidad, el uso de indicadores (y barras, por supuesto) no es una opción. Todo está en el EA.

 

fxsaber:

Entonces, cuando el paquete empiece a desenrollarse a través de los eventos de Cálculo, también aparecerá la barra de las 10:15. Creo que lo he explicado con detalle.

Información interesante.
¿Hay alguna forma de determinar que ha llegado un paquete, ignorar los primeros ticks del mismo y tomar sólo el último tick para procesarlo?
 
Vasiliy Pushkaryov:
¿Hay alguna forma de detectar que ha entrado un paquete, ignorar los primeros ticks del mismo y tomar sólo el último para procesarlo?
En OnCalculate a través de CopyTicks.
 
fxsaber:
En OnCalculate a través de CopyTicks.
Gracias, lo tendré en cuenta.