Escribí un pequeño Asesor Experto que muestra la máxima diferencia entre la hora del ordenador local y la hora del nuevo tick time_msc (recién recibido).
A grandes rasgos, mide TimeLocal() sólo en milisegundos menos el tiempo del último tick Tick.teme_msc . El tick se recibe mediante SymbolInfoTick.
No se burló mucho de ello. 24 caracteres en la visión general del mercado. OnTimer() con periodo de llamada de 1 milisegundo. Estoy sondeando todos los símbolos con SymbolInfoTick. Si una garrapata es nueva, hago mediciones.
He probado el Asesor Experto en la noche. Aquí están los resultados:
Nuevas garrapatas capturadas 46800
Tiempo mínimo entre la hora del ordenador local y la hora del tick -7048 milisegundos (con signo negativo)
Tiempo medio entre la hora del ordenador local y la hora del tick -6819 milisegundos ( con menos )
Tiempo máximo entre la hora del ordenador local y la hora de la garrapata -97082 milisegundos ( con más )
¿Cómo se puede hacer frente a esto?
He echado un vistazo a tu código...
No lo estás haciendo bien en absoluto.
Debe añadir los instrumentos más líquidos a Market Watch.
Después, añade sus botes de dinero.
Y, cuando OnBookEvent() se dispara, copia 1 tick (el último) habrá tiempo e inmediatamente toma la hora local y compara.
¿Y por qué hay que comparar la hora local con la hora de los ticks?
Si necesitas saber si es posible operar, aquí tienes una función
//+------------------------------------------------------------------+ //| Expert Check Market Time function | //+------------------------------------------------------------------+ bool CheckMarketTime() { MqlDateTime cur_time, sv_time; cur_time.year = 0; TimeTradeServer(cur_time); //Возвращает расчетное текущее время торгового сервера. if(cur_time.year > 0) { sv_time.year = 0; TimeCurrent(sv_time); //Возвращает последнее известное время сервера if(sv_time.year > 0) { // if((cur_time.day_of_week == int(FirstDay)) || // (cur_time.day_of_week == int(SecondDay))) return(false); //Проверка на выходные if(cur_time.day_of_week == sv_time.day_of_week) { ulong tr_time = sv_time.hour * 3600 + sv_time.min * 60 + sv_time.sec; if(((tr_time >= time_st_mon) && (tr_time < 50370)) || //10:00:01 - 13:59:30 ((tr_time >= time_st_day) && (tr_time < 67470)) || //14:05:01 - 19:44:30 ((tr_time >= time_st_evn) && (tr_time < 85770))) //19:05:01 - 23:49:30 { return(true); } } } } return(false); }
En cuanto al tema de la relevancia de las garrapatas, consulte este indicador con comentarios.
- www.mql5.com
He mirado su código...
No lo estás haciendo bien del todo.
Debe añadir los instrumentos más líquidos a Market Watch.
A continuación, añada las profundidades de mercado de estos instrumentos.
Y, cuando OnBookEvent() se dispara, copia 1 tick (el último) habrá tiempo e inmediatamente toma la hora local y la compara.
Y en general, ¿por qué hay que comparar la hora local con la hora de los ticks?
¿Por qué hay que hacerlo todo, a través de una pila? ¿Sólo para que el código se vea mejor? Si tengo un símbolo en la visión general del mercado, ¿no significa que hay una sincronización constante y puedo acceder a los últimos 4096 ticks del símbolo directamente desde la caché ( es decir, al instante ) ? En cualquier caso, hay que probar su idea. Lo único que no entiendo, ¿qué significa "copiar 1 tick (último)" para calcular el tick cambiando la copa?
Y, en general, ¿por qué hay que comparar la hora local con la hora del reloj?
Tomar decisiones de trading basadas en los precios de ayer no es una buena idea. Comprar SBER a 100 ayer podría ser una buena idea desde el punto de vista del algoritmo, pero hoy hay que venderlo a 80.
¿Por qué hacer todo, a través de un cristal? ¿Sólo para que el código se vea mejor? Si tengo un símbolo en la visión general del mercado, ¿no significa que hay una sincronización constante y que puedo acceder a los últimos 4096 ticks del símbolo directamente desde la caché ( es decir, al instante ) ? En cualquier caso, hay que probar su idea. Lo único que no entiendo, ¿qué significa "copiar 1 tick (último)" para calcular el tick cambiando la copa?
Y, en general, ¿por qué hay que comparar la hora local con la hora del reloj?
Tomar decisiones de trading basadas en los precios de ayer no es una buena idea. Ayer el SBER a 100 puede ser una buena idea desde el punto de vista del algoritmo, pero hoy deberías venderlo a 80.
¿Por qué haces una pregunta si tú mismo lo sabes todo?
Haz lo que creas conveniente.
¿Por qué haces la pregunta si tú mismo lo sabes todo?
Haz lo que creas conveniente.
Lo pregunto con toda seriedad. Al programar en MQL, me di cuenta de que no hay que fiarse ni de la ayuda ni de la información que proporciona el terminal. No es más que una información para la reflexión. Es posible que el tick dé información antes (más estable) queSymbolInfoTick.
Por cierto, aquí está la garrapata que llegó con un retraso de un minuto y medio:
Nueva MA Diferencia máxima 97082 SBPR-3.19 Hora local 2019.03.15 21:05:31.842 Hora de paso 2019.03.15 21:03:54.760
No había nada criminal en la historia de las garrapatas en este minuto. Dos ticks en un minuto.
Lo pregunto con toda seriedad. Cuando programaba en MQL, me di cuenta de que no hay que fiarse ni de la ayuda ni de la información que proporciona el terminal. No es más que una información. Es posible que el tick dé información antes (más estable) queSymbolInfoTick.
Por cierto, aquí está la garrapata que llegó con un retraso de un minuto y medio:
Nueva MA Diferencia máxima 97082 SBPR-3.19 Hora local 2019.03.15 21:05:31.842 Hora de paso 2019.03.15 21:03:54.760
No había nada criminal en la historia de las garrapatas en este minuto. Dos ticks en un minuto.
¡Usted, está perdiendo completamente el punto!
No te preocupes por tu hora local en absoluto.
¡Sólo es importante la hora del servidor de TRADING!
Hay sesiones de negociación, durante este tiempo se puede negociar.
La hora de negociación no está determinada por su hora local,
y la hora del servidor de comercio.
No entiendes nada de lo que está pasando.
No te importa en absoluto tu hora local.
¡Sólo importa la hora del servidor de TRADING!
Hay sesiones de negociación, durante este tiempo se puede negociar.
La hora de negociación no está determinada por su hora local,
y la hora del servidor de comercio.
Debo haber explicado mal el punto.fxsaber, me entendió porque entiende la importancia de obtener nuevos ticks sin retrasos y dio un enlace a su indicador, que hace lo mismo que mi código, pero en forma gráfica. No tiene ninguna relación con el tiempo de cambio.
Intentaré explicarlo con mis dedos.
A las 16:39.59.999 hora local el Asesor Experto recibe el primer tick, para cada símbolo de la visión general del mercado y lo almacena.
A las 16:40.00.000, el Asesor Experto vuelve a sondear el último tick de cada símbolo. Para algunos de ellos tenemos nuevas garrapatas.
La mayoría de los nuevos ticks vienen con un tiempo ( time_msc ) de aproximadamente 16:39.59.000. Pero uno llegó con un tiempo de 16:38.30.335.
Resulta que no había ningún tick a las 16:39.59.999 (local), pero apareció de repente un milisegundo después e incluso fue a las 16:38:30, aunque normalmente sólo se diferencia por un segundo.
Después de tales garrapatas no se produce una buena idea. Supongamos que solicitamos el último tick del símbolo sin liquidez en la operación real. Obtenemos la hora del tick (time_msc)
que difiere de la local en dos minutos. Inmediatamente se da la suposición de que alguien ya sabe de un tick que ocurrió hace 90, 60 o 30 segundos, y nuestro EA no lo sabe, y puede ser castigado por un golpe a una orden de límite, por ejemplo.
Este problema debe ser resuelto.
Elfxsaber me entendió, porque entiende la importancia de obtener nuevos ticks sin retrasos y dio un enlace a su indicador, que hace algo similar a mi código, pero en forma gráfica. No tiene ninguna relación con el tiempo de cambio.
Intentaré explicarlo con mis dedos.
A las 16:39.59.999 hora local el Asesor Experto recibe el primer tick, para cada símbolo de la visión general del mercado y lo almacena.
A las 16:40.00.000, el Asesor Experto vuelve a sondear el último tick de cada símbolo. Para algunos de ellos tenemos nuevas garrapatas.
La mayoría de los nuevos ticks tienen un tiempo ( time_msc ) de aproximadamente 16:39.59.000. Pero uno llegó con un tiempo de 16:38.30.335.
Resulta que no había ningún tic a las 16:39.59.999 (local), pero apareció de repente un milisegundo después e incluso fue a las 16:38:30, aunque normalmente se diferencia sólo por un segundo.
Después de tales garrapatas no se produce una buena idea. Supongamos que solicitamos el último tick del símbolo sin liquidez en la operación real. Obtenemos la hora del tick (time_msc)
que difiere de la local en dos minutos. Inmediatamente se da la suposición de que alguien ya sabe de un tick que ocurrió hace 90, 60 o 30 segundos, y nuestro EA no lo sabe, y puede ser castigado por un golpe a una orden de límite, por ejemplo.
Este problema debe ser resuelto.
No hay que "luchar" contra nada. Hay que entender cómo se reciben los ticks en el terminal y correctamente
¡procesarlas correctamente!
- www.mql5.com
No hay que "luchar" contra nada, sino entender cómo llegan las garrapatas al terminal y manejarlas correctamente.
Manéjelos adecuadamente.
¿Puede finalmente compartir este conocimiento? Incluso si a través de su método, se puede obtener un nuevo evento de la garrapata antes, resulta que usted me da un pez y no una caña de pescar, es decir, no explican por qué este es el caso.
¿De dónde sacas la seguridad de que tu método es más rápido que el mío? ¿Me he perdido algo en la documentación? ¿Quizás has determinado experimentalmente que el terminal da nuevos ticks con mayor facilidad al abonarse a un vaso?
Voy a implementar el cambio en este EA de mi forma de captar nuevos ticks a la tuya.
¿Puede finalmente compartir este conocimiento? Incluso si a través de su método, se puede obtener un nuevo evento de garrapatas antes, resulta que me está dando un pez y no una caña de pescar, es decir, usted no explica por qué este es el caso.
¿De dónde sacas la seguridad de que tu método es más rápido que el mío? ¿Me he perdido algo en la documentación? ¿Quizás has determinado experimentalmente que el terminal da nuevos ticks con mayor facilidad al abonarse a un vaso?
Voy a implementar el cambio en este EA de mi forma de captar nuevos ticks a la tuya.
Ahí está el código fuente con comentarios.
¿Te da pereza revisarlo? ¿O hay algo que no está claro?
- Aplicaciones de trading gratuitas
- 8 000+ señales para copiar
- Noticias económicas para analizar los mercados financieros
Usted acepta la política del sitio web y las condiciones de uso
Escribí un pequeño Asesor Experto que muestra la máxima diferencia entre la hora del ordenador local y la hora del nuevo tick time_msc (recién recibido).
A grandes rasgos, mide TimeLocal() sólo en milisegundos menos el tiempo del último tick Tick.teme_msc . El tick se recibe mediante SymbolInfoTick.
No se burló mucho de ello. 24 caracteres en la visión general del mercado. OnTimer() con periodo de llamada de 1 milisegundo. Estoy sondeando todos los símbolos con SymbolInfoTick. Si una garrapata es nueva, hago mediciones.
He probado el Asesor Experto en la noche. Aquí están los resultados:
Nuevas garrapatas capturadas 46800
Tiempo mínimo entre la hora del ordenador local y la hora del tick -7048 milisegundos (con signo negativo)
Tiempo medio entre la hora del ordenador local y la hora del tick -6819 milisegundos (con menos)
Tiempo máximo entre la hora del ordenador local y la hora de la garrapata -97082 milisegundos ( con más )
¿Cómo se puede hacer frente a esto?