mql5语言的特点、微妙之处以及技巧 - 页 74

 
Vitaly Muzichenko:

我怎样才能知道是否因为今天是休息日而没有报价,或者是否因为交易室的服务器挂断而在星期四没有报价?

利用当地时间,可以确定这是一个休息日的事实。

而GMTOffset的计算应该只在OnTick中完成。在嘀嗒声没有到来之前,不要在计算中使用服务器时间。在大多数情况下,这确实是不需要的。

作为最后的手段,如果在周末需要GMTOffset,给用户一个消息,也许可以向他请求GMTOffset服务器。

 
外汇符号的GMT偏移可以由交易周的收盘/开盘时间决定。毕竟,这一事件的当地时间 是已知的。
 
伊霍尔-赫拉斯科

休息日的事实可以由当地时间决定。

但是服务器的GMTOffset的计算应该只在OnTick进行。只要滴答声还没有到来,就不要在计算中使用服务器时间。在大多数情况下,这确实是不需要的。

作为最后的手段,如果在周末需要GMTOffset,那么就向用户发出消息,并可能向他们请求一个服务器GMTOffset。

fxsaber:
外汇符号上的GMT偏移可以由交易周的收盘/开盘时间决定。毕竟,这一事件的当地时间是已知的。

我们不知道周六和周日的服务器时间,我们只知道最后一次报价的到达时间。我们也不知道服务器在哪个时区工作。

我们真的需要一个函数来显示服务器的当前时间,类似于:TimeServer();然后我们总是知道服务器的时间大于最后一次引用的时间,这意味着要么它是休息日,要么它被挂起。GMTOffset并不能拯救我们。

P.S. 这个问题不仅仅是关于外汇符号。
 
维塔利-穆齐琴科

我们不知道周六和周日的服务器时间,我们只知道最后一次报价的时间。我们也不知道该服务器在哪个时区工作。

对于外汇来说,正如我上面所说的,它已经解决了。

 
维塔利-穆齐琴科

我们不知道周六和周日的服务器时间。

因为你知道当地的时间。

我们只知道最后一次报价的到达时间。我们也不知道服务器在哪个时区。

我们真的需要一个能显示当前 服务器时间的 函数,类似于TimeServer();这样我们就能随时知道服务器时间是否高于最后一次报价的时间,这意味着服务器要么关闭要么挂起。GMTOffset并不能拯救我们。

如果我们知道当地时间,我们甚至不需要猜测。我们用它来决定是否是一个周末。而知道GMTOffset服务器只是给我们一个计算服务器时间的机会。我不认为函数TimeServer()会有什么用。尽管如此,即使现在没有它,我们也可以不受影响。

 
Ihor Herasko:

当地时间是已知的。

如果你知道当地时间,你甚至不需要猜测。它被用来确定是否是休息日。而知道了服务器的 GMTOffset,就有可能计算出服务器时间。我不认为函数TimeServer()会有什么用。尽管如此,即使没有它,你现在也可以逃过一劫。

这不是服务器的时间

Документация по MQL5: Дата и время / TimeGMTOffset
Документация по MQL5: Дата и время / TimeGMTOffset
  • www.mql5.com
Возвращает текущую разницу между временем GMT и локальным временем компьютера в секундах с учетом перехода на зимнее или летнее время. Зависит от настроек времени на компьютере пользователя.
 
维塔利-穆齐琴科

现在不是服务器时间。

我说的是TimeLocal()。自然,我们也需要TimeGMTOffset。如果有刻度,我们可以很容易地计算出ServerGMTOffset。如果EA已经收到了至少一个真实的tick,它将能够使用TimeLocal()来计算当前的 服务器时间

问题发生在EA已经启动而没有tick的到来。在这种情况下,我们需要确定是否是周末。如果是周末,所有与真实服务器时间有关的计算将不得不推迟到周末结束。如果非常需要在周末进行计算,那么请用户指定ServerGMTOffset。获取这些数据并使用TimeLocal()和TimeGMTOffset()来获取当前服务器时间。

 
伊霍尔-赫拉斯科

我说的是TimeLocal()。自然,我们也需要TimeGMTOffset。如果有刻度,我们在计算ServerGMTOffset时就没有问题。如果EA已经收到了至少一个真实的tick,它将能够使用TimeLocal()来计算当前的 服务器时间

问题发生在EA已经启动而没有tick的到来。在这种情况下,我们需要确定是否是周末。如果是周末,所有与真实服务器时间有关的计算将不得不推迟到周末结束。如果非常需要在周末进行计算,那么请用户指定ServerGMTOffset。在收到这些数据并使用TimeLocal()和TimeGMTOffset()时,我们得到了当前的服务器时间。

正是如此。在 "无刻度 "的时候将专家顾问挂在图表上。这可以是任何事情,甚至是一个周末。

最后一个tick的时间是15分钟前(EA不知道,我们也不知道),但服务器运行在什么时间?真的是15分钟前,或者是1小时15分钟,或者3小时15分钟?

 
Vitaly Muzichenko:

正是如此。在 "无刻度 "期间将EA挂在图表上。这可以是任何事情,甚至是一个周末。

最后一个tick的时间是15分钟前(EA不知道这个,我们也不知道),但服务器使用的是什么时间?真的是15分钟前,还是可能是1小时15分钟,或者3小时15分钟?

维塔利,时 之间至少相差1小时。更准确地说,它是1小时的倍数。分别来说,如果差异超过一小时,就意味着发生了一些事情。

更具体地说,可以在OnInit中接收本地和服务器时间的差异,然后与当前的差异进行比较。一般来说,这些选项是为球迷准备的。

 
Alexey Viktorov:

维塔利,时区至少相差1小时。更准确地说,它是1小时的倍数。因此,如果差异超过1小时,就意味着发生了一些事情。

更具体地说,可以在OnInit中接收本地和服务器时间的差异,然后与当前的差异进行比较。一般来说,业余爱好者的选择。

我把EA放在周六的图表上,但EA可能会收到最后一个tick的时间,例如,Market Watch中是23:58,而我的当地时间是04:45。服务器的时间 我不知道。

我的问题是:从最后一个刻度到服务器时间(终端时间)已经过去了多少时间?