Características del lenguaje mql5, sutilezas y técnicas - página 89
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
Hasta ahora sólo veo una desventaja mencionada de GetTickCount - el hecho de que está limitado por la resolución del temporizador del sistema, eso es un problema serio. Y el resto no tiene ninguna utilidad práctica en particular.Lo que estás haciendo son pruebas ultracortas de 15 milisegundos, nadie hace eso. Esos resultados son inestables. Tienes que hacer que la prueba dure al menos medio segundo y entonces estarás listo para hablar de algo.
Nadie hace pruebas ultracortas de 15 milisegundos. Esos resultados son inestables. Se necesita al menos medio segundo para que la prueba dure, y luego se puede hablar de algo.
Te equivocas. Durante estos 15 milisegundos, la función GetTickCount( ) es llamada más de 6 000 000 veces.
Mi cálculo es correcto. El valor de GetTickCount() cambia cada 1/(2^6)=1/64 segundos (15625 microsegundos).
Desarrolladores, por favor confirmen.
No es así.La función GetTickCount() es llamada más de 6 000 000 vecesen esos 15 milisegundos.
Cuando medimos el rendimiento de un código en funcionamiento (no un caballo esférico en el vacío), se ejecuta durante un intervalo de tiempo suficiente (cientos de milisegundos y más). La razón es que el rendimiento del sistema y la carga de trabajo cambian constantemente. Un momento es uno, mientras que el siguiente es diferente. Así que los resultados variarán mucho de una prueba a otra en intervalos cortos. Por eso necesitamos un intervalo más largo, pero los microsegundos ya no importan.
Además, tenemos comillas en milisegundos y los pings también están en milisegundos, así que no veo dónde hay que poner microsegundos. De todas formas, no es la cuestión.
Ahora tengo que inventar una solución, cómo salir de esta situación para evitar los inconvenientes de ambas funciones. No hay mucha esperanza para los desarrolladores.
Ahora tenemos que averiguar cómo sortear las deficiencias de ambas funciones. No hay muchas esperanzas para los desarrolladores.
Creo que es posible con una fórmula como esta en primera aproximación:
Hasta ahora es sólo una idea en voz alta.
Algunos lugares donde utilizo microsegundos
Algunos lugares donde utilizo microsegundos
En segundo lugar, su error es el mismo que el de GetTickCount(), es decir, 15 milisegundos. Por eso el significado de los microsegundos no está muy claro. Supongamos que ha calculado un intervalo exacto al micro, pero en realidad llegará varios MILLONES de segundos después o antes.
En segundo lugar, su error es el mismo que el de GetTickCount(), es decir, 15 milisegundos, por lo que no está muy claro cuál es el sentido de los microsegundos aquí. Supongamos que se calcula el intervalo con microprecisión, pero en realidad llegará varios MILLONES de segundos después o antes.
También los comandos se ponen en cola y la ejecución puede ser en 5 segundos...
Ahora tenemos que averiguar cómo sortear las deficiencias de ambas funciones. No hay mucha esperanza para los desarrolladores.
Por desgracia.
sólo puedo ofrecerle esta variante de la función:
¿Por qué Alas?
Porque si se cambia la hora local o simplemente se cuelga el programa, se puede añadir un error de hasta 16 milisegundos a la funciónRealMicrosecondCount. No hay manera de evitarlo.
Pero no habrá consecuencias fatales cuando se cambie al horario de verano, al cambio de huso horario o a la actualización de la hora por Internet.
Por desgracia,
sólo puede ofrecer esta versión de la función:
¿Por qué Alas?
Porque en caso de cambio de hora local o simplemente de cuelgue del software, se puede añadir un error de hasta 16 milisegundos a la funciónRealMicrosecondCount. No hay manera de evitarlo.
Pero no habrá consecuencias fatales cuando se cambie al horario de verano, al cambio de huso horario o a la actualización de la hora por Internet.
No lo he comprobado todavía, pero no estoy tan seguro de lo de los 16 ms. Cuando busqué en Google el tema, normalmente el error del temporizador del sistema se da como 10 ms, o 10-16 ms.
Aquí hay una variante que utiliza un temporizador winapi de alta resolución, dando una precisión de3,8e-07 segundos.