嗨,伙计们。
刚刚遇到一个有趣的问题/bug,不知道以前是否被发现过,甚至不知道是否是经纪商的问题。
尝试在一些指标代码中使用以下内容,让指标在启动时运行,并注意第一次运行MT4时的数值(确保MT4在重新启动前至少没有运行10分钟)。
你会注意到返回的时间实际上是MT4最后运行的时间。
为了解决这个问题,我不得不在我的代码中引入一个延迟,这对一个指标来说并不理想。
我想知道是否有人有更多的解决方案。我希望每次启动时都能返回正确的MT4服务器时间。
谢谢
保罗-B
这个?
Print(TimeToStr(TimeCurrent(),TIME_DATE|TIME_SECONDS));
嗨,deVries。
你也可以使用TIME_SECONDS,这并不重要,只要代码是在init{}或start{}的开头。
问题是,你得到的是MT4最后运行的时间,有可能是几小时或几天前。
嗨,伙计们。
刚刚遇到一个有趣的问题/bug,不知道以前是否被发现过,甚至不知道是否是经纪商的问题。
尝试在一些指标代码中使用以下内容,让指标在启动时运行,并注意第一次运行MT4时的数值(确保MT4在重新启动前至少没有运行10分钟)。
你会注意到返回的时间实际上是MT4最后运行的时间。
为了解决这个问题,我不得不在我的代码中引入一个延迟,这对一个指标来说并不理想。
我想知道是否有人有更多的解决方案。我希望每次启动时都能返回正确的MT4服务器时间。
谢谢
保罗-B
作为额外的一点,我甚至尝试过
https://docs.mql4.com/windows/RefreshRates
然后再调用TimeCurrent(),也没有什么不同。这当然是要记住的事情。
我把它作为一些代码的一部分来使用,以获得MT4服务器时间和GMT之间的偏移量,它使后续的计算出错。
我不认为这与文件中所说的有关 ......如果你在新刻度线到来之前检查TimeCurrent(),你会得到最后一个刻度线的时间。 这不正是文件中所说的吗?
这仍然有误导性,但如果你想迂腐一点,你可以说问题不在TimeCurrent()的定义里,而是在https://docs.mql4.com/runtime/start 的定义。 它说:"在新的报价传入时,将执行所附专家和自定义指标的start()函数"。这清楚地表明,start()只在有新行情时才会被调用,就像EA一样,因此,隐含地,TimeCurrent()不能返回使用MT4软件的上一个时段的时间。
[同样,如果IsConnected()返回false,就可以忽略指标中对start()的调用。]
更为迂腐的是,如果你有一个全新的MT4安装,并在第一次启动MT4之前将一个附有指标的图表文件复制到其中,那么该指标可能会得到一个start()的调用,TimeCurrent()报告为1/1/1970。因此,TimeCurrent()的文档应该说"......最后已知的服务器时间,如果没有服务器连接,则为1970年1月"。
没有必要大惊小怪。只要等待第一个/下一个tick,TimeCurrent()就会更新,一切都会好起来。只有历史价格的指标是没有用的。
在这种情况下,我会简单地忽略第一个刻度 ... ...然后从第2个刻度开始继续正常运行。
嗨,伙计们。
刚刚遇到一个有趣的问题/bug,不知道以前是否被发现过,甚至不知道是否是经纪商的问题。
尝试在一些指标代码中使用以下内容,让指标在启动时运行,并注意第一次运行MT4时的数值(确保MT4在重新启动前至少没有运行10分钟)。
你会注意到返回的时间实际上是MT4最后运行的时间。
为了解决这个问题,我不得不在我的代码中引入一个延迟,这对一个指标来说并不理想。
我想知道是否有人有更多的解决方案。我希望每次启动时都能返回正确的MT4服务器时间。
谢谢
保罗-B