我完全迷失了方向 - 页 5

 
我不知道你说的静态铸造是什么意思。时区问题在mql中是个麻烦。在旧的mql4中,方法是有一个全局变量,用户将其设置为经纪人的偏移量,,你也可以使用新的timegmt函数 获得gmt时间,但我看到一些报告,这是错误的。我也不确定它在回溯测试中是如何表现的。不幸的是,整个事情是一团糟。但也不是不能用代码解决。
 
RaptorUK: 好吧,什么时区的数据时间是0?
这是你的经纪人的服务器的时区。彻底的。你从mt4得到的任何日期时间都是你服务器的时区。(不包括TimeLocal() 和新的mt5TimeGMT)
ydrol。我很困惑,MQL4的设计者是如何做到 强制要求所有的日期时间使用UTC的。

你对超过十年前的东西感到疑惑?你甚至听说过千年虫吗?如果没有,你就会对为什么日期在存储时每年只有两位数感到困惑,所以1999年之后就是1900年或19100年。

你可能想不明白为什么在一个有70亿人口的世界里,IP地址被限制在42亿。DARPA的某人在试图连接全国现有的(几十台)大型计算机时做出了这个决定。现在我们正在从IPv4转换到IPv6。

克服你自己。这不是伯杰-金,你没有得到你 方式。有人做出了一个在当时看来合理的决定,而现在却不是。处理一下吧。

 
zortharg:

ydrol,看在所有神圣的或什么的份上,请告诉我--如果你知道的话--static_cast是否可以在mql4中使用!它和C++中的是一样的吗?这个页面https://docs.mql4.com/basis/types/casting,从来没有提到过这个,我在论坛上找不到,我在任何地方都找不到。我在编码中不断遇到这样的情况,不光是把日期时间变成长的,还有把日期时间变成双的,这都是不可避免的,所以我想把它做对。也就是说,程序会计算出一个样本在一周中的哪个部分,并在计算中相应地强调它--但时间与一周中的秒数相乘仍然是一个数据时间类型的变量,除非我可以把它转换为其他东西,否则它就会被卡住。但我需要对它进行数学运算,并在最后使它成为一个双数,你看。如果你不知道,那就不要着急,但如果你知道,请告诉我在这种情况下我应该如何正确地进行类型转换。

在文档中有一整节关于数据类型和类型转换的内容,你在使用编辑器时按下F1吗?

 
WHRoeder:
这是你的经纪人的服务器的时区。彻底的。你从mt4得到的任何日期时间都是你服务器的时区。(不包括TimeLocal() 和新的mt5TimeGMT)

你对超过十年前的东西感到疑惑?你甚至听说过千年虫吗?如果没有,你就会困惑于为什么日期的存储每年只有两位数,所以1999年之后就是1900年或19100年。

你可能不明白为什么在一个有70亿人口的世界里,IP地址被限制在42亿。DARPA的某人在试图连接全国现有的(几十台)大型计算机时做出了这个决定。现在我们正在从IPv4转换到IPv6。

克服你自己。这不是伯杰-金,你没有得到你 方式。有人做出了一个在当时看来合理的决定,而现在却不是。处理一下吧。

不,你别管自己了。说真的,我很不理解为什么在设计时要做出这个决定。而且我完全有权利这么说。言论自由和所有这些。你没有权利试图压制我,而我也没有权利压制你。它是基于一个既定的时间格式,已经使用utc的原因,而且远远超过10年,现在mql4有时区问题,因为一个决定,坦率地说我不明白。我被允许这样说。你可以对y2k进行调侃,这没有什么区别。我在系统集成领域工作了近20年,不把它固定在UTC上看起来是个糟糕的设计决定。如果你不能接受别人表达自己的意见,那很抱歉。
 
WHRoeder:
这是你的经纪人服务器的时区。PERIOD。你从mt4得到的任何日期时间都是你服务器的时区。(不包括TimeLocal() 和新的mt5TimeGMT
和GlobalVariableSet()是来自PC时钟的GMT时间(未建模)。
 

再次挖出这个问题,只是因为我目前正在将我的TimeZone/Session函数迁移到一个整洁的mql4++类中去

WHRoeder: Someone made a decision that seemed reasonable at the time and now isn't. Deal with it.

我正在处理这个问题,但我仍然不明白为什么我必须首先处理这个问题!"。围绕管理时区信息的最佳实践已经存在了很长时间。 例如,对于ISO 8601

ISO 8601中的时区 被表示为当地时间(未指定地点)、UTC 或UTC的偏移。

如果时间表示中没有给出UTC关系的信息,那么时间就被认为是当地时间。虽然在同一时区通信时假设为当地时间可能是安全的,但在不同时区的通信中使用时区是模糊 的。[我的强调]通常最好使用标准的符号来表示时区(区域代号)。"

下划线的部分在IT界已经有近30年的历史了,如果不是更久的话。MQL的日期格式来自于UnixTime(他们并没有从半空中摘取神奇的日期1/1/1970),所以他们现在应该已经知道了。

同样在1988年,POSIX批准了UnixTime。

"POSIX委员会被反对库函数的复杂性的论点所动摇。 并坚定地以 简单的 方式用UTC时间的元素来定义Unix时间[我的强调]

10年前(这甚至不是很久以前)设计客户-服务器系统的系统设计师或开发人员,在交换关键时间信息时,应该有足够的信息来预测/避免目前的时区混乱。一个时区的交易员得到另一个时区的数据,他们有时想用另一个时区(如纽约)来解释这些数据。唯一的借口是。

- 无知

- 低优先级(时区混乱对经纪商有利,而不是对交易者有利?)

- 一些技术上的考虑/约束/要求,对我们外部的人来说并不明显。也许是绘制图表什么的?虽然加/减一个已知的 偏移量并不难?

正如我之前所说,以上所有的问题都让我感到困惑。我觉得在回溯测试中不应该需要写代码来计算格林威治时间!但TimeGMT()和TimeL()却可以让我在回溯测试中使用。但是TimeGMT()和TimeLocal()没有正确的模型,(它们都被设置为从历史数据中得出的非特定的TZ),所以我们需要扮演我们自己的时区函数,以准确计算UTC,从而在回测时计算Session的开始和结束时间。

PS 被WHRoeder告知 "克服自己 "的讽刺意味并没有消失 :)

原因: