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

 
Vitaly Muzichenko:

¿Cómo puedo saber si no hay cotizaciones porque es un día de descanso o si no hay cotizaciones el jueves porque el servidor de la sala de operaciones se congeló?

Es posible determinar el hecho de que es un día no laborable, utilizando la hora local.

Y el cálculo de GMTOffset debe hacerse sólo en OnTick. Hasta que la garrapata no llegue, no utilice la hora del servidor en los cálculos. En la mayoría de los casos no es necesario.

Como último recurso, si se requiere GMTOffset en fin de semana, dar un mensaje al usuario y tal vez solicitarle el servidor GMTOffset.

 
El desfase GM en los símbolos de divisas puede determinarse por la hora de cierre/apertura de la semana de negociación. Después de todo, la hora local de este evento es conocida.
 
Ihor Herasko:

El hecho de que sea un día libre puede determinarse por la hora local.

Pero el cálculo del GMTOffset del servidor debe hacerse sólo en OnTick. Mientras no llegue el tick, no utilice la hora del servidor en los cálculos. En la mayoría de los casos no es necesario.

Como último recurso, si se requiere GMTOffset en un fin de semana, entonces emita un mensaje al usuario y posiblemente solicite un GMTOffset del servidor.

fxsaber:
El desfase GM en los símbolos de divisas puede determinarse por la hora de cierre/apertura de la semana de negociación. Después de todo, la hora local de este evento es conocida.

No sabemos la hora del servidor el sábado y el domingo, sólo sabemos la hora de llegada de la última cotización. Tampoco sabemos en qué zona horaria funciona el servidor.

Realmente necesitamos una función que muestre la hora actual del servidor, algo así como: TimeServer(); entonces siempre sabremos que la hora del servidor es mayor que la hora de la última cita, significa que o es día libre, o está colgado. GMTOffset no nos salva.

P.D. La pregunta no se refiere sólo a los símbolos de la divisa.
 
Vitaly Muzichenko:

No sabemos la hora del servidor el sábado y el domingo, sólo sabemos la hora de la última cotización. Tampoco sabemos en qué zona horaria funciona el servidor.

Para el Forex se resuelve como he dicho arriba.

 
Vitaly Muzichenko:

No sabemos la hora del servidor el sábado y el domingo

Por el hecho de conocer la hora local.

Sólo conocemos la hora de llegada de la última cotización. Tampoco sabemos en qué zona horaria se encuentra el servidor.

Realmente necesitamos una función que muestre la hora actual del servidor, algo así como TimeServer(); entonces siempre sabríamos si la hora del servidor es mayor que la hora de la última cita, así sabríamos si es día libre o congelado. GMTOffset no nos salva.

Si conocemos la hora local, ni siquiera necesitamos adivinarla. Lo utilizamos para decidir si es un fin de semana o no. Y conocer el servidor GMTOffset sólo nos da la oportunidad de calcular la hora del servidor. No discuto que la función TimeServer() sea útil. Sin embargo, incluso sin ella ahora podemos salirnos con la nuestra.

 
Ihor Herasko:

La hora local es conocida.

Si conoce la hora local, no tiene que adivinarla. Se utiliza para determinar si es un día libre o no. Y conocer el GMTOffset del servidor sólo da la posibilidad de calcular la hora del servidor. No discuto que la función TimeServer() sea útil. Sin embargo, incluso sin ella, ahora puede salirse con la suya.

No es la hora del servidor.

Документация по MQL5: Дата и время / TimeGMTOffset
Документация по MQL5: Дата и время / TimeGMTOffset
  • www.mql5.com
Возвращает текущую разницу между временем GMT и локальным временем компьютера в секундах с учетом перехода на зимнее или летнее время. Зависит от настроек времени на компьютере пользователя.
 
Vitaly Muzichenko:

No es la hora del servidor.

Me refiero a TimeLocal(). Naturalmente, también necesitamos TimeGMTOffset. Si hay ticks, podemos calcular fácilmente el ServerGMTOffset. Si el EA ha recibido al menos un tick real, podrá utilizar TimeLocal() para calcular la hora actual del servidor.

El problema se produce cuando el EA se ha puesto en marcha sin la llegada del tick. En este caso, tenemos que determinar si es el fin de semana. Si es un fin de semana, todos los cálculos relacionados con la hora real del servidor tendrán que ser pospuestos hasta que termine el fin de semana. Si es necesario realizar cálculos durante el fin de semana, pida al usuario que especifique ServerGMTOffset. Obtenga estos datos y utilice TimeLocal() y TimeGMTOffset() para obtener la hora actual del servidor.

 
Ihor Herasko:

Me refiero a TimeLocal(). Naturalmente, también necesitamos TimeGMTOffset. Si hay ticks, no tenemos problemas para calcular ServerGMTOffset. Si el EA ha recibido al menos un tick real, podrá utilizar TimeLocal() para calcular la hora actual del servidor.

El problema se produce cuando el EA se ha puesto en marcha sin la llegada del tick. En este caso, tenemos que determinar si es el fin de semana. Si se trata de un fin de semana, todos los cálculos relacionados con la hora real del servidor deberán posponerse hasta que termine el fin de semana. Si es necesario realizar cálculos durante el fin de semana, pida al usuario que especifique ServerGMTOffset. Al recibir estos datos y utilizar TimeLocal() y TimeGMTOffset(), obtenemos la hora actual del servidor.

Exactamente. Cuelgue el Asesor Experto en el gráfico en el momento de "no ticks". Esto puede ser cualquier cosa, e incluso un fin de semana.

La hora del último tick es de hace 15 minutos (el EA no lo sabe, y nosotros tampoco), pero ¿a qué hora está funcionando el servidor? ¿Es realmente hace 15 minutos, o quizás 1h.15m, o 3h.15m?

 
Vitaly Muzichenko:

Exactamente. Cuelgue el EA en el gráfico durante el período "sin ticks". Esto puede ser cualquier cosa, e incluso un fin de semana.

La hora del último tick es de hace 15 minutos (el EA no lo sabe, y nosotros tampoco), pero ¿qué hora utiliza el servidor? ¿Es realmente hace 15 minutos, o puede ser 1h.15m, o 3h.15m?

Vitaly, los husos horarios difieren entre sí en al menos 1 hora. Para ser más precisos, es un múltiplo de 1 hora. Respectivamente, si la diferencia es de más de una hora, significa que ha pasado algo.

Más concretamente, es posible recibir la diferencia de la hora local y la del servidor en OnInit, y luego compararla con la diferencia actual. En general, las opciones son para los aficionados.

 
Alexey Viktorov:

Vitaly, los husos horarios difieren en al menos 1 hora. Para ser más precisos, es un múltiplo de 1 hora. En consecuencia, si la diferencia es de más de 1 hora, significa que ha ocurrido algo.

Más concretamente, es posible recibir la diferencia de la hora local y la del servidor en OnInit, y luego compararla con la diferencia actual. En general, opciones para el aficionado.

Pongo el EA en el gráfico el sábado, pero el EA puede recibir la hora del último tick, por ejemplo, es 23:58 en Market Watch y mi hora local es 04:45. El tiempo del servidor no lo sé.

Mi pregunta es: ¿Cuánto tiempo ha pasado desde el último tick hasta la hora del servidor (hora del terminal)

Razón de la queja: