Caractéristiques du langage mql5, subtilités et techniques - page 74

 
Vitaly Muzichenko:

Comment puis-je savoir s'il n'y a pas de cotations parce que c'est un jour de congé ou s'il n'y a pas de cotations le jeudi parce que le serveur de la salle des marchés a gelé ?

Il est possible de déterminer le fait qu'il s'agit d'un jour de congé, en utilisant l'heure locale.

Et le calcul du GMTOffset ne devrait être effectué que dans OnTick. Tant que le tic n'est pas arrivé, n'utilisez pas l'heure du serveur dans les calculs. Dans la plupart des cas, ce n'est vraiment pas nécessaire.

En dernier recours, si GMTOffset est nécessaire pendant le week-end, envoyez un message à l'utilisateur et demandez-lui éventuellement un serveur GMTOffset.

 
Le décalage GMTOffset sur les symboles forex peut être déterminé par l'heure de fermeture/ouverture de la semaine de trading. Après tout, l'heure locale de cet événement est connue.
 
Ihor Herasko:

Le fait de prendre un jour de congé peut être déterminé par l'heure locale.

Mais le calcul du GMTOffset du serveur ne devrait être effectué qu'à OnTick. Tant que le tick n'est pas arrivé, n'utilisez pas l'heure du serveur dans les calculs. Dans la plupart des cas, ce n'est vraiment pas nécessaire.

En dernier recours, si GMTOffset est nécessaire pendant le week-end, envoyez un message à l'utilisateur et demandez-lui éventuellement un serveur GMTOffset.

fxsaber:
Le décalage GMTOffset sur les symboles forex peut être déterminé par l'heure de fermeture/ouverture de la semaine de trading. Après tout, l'heure locale de cet événement est connue.

Nous ne connaissons pas l'heure du serveur le samedi et le dimanche, nous ne connaissons que l'heure d'arrivée du dernier devis. Nous ne savons pas non plus dans quel fuseau horaire le serveur fonctionne.

Nous avons vraiment besoin d'une fonction qui affiche l'heure actuelle du serveur, quelque chose comme : TimeServer() ; ainsi nous saurons toujours que l'heure du serveur est supérieure à l'heure de la dernière citation, cela signifie soit qu'il y a un jour de congé, soit qu'il est suspendu. GMTOffset ne nous sauve pas.

P.S. La question ne porte pas uniquement sur les symboles forex.
 
Vitaly Muzichenko:

Nous ne connaissons pas l'heure du serveur le samedi et le dimanche, nous ne connaissons que l'heure de la dernière citation. Nous ne savons pas non plus dans quel fuseau horaire le serveur fonctionne.

Pour le Forex, la question est résolue comme je l'ai dit plus haut.

 
Vitaly Muzichenko:

Nous ne connaissons pas l'heure du serveur le samedi et le dimanche.

Pour le fait que vous connaissez l'heure locale.

Nous ne connaissons que l'heure d'arrivée du dernier devis. Nous ne savons pas non plus dans quel fuseau horaire se trouve le serveur.

Nous avons vraiment besoin d'une fonction qui afficherait l'heure actuelle du serveur, quelque chose comme TimeServer() ; nous saurions alors toujours si l'heure du serveur est supérieure à l'heure de la dernière citation, ce qui signifie que le serveur est soit éteint, soit en panne. GMTOffset ne nous sauve pas.

Si nous connaissons l'heure locale, nous n'avons même pas besoin de deviner. Nous l'utilisons pour décider si c'est un week-end ou non. Et connaître le serveur GMTOffset nous donne juste la possibilité de calculer l'heure du serveur. Je ne prétends pas que la fonction TimeServer() serait utile. Néanmoins, même sans cela, nous pouvons nous en sortir.

 
Ihor Herasko:

L'heure locale est connue.

Si vous connaissez l'heure locale, vous n'avez même pas besoin de deviner. Il est utilisé pour déterminer s'il s'agit d'un jour de congé ou non. Et le fait de connaître le GMTOffset du serveur permet simplement de calculer l'heure du serveur. Je ne prétends pas que la fonction TimeServer() serait utile. Néanmoins, même sans cela, vous pouvez vous en tirer maintenant.

Ce n'est pas l'heure du serveur.

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

Ce n'est pas l'heure du serveur.

Je parle de TimeLocal(). Naturellement, nous avons également besoin de TimeGMTOffset. S'il y a des ticks, nous pouvons facilement calculer le ServerGMTOffset. Si l'EA a reçu au moins un tick réel, il pourra utiliser TimeLocal() pour calculer l'heure actuelle du serveur.

Le problème se produit lorsque l'EA a démarré sans l'arrivée du tick. Dans ce cas, nous devons déterminer si c'est le week-end. Si c'est un week-end, tous les calculs relatifs à l'heure réelle du serveur devront être reportés jusqu'à la fin du week-end. S'il est nécessaire d'effectuer des calculs pendant le week-end, nous demandons alors à l'utilisateur de spécifier ServerGMTOffset. Obtenez ces données et utilisez TimeLocal() et TimeGMTOffset() pour obtenir l'heure actuelle du serveur.

 
Ihor Herasko:

Je parle de TimeLocal(). Naturellement, nous avons également besoin de TimeGMTOffset. S'il y a des tics, nous n'avons aucun problème pour calculer ServerGMTOffset. Si l'EA a reçu au moins un tick réel, il pourra utiliser TimeLocal() pour calculer l'heure actuelle du serveur.

Le problème se produit lorsque l'EA a démarré sans l'arrivée du tick. Dans ce cas, nous devons déterminer si c'est le week-end. Si c'est un week-end, tous les calculs relatifs à l'heure réelle du serveur devront être reportés jusqu'à la fin du week-end. S'il est nécessaire d'effectuer des calculs pendant le week-end, demandez alors à l'utilisateur de préciser ServerGMTOffset. En recevant ces données et en utilisant TimeLocal() et TimeGMTOffset(), nous obtenons l'heure actuelle du serveur.

Exactement. Accrochez le conseiller expert sur le graphique au moment de l'absence de tics. Cela peut être n'importe quoi, et même un week-end.

L'heure du dernier tick remonte à 15 minutes (l'EA ne le sait pas, et nous non plus), mais à quelle heure le serveur fonctionne-t-il ? Est-ce qu'il y a vraiment 15 minutes, ou peut-être 1h.15m, ou 3h.15m ?

 
Vitaly Muzichenko:

Exactement. Accrochez l'EA sur le graphique pendant la période "sans tics". Cela peut être n'importe quoi, et même un week-end.

L'heure du dernier tick remonte à 15 minutes (l'EA ne le sait pas, et nous non plus), mais quelle heure le serveur utilise-t-il ? Est-ce qu'il y a vraiment 15 minutes, ou peut-être 1h.15m, ou 3h.15m ?

Vitaly, les fuseaux horaires diffèrent les uns des autres d'au moins une heure. Pour être plus précis, il s'agit d'un multiple d'une heure. Respectivement, si la différence est supérieure à une heure, cela signifie que quelque chose s'est produit.

Plus concrètement, il est possible de recevoir la différence entre l'heure locale et l'heure du serveur dans OnInit, puis de la comparer avec la différence actuelle. En général, les options sont pour les fans.

 
Alexey Viktorov:

Vitaly, les fuseaux horaires diffèrent d'au moins une heure. Pour être plus précis, il s'agit d'un multiple d'une heure. Par conséquent, si la différence est supérieure à 1 heure, cela signifie que quelque chose s'est produit.

Plus concrètement, il est possible de recevoir la différence entre l'heure locale et l'heure du serveur dans OnInit, puis de la comparer avec la différence actuelle. En général, les options pour l'amateur.

Je place l'EA sur le graphique le samedi, mais l'EA peut recevoir l'heure du dernier tick, par exemple, il est 23:58 dans Market Watch et mon heure locale est 04:45. L'heure du serveur, je ne la connais pas.

Ma question est la suivante : combien de temps s'est écoulé entre le dernier tick et l'heure du serveur (heure du terminal) ?