我完全迷失了方向 - 页 4

 
ydrol:

datetime(1970年过去的秒)的时区是基于UTC的。就像Unix时间一样。它是UnixTime - 64位unix时间

datetime - datetime = long (second duration)

datetime +/- seconds(long) = datetime(另一个日期)

datetime +/- seconds(int) = datetime(另一个日期)


如何指定一个格林威治标准时间?
 
ydrol: 日期时间的时区(1970年过去几秒钟)是基于UTC的。
错。时区是经纪人的服务器的时间。取决于你使用的是什么经纪商。
FMIC: 你是这里的骗子!这是我在这个主题上的最后一个帖子!你不值得我这么做。

请不要喂食巨魔。

当你回应时,你给了巨魔力量。当你无视巨魔时,他就会渴望得到关注并最终死亡。

 
FMIC:你是这里的骗子!这是我在这个主题上的最后一个帖子!你不值得我这么做。

我认为你已经做了很好的贡献。你的帖子简明扼要,教得很透彻,你的努力得到了很多 "感谢 "的决议。

是的,我认为你为这个人做了所有你能做的。

 
啊,是的,在大多数情况下,在Mql中,时区取决于你从哪里获得时间,这通常是经纪人。
 
RaptorUK:
如何指定一个格林威治标准时间?

Whoopforgot mql4 uses a broken concept of time, .我同意这个反问:-)时区取决于它的来源。因此,所有的问题都有多个来源,如经纪人、电脑、回测等等
 
ydrol:
Whoop forgot mql4 uses a broken concept of time, .我承认我的反问:-)时区取决于它的来源。因此,所有的问题都有多个来源,如经纪人、电脑、回测等等
我只是很高兴你得到了这个反问。
 

我担心数据类型的推广规则会这样做。好吧,那么。

datetime - datetime = long (second duration)

datetime +/- seconds(long) = datetime(另一个日期)

datetime +/- seconds(int) = datetime(另一个日期)

但是,如果我说X=Y-Z,或者(Y-Z)/60,或者类似的东西,其中X已经被声明为long或int,而Y和Z是datetimes,这是不是非常、非常糟糕?如果是这样,static_cast能解决一切问题吗?

Raptoruk,它不是独立于时区的。当然,在任何一个时区,下午2点和3点之间的差异是3600。但如果我知道交易在东部时间周五 下午5点停止,但我不知道时间0(1970年1月1日午夜)是在哪个时区呢?那我们就有问题了,不是吗!?所以1970年1月1日是个星期四。如果时间0是在格林尼治标准时间,那么交易就会在此后的46小时内停止,或165600调制604800。换句话说,一周有604800秒,我用X%604800的算术运算除以604800时的余数,交易在165600时停止。但是,如果经纪人在东边两个时区,而他们的垃圾的时间戳比这个高7200,那么交易在时间%604800是172800时停止,而不是165600。

看起来,报告的时间指数有不确定性。我想我必须让我的代码算出交易开始和停止的时间,毕竟是604800的模数,只是为了确定。我在想,我通过iTime('USDJPY',60,X)这样的东西,找到48小时的差距。我可以依靠iTime是 "开放 "时间,即每小时的开始,对吗?换句话说,交易在2天缺口前的最后一个时间指数后1小时停止,它正好在缺口后的第一个开始时恢复,然后增加604800的倍数,只是改变一周。虽然会有额外的复杂情况,比如在某些星期,它错过了最后一个小时,或者错过了第一个小时,怎么办?也许可以使用iTime('USDJPY',1,X),这样我最多只会偏离几分钟。

哦,哇,很多帖子都是由这个帖子引发的,速度很快。只是为了让其他人知道,我想raporuk毕竟是可以的,但一堆谩骂是不受欢迎的,所以如果你不是ydrol或raporuk或有新东西可说的新人,就不要再发帖了,我不是一个巨魔,因为我不关心你的情绪状态,如果你还有什么要甩的,知道它落在耳边了。

 
zortharg:

我担心数据类型的推广规则会这样做。好吧,那么。

datetime - datetime = long (second duration)

datetime +/- seconds(long) = datetime(另一个日期)

datetime +/- seconds(int) = datetime(另一个日期)

但是如果我说X=Y-Z,或者(Y-Z)/60,或者类似的东西,其中X已经被声明为一个长或一个int,而Y和Z是日期时间,这是不是非常非常糟糕?如果是这样,static_cast能解决一切问题吗?

Raptoruk, 它不是独立于时区的。

好吧,什么时区是0的数据时间?

但如果我知道交易在东部时间周五下午5点停止,但我不知道时间0(1970年1月1日午夜)是在哪个时区呢?那我们就有问题了,不是吗?

不......也许你有,我没有,所以没有,我们没有。 我知道我的经纪人的时区,所以我可以相应地调整周五下午5点的时间,得到周五下午5点的调整后的数据时间。
 
zortharg:

我担心数据类型的推广规则会这样做。好吧,那么。

datetime - datetime = long (second duration)

datetime +/- seconds(long) = datetime(另一个日期)

datetime +/- seconds(int) = datetime(另一个日期)

但如果我说X=Y-Z,或(Y-Z)/60,或类似的东西,其中X已经被声明为一个长或一个int,而Y和Z是数据时间,这是不是非常,非常糟糕?如果是这样,static_cast能解决一切问题吗?


这些不是 "推广规则",只是我的明智之举(我希望!)。 一般来说,我自己也会做出上述类型的选择。

如果我的计算结果仍然是一个自1970年1月1日以来的秒数(无论是否有时区),那么我会把它保留为一个日期时间

否则其他的东西(持续时间,自1970年1月1日以来的分钟数等等),我可能会 把它存储为一个long。(有时是一个int,用于典型的持续时间等)


说到这里,我很困惑,MQL4的设计者是如何做到 强制要求所有的日期时间使用UTC,并强迫所有的经纪商发送UTC数据,而只是让客户端用本地时间来解释,因为他们目前的做法不必要地使下游的一切变得复杂。

这使得在回溯测试中计算GMT时间和会话开/关时间 变得更加困难,如果你想对所有的tick数据来源进行正确计算的话。

(例如Alpari在他们的历史数据中有多个时区,所以在回测时你必须小心你的数据来源)

PS 修改了我之前的错误 :)

 

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

raptoruk,"不......也许你有,我没有,所以不,我们没有。" 这绝对是一个问题。不是对我,不是对你,也不是对我们,而是对你先前所说的不受时区影响的说法的有效性。因为不管你的经纪人在哪个时区,在外汇上的交易并不跟随你经纪人的时钟。周五和周日是东部时间下午5点。格林尼治标准时间晚上10点。那么夏令时/标准时间呢!?那是什么!?有些国家不增加或减少一个小时,或者他们在不同的日子里这样做,所以你可能会在一年中的部分时间里使用偏离一个小时的代码,如果没有一个好的方法来做到这一点。我,我还没有确定一个经纪人。我正在尝试的一个是GMT+2,但我认为现在我不喜欢他们,基于他们的模拟账户。如果我尝试一个真正的,也许我会想使用一个不同的,而不是。所以我不希望经纪人的时区被硬编码到程序中,如果不这样做是很容易的事。不要再像另一个人那样,试图把一切都扭曲成一个侮辱的机会,而不是从表面上看问题。