Servicios , nueva funcionalidad en la arquitectura de MT5, el funeral de MT4 está a la vuelta de la esquina. - página 8
![MQL5 - Lenguaje de estrategias comerciales para el terminal de cliente MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
Está perdiendo oportunidades comerciales:
- Aplicaciones de trading gratuitas
- 8 000+ señales para copiar
- Noticias económicas para analizar los mercados financieros
Registro
Entrada
Usted acepta la política del sitio web y las condiciones de uso
Si no tiene cuenta de usuario, regístrese
de Eng.
datos
alimentar
datafeed -- fuente de datos (aunque la palabra "fuente" no es del todo correcta)
alimentador -- alimentador, alimentador, alimentador
О датафидах. Сколько встречал этот термин, сложилось ощущение, что этим словом обозначают источник данных (котировок). Буквально "заполнитель данных". Когда речь идет о собственных инструментах, понимаю так, что мы сможем вычислять котировки, например, никем не котируемого MXNRUB по известным курсам MXNUSD и USDRUB, выгруженным из терминала в .csv формат, и легализовать для терминала новые котировки, указав файл .csv как новый датафид. Возможно, будет реализовано и более изящное решение, без выгрузки в файлы, путем онлайновых операций */ над тиками (MXNRUB = MXNUSD * USDRUB). И это будет новый датафид.
¿No queda ningún enlace a una discusión, informe de errores o algo parecido? ¿O sólo la sensación de que había uno, pero no lo ha comprobado ahora?
Por lo que recuerdo, los ticks recogidos en OnCalculate coincidían con los solicitados a través de CopyTix.
Ahora lo he comprobado a propósito... como sospechaba, me ha salido una mierda, pero no la que esperaba :)
OnBookEvent() captura los ticks con la bandera 0...
Y esto es lo que esperaba ver:
Como puede ver, al solicitar el último tick en cada llamada a OnCalculate() con SymbolInfoTick() - hay un salto en algunos de los ticks que devuelve CopyTicks().Código a comprobar:
Código para probar:
Yo dejaría sólo la escritura de ticks al archivo cuando se llama a OnCalculate, para estar seguro (no para probar OnBookEvent y CopyTicks, sinoOnCalculate, como se pretende).
Y luego por script habría generado el mismo archivo, obteniendo los ticks a través de CopyTicks. La diferencia sería más obvia, e indicaría que se han perdido ticks en OnCalculate o que el funcionamiento de CopyTicks es incorrecto.
Para estar seguro (no para probar OnBookEvent y CopyTicks, sino OnCalculate, como se pretende), yo dejaría sólo los ticks escribiendo en el archivo cuando se llama a OnCalculate.
Y luego por script habría generado el mismo archivo, obteniendo los ticks a través de CopyTicks. La diferencia sería más clara, e indicaría la omisión de ticks en OnCalculate o el trabajo incorrecto de CopyTicks.
Con un cálculo tan sencillo no veo el sentido de molestarse. Hay una comparación específica de dos llamadas: SymbolInfoTick() y CopyTicks(). Y todas las llamadas de SymbolInfoTick() se muestran claramente. Y se puede ver claramente que CopyTicks() devolvió el tick, que no fue recibido en la llamada SymbolInfoTick() de OnCalculate(). Y aquí puede haber dos razones para el error: 1. O bien OnCalculate() se salta un tic, o bien 2. SymbolInfoTick() devuelve algo erróneo en alguna parte.
Sí, esto es parte del registro, que ha estado construyendo como 30 segundos... así que imagina el número de garrapatas que faltan.
Nuestro diálogo con el servicio de atención al cliente:
Mira para no perderte:https://www.mql5.com/ru/forum/190129/page8#comment_5081300 y los 2 siguientes puestos.
CopyTicks del indicador da un tick que el indicador no obtiene en OnCalculate (ni antes ni después).
OnCalculate es llamado en cada tick.
Las garrapatas se añaden a la base de datos en un hilo separado. Es decir, de forma asíncrona. No es un hecho que con CopyTicks obtendrá el mismo tick que llamó OnCalculate.
No se trata de eso.
Con CopyTicks es posible obtener un tick, que no estaba en OnCalculate (nos enteramos en OnCalculate en un tick, cuyo tiempo es más largo que el perdido).
Echa un vistazo a los registros.
Esto es exactamente de lo que estamos hablando.
Llegó un lote de garrapatas. Dos hilos comienzan a procesar este paquete - un hilo en el bucle ejecuta OnCalculate en cada tic del paquete; otro hilo pone todo el paquete en una base de datos de tic. Estos dos hilos no están sincronizados entre sí de ninguna manera y se desconoce qué hilo procesará un paquete de ticks más rápido
Pero cada tick del paquete debe ser procesado por OnCalculate. Y esto no está ocurriendo.
No hay ninguna garrapata con ese tiempo. Hay un tic con menos tiempo, y un tic con más tiempo. Y no hay ninguna llamada OnCalculate en medio.
komposter
Pero cada tic en el paquete tiene que ser manejado por OnCalculate. Y esto no está ocurriendo.
No hay ninguna garrapata con ese tiempo. Hay un tic con menos tiempo, y un tic con más tiempo. Y no hay ninguna llamada de OnCalculate entre ellos.
Cada tilde del paquete se procesa en OnCalculate. Allí no hay saltos. El bucle se escribe así.
Para saber qué tick se procesa en OnCalculate, utiliceSymbolInfoTick- aquí todo está claro. El tick se aplica a la información del símbolo y luego se llaman todos los indicadores de este símbolo, todo en un hilo
Por favor, eche un vistazo al registro en el enlace.
SymbolInfoTick de OnCalculate no ve el tick, que se puede obtener de CopyTicks.
Por eso escribí
Tenemos que hacer exactamente lo que sugieres enhttps://www.mql5.com/ru/forum/190129/page8#comment_5082755
Yo, para estar seguro (para probar OnCalculate en lugar de OnBookEvent y CopyTicks, como se pretende), dejaría sólo la escritura de ticks al archivo cuando se llama a OnCalculate.
Y luego por script habría generado el mismo archivo, obteniendo los ticks a través de CopyTicks. La diferencia sería mucho más clara, e indicaría la omisión de ticks en OnCalculate o el trabajo incorrecto de CopyTicks.
Y exactamente de esta manera en un momento comprobamos la corrección de CopyTicks. Quedan los scripts de prueba y los indicadores, lo comprobaremos de nuevo.
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, el SymbolInfoTick en OnTick no devuelve el tick que inició la llamada de OnTick, sino que hace una petición completa del estado actual.
Foro sobre comercio, sistemas de comercio automatizados y pruebas de estrategias
Características del lenguaje mql5, sutilezas y trucos
fxsaber, 2017.03.29 22:32
El evento de cálculo se genera en CADA tick. Así que hay una cola de ticks para los indicadores. Si llega a un número determinado, aparece un aviso en el registro de que el indicador es demasiado lento.
Las barras en sí mismas son indicadores por naturaleza y son generadas por Calculate-events. Por lo tanto, si TF M1 y es 10:15:00.020 y viene un paquete de 50ms, 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 esta disposición, la barra de las 10:15 aún no se ha formado como la barra de 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 descrito con detalle.
Foro sobre comercio, sistemas de comercio automatizados y pruebas de estrategias
Características del lenguaje mql5, sutilezas y trucos
fxsaber, 2017.03.29 22:41
En consecuencia, es bastante normal que un EA obtenga un tick de una barra que aún no se ha formado. Pero este es un punto tan sutil que requiere un esfuerzo incluso para reproducirlo a propósito. 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.
Nuestro diálogo con el Service Desk:
El Service Desk está, por desgracia, en su repertorio. No es necesario que lancen un enlace cuando se trata de una discusión. Pero para dar un ejemplo concreto, en sus dedos. No se trata de eso. A saber, dicen, que SymbolInfoTick() devuelve el tick actual a comprobar, y como OnCalculate() maneja cada tick - resulta que, esa salida debería ser de cada tick. Y CopyTicks() nos dice lo contrario. Bueno... Y dicen que no hay que mirar CopyTicks() :). Sobre dos hilos me explicaron también, cuando estaban arreglando CopyTicks() a finales de año. Sólo que no es el tema aquí (aunque, tal vez en él también, no lo sé).
¿No les preguntó sobre los ticks con bandera 0 cuando se reciben de OnBookEvent()?