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

 
Renat Fatkhullin:

Esto es lo que hace WinAPI.

No estoy de acuerdo.
WinAPI no reacciona a la corrección de la hora local, a diferencia de GetMicrosecondCount.


Archivos adjuntos:
 
Nikolai Semko:

No estoy de acuerdo.
WinAPI no reacciona a la corrección de la hora local, a diferencia de GetMicrosecondCount.

Esto se debe a que el tiempo mostrado aquí no es absoluto, sino un delta desde el inicio del programa:

La función GetMicrosecondCount() devuelve el número de microsegundos que han pasado desde el inicio del programa MQL5.

Dado que el valor del contador se fija al inicio de la aplicación, este delta se ve afectado por los cambios de fecha. Cambiar seriamente la fecha de tu ordenador cuando se está ejecutando un software que depende de la hora es un sabotaje y un acercamiento de hombres rusos con una motosierra japonesa. Por el bien de la anécdota, servirá.

La justificación de "bueno, el corrector de tiempo de fondo funciona" no funciona aquí - su corrección es de milisegundos por día y no tiene ningún efecto.

Eltemporizador de microsegundos es necesario para medir con precisión los periodos pequeños, no para contar desde el principio de los tiempos.

 
Nikolai Semko:

No estoy de acuerdo.
WinAPI no reacciona a la corrección de la hora local, a diferencia de GetMicrosecondCount.

¿y cómo ves la aplicación práctica de GetMicrosecondCount que estropea todo el trabajo del programa en la versión actual? describe la aplicación práctica

por ejemplo, no veo ninguna variante ni en c++ ni aquí, salvo las descritas por Renat, es decir, medir el tiempo de ejecución del código con precisión en mcs

es decir, no entiendo su persistencia, francamente

 
Renat Fatkhullin:

Como el valor del contador al inicio de la aplicación es fijo, este delta se ve afectado por el cambio de fecha. Para cambiar seriamente la fecha en un ordenador cuando se está ejecutando un software que depende de la hora hay que recurrir al sabotaje y al acercamiento de hombres rusos con una motosierra japonesa. Servirá como anécdota.

He mostrado a propósito la sincronización de la hora en Internet en el gif animado. Este tipo de sincronización es automática por defecto y se produce con bastante frecuencia y según lo previsto sin la participación de nadie.
Y no hay garantía de que en el momento de la medición pueda producirse esta sincronización.
No me preocupa porque ya conozco esta peculiaridad de GetMicrosecondCount() y que esta función es más lenta que GetTickCount.
Pero otros, que no leerán esta rama, sino que leerán la ayuda de esta función incluso con mucho cuidado, pueden tener problemas si utilizan GetMicrosecondCount() en la lógica del EA real, porque durante las pruebas todo estará bien, pero durante el comercio real en el momento de la sincronización de la hora prevista o el cambio a la hora de verano, puede ocurrir OY, especialmente si el tiempo disminuye y se produce un desbordamiento como ulong.
Y por cierto, esta información nueva para mí sin documentar, hizo ajustes significativos a la lógica de la clase multitimer, que se crea ahora y que organiza el funcionamiento de varios temporizadores simultáneamente. En el trabajo de esta clase, la función del microsegundo se utilizó con toda su fuerza. Pero ahora entiendo, que tendré que sacrificar la precisión de 15625 µs, también para aumentar su velocidad.
Faber es un pliz. No es malvado, sólo es prepotente, pero es bueno.
Mierda, yo también estoy a punto de ser baneado :((

 
Renat Fatkhullin:

Esto se debe a que el tiempo mostrado no es absoluto, sino un delta desde el inicio del programa:

Dado que el valor del contador al inicio de la aplicación es fijo, este delta se ve afectado por los cambios de fecha. Cambiar seriamente la fecha en el ordenador cuando se ejecuta un software que depende de la hora es un sabotaje y el acercamiento de hombres rusos con una motosierra japonesa. Por el bien de la anécdota, servirá.

La justificación "bueno, el corrector de tiempo de fondo funciona" no se aplica aquí - su corrección es de milisegundos por día y no tiene ningún efecto.

El temporizador de microsegundos es necesario para la medición precisa de pequeños períodos, no para contar desde el principio del tiempo.

Es decir, ¿tiene sentido reiniciar periódicamente el terminal?

 
Nikolai Semko:

En concreto, mostré la sincronización horaria a través de Internet en el gif animado. Esta sincronización es automática por defecto para todo el mundo y se produce de forma programada sin que nadie intervenga y con bastante frecuencia.

He escrito explícitamente y con claridad: la corrección diaria por milisegundos es automática.

Y sí, te quedarás igual de flipado con una función pura de WinAPI (ya sea GetTickCount o QueryPerformanceCounter) cuando metas una chorrada en la sierra cambiando la fecha aunque sea por segundos. No hay ninguna protección de la que se habla que supuestamente se tiene. Sacó de la nada tanto el problema como la supuesta solución.

Así que todo es correcto - esto es lo que es WinAPI y esta es la realidad.

 
Aleksey Vyazmikin:

Es decir, ¿tiene sentido reiniciar el terminal periódicamente?

No.
 
Renat Fatkhullin:
No.

Mi contador de tiempo de cierre de velas comienza a precipitarse 5 segundos en una semana, pensé que era algo relacionado con el software.

Ayuda a reiniciar y sincronizar la hora con el servicio en cuestión.

Cambié la batería de la madre no hace mucho tiempo.

 
Aleksey Vyazmikin:

Mi contador de tiempo de cierre de velas comienza a precipitarse 5 segundos en una semana, pensé que era algo relacionado con el software.

Ayuda a reiniciar y sincronizar la hora con el servicio en cuestión.

He cambiado la batería de mi madre no hace mucho tiempo.

Configure el servicio interno de Hora de Windows para que se sincronice cada noche (o más a menudo) con pool.ntp.org y la corrección diaria será en milisegundos.
 
Renat Fatkhullin:
Configure un servicio interno de Hora de Windows para que se sincronice diariamente por la noche (o más a menudo) con pool.ntp.org y la corrección diaria será en milisegundos.

Configurado, pero no ayuda - no entiendo la razón. Pero mi servidor es ntp2.stratum2.ru

Razón de la queja: