TimeCurrent()和iTime()的错误/问题 - 页 2

 
RaptorUK:
我认为问题在于,第一次为一个指标调用start()时,可能不是因为新的tick ......在这种情况下,TimeCurrent()将报告错误的时间。 我还没有验证这一点 ......。

在这种情况下,我会简单地忽略第一个刻度 ... ...然后从第2个刻度开始继续正常运行。

是的,这就是我的意思。
 
这是一个指标,你为什么要关心TimeCurrent是什么。做你的for指标计数循环,在条形图上画。不要看TimeCurrent,不要看Bid。
 
我在图表上绘制与格林威治标准时间相匹配的某些时间,所以当试图获得MT4服务器时间 和格林威治标准时间之间的偏移时,这一点非常重要。
 

Paul_B:
I'm plotting certain times on a chart which match to GMT, so it matters a great deal when trying to get the offset between MT4 server time and GMT.

<g> 我认为你还没有掌握这个论坛的文化。版主和论坛的其他长期用户的反应顺序总是 "你做错了什么",然后是 "你为什么要这么做?"当事实证明你没有做错的时候。

如果我是你,我就会在IsConnected()为假时退出对start()的调用。或者你可以在一个静态变量中保持一个tick计数,并忽略tick #1,但这在正常情况下会不必要地延迟启动。

 
谢谢你的意见,目前我已经在工作了,但我所拥有的似乎并不是一个理想的解决方案,也不是特别强大。我将进一步探索IsConnected()。
 
Paul_B: 我在图表上绘制了与格林威治时间相匹配的某些时间,所以当试图获得MT4服务器时间和格林威治时间之间的偏移时,这一点非常重要。
现在我们明白为什么了。(你为什么不在OP上解释一下?)和我的代码 完全一样
      nextAutoUpdate = timeSrv + HR2400;
      if(Srvr_To_UTC_Auto) if(
         IsDllsAllowed()){                            // Complained @ init
         int      srvrToUTC         = LocalTimeToUTC() - TimeCurrent();
         double   nearestHalfHour   = MathRound(srvrToUTC / 1800.);
         Srvr_To_UTC_Hours          = nearestHalfHour / 2.; // Update external
      }

我赞同RaptorUK的建议,对于一个指标来说,忽略第一个刻度,在第二个刻度上更新所有条形。

这也不完全是意外。由于指标不能睡眠,如果EA通过iCustom在它的init中加载一个指标,在指标运行init和start之前,调用不能返回一个缓冲值。

 
Paul_B:
谢谢你的意见,目前我已经在工作了,但我所拥有的似乎不是一个理想的解决方案,也不是特别强大。我将进一步探索IsConnected()。

我不认为你有什么选择。MT4生成对start()的假调用,以使指标在离线图表上出现,因为它更希望指标在MT4加载时就(重新)出现在图表上,而不需要等待连接的建立。

如果你想提高对正确建立连接和有效TimeCurrent()的确定性,那么你也可以寻找AccountNumber() !=0和AccountBalance() > 0。

 

谢谢大家,我会把指标编程为等待,直到收到第二个tick。

顺便说一下,我刚刚探索了IsConnected()的可能性,但我仍然得到 "错误的 "TimeCurrent(),即使IsConnected()报告为真。

 
cyclops993:

<g> 我认为你还没有掌握这个论坛的文化。版主和论坛的其他长期用户的反应顺序总是 "你做错了什么",然后是 "你为什么要那样做?"当事实证明你没有做错的时候。

如果我是你,我就会在IsConnected()为假时退出对start()的调用。或者你可以在一个静态变量中保持一个tick计数,并忽略tick #1,但这在正常情况下会不必要地延迟启动。

如果用户不提供测试代码来证明这个问题,就很难提供具体的帮助,通常可以做出的最好假设是代码中存在错误。......也许你应该接管并回答所有的和任何的问题和帮助请求。 这将解决你所有的问题,那么你就不必对那些只是想帮忙的人进行挖苦了.. .
 
RaptorUK:
如果一个用户不提供测试代码来证明这个问题[...] 。

OP中没有任何错误或遗漏之处。很明显,Paul_B从MT4文档中完全合理地假设,start()只在出现新点数时被调用。(为什么 他想检查 TimeCurrent()并没有什么区别,实际上也不关我们的事)。

你的回答基本上是一个很好的RTFM版本,尽管手册中明显缺乏这方面的内容[我要强调这是不寻常的;MT4文档的质量是相当好的]。Angevoyageur的反应是将此描述为小题大做,这似乎是对MT4任何形式的批评的病态敏感反应模式的一部分,无论多么温和。WHRoeder接着说 "你不会想这么做的",然后复制和粘贴一些代码,这显然是不相关的,因为Paul_B显然已经知道如何计算GMT偏移。