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

 
Slava:

¿Seguro que has leído toda la pregunta?

...entre dos llamadas a GetMicrosecondsCount...

Bueno, eso es lo que estoy diciendo. La primera llamada se produce antes de la sincronización y la segunda después de la sincronización. La diferencia será la misma: el número real de microsegundos + la corrección de la sincronización.

 
Alexey Navoykov:

La primera llamada es antes de la sincronización y la segunda llamada es después de la sincronización. La diferencia es el número real de microsegundos + la corrección de la sincronización.

Ahora dime la probabilidad de corrección de tiempo entre dos llamadas a GetMicrofsecondsCount?

Si realmente estás midiendo microsegundos, la probabilidad es cercana a 0.

¿Y mide los microsegundos en intervalos de segundos o más? ¿Por qué? ¿Sherocon en el vacío?

 
Alexey Navoykov:

Te equivocas, he citado específicamente el código aquí usando WinApi. Ejecútalo, cambia el reloj en el proceso y mira el resultado.

No está muy claro cómo llevar a cabo cualquier diálogo contigo, si tus argumentos se basan en conjeturas. Y ni siquiera consideras necesario familiarizarte con el curso de la discusión del tema.

Eres tú el que no tiene ni idea del problema que has planteado.

Como he dicho, un cambio de tiempo inesperado matará tu código, que se basa en un control preciso del tiempo, independientemente de las funciones que utilices.
 
Slava:

Ahora dime la probabilidad de corrección de tiempo entre dos llamadas a GetMicrofsecondsCount?

Si realmente estás midiendo microsegundos, entonces la probabilidad es casi 0.

¿Y se miden los microsegundos en segundos o más? ¿Por qué? ¿Sherocon en el vacío?

Ya te dije que esta probabilidad depende del periodo de sincronización. Cuanto más corto sea, más a menudo obtendremos un desplazamiento, es decir, mayor será la probabilidad. Y también de la distancia entre mediciones vecinas. Cuanto más largo sea, más a menudo daremos con el desplazamiento. Así que la probabilidad se calcula en base a estos dos parámetros, y no sólo con un dedo en el cielo.

¿Y por qué dices que todo lo que esté por debajo de los 16 mseg. sólo se puede medir con esta función? E incluso 16-30 milisegundos deben ser medidos con esta función, de lo contrario el error será demasiado grande.

Si te parece que son nimiedades y que se pueden ignorar, entonces es puramente tu opinión personal. Antes hemos hablado aquí de la función estándar del sistema QueryPerformanceCounter, que funciona correctamente, sin desplazamientos. Por algo se habrá inventado y, por cierto, Renat la declaró aquí por alguna razón:

Así es como contamos los microsegundos.

Pero en realidad no lo es. Se trata del QueryPerformanceCounter.

 
Renat Fatkhullin:
Eres tú el que no tiene ni idea del problema que has planteado.

Como ya he dicho, un cambio de hora inesperado acabará con el código vinculado al control de la hora exacta, independientemente de las funciones utilizadas.

No hay cambio de tiempo en QueryPerformanceCounter. ¿Qué quieres decir? ¿Has ejecutado el código que te he dado el enlace?

 

Después de comprobar la máquina de ejecución de código MQL5, resultó que teníamos un esquema de medición híbrido en GetMicrosecondCount:

  • para Windows 8 y superiores, se utilizó la función GetSystemTimePreciseAsFileTime, ligeramente más rápida, según la hora del sistema
  • para otros casos, QueryPerformanceFrequency + QueryPerformanceCounter
  • en ambos casos, GetMicrosecondCount realizó su función de obtener microsegundos desde el inicio del programa

Este código apareció debido a un intento de reducir la sobrecarga del sistema en la llamada de medición del tiempo. Uno de los desarrolladores se excedió.

Nosotros, personalmente, y Slava estábamos seguros de que un QueryPerformanceCounter puro funcionaba. Y había un código de este tipo. Pero nos equivocamos por la presencia de un modelo híbrido.

Ahora funcionará puramente QueryPerformanceFrequency + QueryPerformanceCounter.

En resumen: sí, hemos metido la pata tanto en la implementación de la función GetMicrosecondCount como en la protección de su comportamiento.

¡Slava y yo nos disculpamos por ello!
 
Los comentarios que no son relevantes para este tema se han movido a "Bugs, errores, problemas".
 
Renat Fatkhullin:

Un recordatorio sobre el uso de las frases "debería" de forma explícita o implícita. El uso de "las metacitas deberían" en lugar de "por favor, considere" es ahora inaceptable.

Por favor, considere la suposición de que, la mayoría de las veces, la lectura entre líneas no tiene nada que ver con lo que escribe el interlocutor.

Los informes de errores reales con asistencia en el foro y abalanzarse sobre los MQ son cosas incompatibles. Es difícil imaginar a una persona que se convierte constantemente en un odiador y vuelve a serlo.

 
La propia MT5 mide intervalos de tiempo largos a través deGetMicrosecondCount
IS      0       13:32:55.239    Trades  '11391209': accepted exchange buy 1.00 AFKS at market
DM      0       13:33:07.896    Trades  '11391209': deal #265475900 buy 1.00 AFKS at 9.095 done (based on order #284425784)
OD      0       13:33:07.898    Trades  '11391209': order #284425784 buy 1.00 / 1.00 AFKS at 9.095 done in 12757.608 ms
 

Amigos, pueden decirme a quién pedir consejo - quiero entender cómo trabajar en las diferencias de precios para el mismo producto en diferentes bolsas - soy nuevo en este negocio, quiero entender. Agradeceré cualquier consejo, ¿quizás deba escribir en otro hilo?

Tengo acceso a varias bolsas extranjeras, pero no entiendo cómo funciona todo.