我完全迷失了方向 - 页 3

 
FMIC在那份文档中有些东西不大合理。写这个东西的人显然是为那些从未用GWBASIC或伪代码写过程序的读者写的,更不用说接触到更高级别的编程概念了。或者至少作者的意图是让这些人能够理解,而不一定是专门针对这些人的。我倾向于跳过关于if/else语句和for循环的部分,以及什么是变量,大声喊叫,所以不,不从头到尾看。然而,当我跳过这些部分时,在接下来的章节中,作者不能很成功地从一个相对的初学者的角度来看待它,因为像我这样有一些有限的编程经验的人出现了,一旦到了文献中的某一点,这些碎片仍然不能拼凑起来。下面是另一个例子。日期时间的数据类型。我来到这里:http://msdn.microsoft.com/en-us/library/system.datetime_members%28v=VS.90%29.aspx,我看到,按照标准,数据时间变量要比这个文献中所说的复杂得多。例如,它包含了关于MILLISECONDS的信息。它可以是任何年份,直到公元9999年。然而,这个文档提示它是不同的,但它并没有足够的细节。也许它不是标准的C++数据时间变量,而是MQL4特有的东西?从1970年开始的秒数,有效期到2037年年底。现在,在这个时间间隔内刚好有将近2^31秒。这表明它是一个有符号的长整数--因为一个无符号的长整数实际上会从1970年开始进入22世纪。我是否可以在算术运算中使用它,就像它是一个有符号的长整数一样?它没有说。它是模棱两可的。它可以是一个光荣的类似字符串的变量,只是对字符串的内容有某些限制。它还显示了一些使用它的不完整的方法。但它对所有可能被访问或操作的方式都不够明确。我可以在整数运算中与ints一起使用它吗?如果我读取一个样本的时间索引,我是否可以从一个1分钟的图表中减去另一个1分钟的图表,如果它们是连续的几分钟,期望它们相差60(可能是正负1)?

还有一件事我已经有问题了--ArrayCopySeries的描述是模糊的。它在某些部分暗示array[] 被写入,但在其他部分,它暗示它没有。我仔细看了一下,我绝对不明白这个函数的目的是什么,如果它不把货币数据复制到数组中。

这是我想知道的另一件事。它说,一个EA可以有3个主要功能:init、deinit和start。init在第一次运行时运行一次,start在有新的tick时运行,它没有说deinit的事情。这里的例子https://book.mql4.com/samples/expert,甚至没有init。它有一个启动。它有一些复杂的东西,显然是用来处理错误的,比如Fun_Error,不管它是干什么的。没有init。变量呢?在init中定义的变量在init完成后和 "start "运行时是否仍然有效?还是应该在两个变量之外声明?每次 "启动 "运行时,在 "启动 "中声明的变量是否会被清除?在它之外声明的变量也是如此吗?我希望不是!我甚至不大确定我是否可以改变在任何函数之外声明的变量。从我看到的情况看,它们可能都是全局静态变量。

顺便说一下,在iTime等函数中使用的货币符号是应该用单引号还是双引号?"USDCHF "还是 "USDCHF"?像这样的小事有上千件。我相信任何一个都会导致我到最后时无法编译。有了一千个不同的小错误,就会有调试的问题。

RaptorUK 哦,你当然没有任何义务帮助我。如果你对美好时光的想法是在论坛上嘲弄别人,嘲笑他们在论坛上寻求帮助,而上任何论坛的目的显然是为了嘲弄别人,那么我看你确实既享受了自己,又履行了你认为是论坛用户的正确角色。至于我,如果我有资格帮助任何人,通过回答一个我可以回答的问题,假设我很可能愿意这样做。例如,如果你有一打在统计上不独立的指标,我知道如何将它们优化组合成一个综合指标,以弥补它们在统计上的依赖性。当然,我现在肯定不会在任何事情上帮助你。天哪,如果我看到你的脚卡在铁轨上,我会说:"我可以帮助你,但对我有什么好处?"

 
zortharg:
FMIC在该文件中有些东西不大合理。...

尽管我对高级和低级语言非常熟悉,但从头到尾读完这本书并没有什么困难。

我今年45岁,自1986年以来一直是一名软件开发人员,还拥有工程(低电流电子)学士学位。我精通C、C++、C#、Pascal、Cobol、Fortran、Perl和许多其他早已消失的语言。我还精通x86、Z-80、Pics和许多其他架构的汇编程序。我再说一遍,我在阅读和学习MQL4时没有任何困难。

所以, 我所能得出的结论 是,你以高高在上的态度批评文件,而不是把注意力放在学习MQL的实际目标上,这只能说明一件事--你实际上比那些为之编写文件的非程序员更愚蠢。

如果你认为MetaTrader和MQL是如此的低级,那么你为什么在这里?我是认真的!为什么?

外面有很多其他的交易应用程序 和算法系统。挑一个,去找他们的麻烦吧!

顺便说一下,"RaptorUK "是论坛的管理员。你是这里的骗子!

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

 
zortharg:

RaptorUK哦,你当然没有任何义务帮助我。如果你对美好时光的想法是在论坛上嘲弄别人,嘲笑他们在论坛上寻求帮助,而上任何论坛的目的显然是为了嘲弄别人,那么我看你确实既享受了自己,又履行了你认为是论坛用户的正确角色。至于我,如果我有资格帮助任何人,通过回答一个我可以回答的问题,假设我很可能愿意这样做。例如,如果你有一打在统计上不独立的指标,我知道如何将它们优化组合成一个综合指标,以弥补它们在统计上的依赖性。当然,我现在肯定不会在任何事情上帮助你。天哪,如果我看到你的脚卡在铁轨上,我会说:"我可以帮助你,但对我有什么好处?"

也许你应该解释一下你的这个评论?

这个论坛上的人真是胆大包天!


这个论坛上的许多人放弃了他们的空闲时间来尝试和帮助。......而你却来了,并期望得到帮助,好像这是一种权利!我想每个人都会乐意帮助你,直到你表现出你的态度。 我想每个人都会乐意帮助你,直到你表明你的态度......你在寻求帮助的 时候应该表现出一点谦逊。

你可以给我贴上任何标签,我真的不在乎,我知道我为什么在这里,有些人甚至感谢我试图帮助他们。. . 我想这是你无法理解的。

 
zortharg:

那么,我必须用iclose一次一次地下载历史价格?https://docs.mql4.com/series/iClose 我认为这样做的问题是,当我在下载时,数据可能会更新。如果能以块的形式下载整个数据,那就非常好了。我猜想我可以用iTime下载时间,然后使用iclose,然后在同一个指数上再次使用iTime,如果它发生了变化,那么它已经开始了一个新的条形时间间隔,我必须回到一个指数。我的推理是否正确,还是有什么我不明白的地方?


为什么一个调用ArrayCopySeries()的函数 需要你自己复制系列?

你声明了数组,但不需要指定其大小。

当你访问这个数组时,Mql会施展 "魔法",(希望)正确的值会出现在正确的位置。

页面上有一个例子。

说到这里,在线文档目前已经不同步了,所以使用元编辑器中的帮助作为你的主要参考。

盯着这个例子看,直到它变得有意义!

 
zortharg:
日期时间的数据类型。我来到这里:http://msdn.microsoft.com/en-us/library/system.datetime_members%28v=VS.90%29.aspx,我看到,按照标准,数据时间变量要比这个文档所说的复杂得多。例如,它包含了关于MILLISECONDS的信息。它可以是任何年份,直到公元9999年。然而,这个文档提示它是不同的,但它并没有足够的细节。也许它不是标准的C++数据时间变量,而是MQL4特有的东西?从1970年开始的秒数,有效期到2037年年底。现在,在这个时间间隔内刚好有将近2^31秒。这表明它是一个有符号的长整数--因为一个无符号的长整数实际上会从1970年开始进入22世纪。我可以在算术运算中使用它,就像它是一个有符号的长整数一样吗?它没有说。它是模棱两可的。它可以是一个光荣的类似字符串的变量,只是对字符串的内容有某些限制。它还显示了一些使用它的不完整的方法。但它对所有可能被访问或操作的方式都不够明确。我可以在整数运算中与ints一起使用它吗?如果我读取一个样本的时间索引,我是否可以从一个1分钟的图表中减去另一个1分钟的图表,如果它们是连续的几分钟,期望它们相差60(可能是正负1)?

为什么要用这么多字来问一件简单的事情呢 :)

Old MQL: https://docs.mql4.com/dateandtime 一组函数 提供了与数据类型 整数表示从1970年1月1日午夜开始经过的秒数)的工作。

新的MQL:https://www.mql5.com/en/docs/basis/types/integer/datetime -数据时间 类型是用来存储日期和时间的,即从1970年1月1日开始经过的秒数。这个类型占用了8个字节的内存。

大多数使用旧的32位整数来存储时间的语言,已经转移到了64位,以避免在2038年到来的时候被毁。

你只需像你猜测的那样进行加减法。但要保持它作为一个日期时间 数据类型,并避免在 变量中存储的诱惑。

 

谢谢你 ydrol!

嗯,嗯。我不知道static_cast在mql4中是否存在,但是我是否可以在数据时间上使用任何常规的算术操作,只要我把结果保存在另一个数据时间中?比如说,如果X[]是一个日期时间的数组,而我想处理分钟数,我可以用Y=(X[17]+30)/60,只要Y是一个日期时间而不是一个长数?对吗?或者说,我可以取Y=(X[17]-X[16]+30)/60,因为如果X[17]是29mod 60,X[16]是30mod 60,那就不好了,如果我用第一种方法,它会认为它们相差2分钟。

哦,伙计,到目前为止,我所做的代码已经很长了,所做的只是读入数据,现在我必须通过更多的移动数据和插值来补偿数据跳过的分钟(或整个周末!),我不知道当我完成它的时候,这个火鸡的几率是多少,哈哈。所有这些都来自于一个matlab程序,它表明我终于有了一个可以战胜点差/佣金的交易方法,但把它付诸于实际操作是另一回事。

对于所有不是ydrol的人,好吧,我宣布你们是各自****比赛的赢家,所以恭喜你们,既然你们赢了,现在可以不在这个话题上发帖了。

 

Hmmmmm. I don't know if static_cast even exists in mql4, but can I just use any regular arithmetic operations on datetimes then, so long as I save the result in another datetime?

如果你的运算结果仍然是一个时间点(即仍然是一个自1970年以来的秒数),那么就把它保持为一个日期时间,否则你可以把它铸成一个长数或英数。(你不必这样做,但这样可以避免以后的混乱)。

与大家对着干没有用,只要改变方法就能得到你想要的帮助:)

 

在写了一些代码之后,我确实很难避免将有日期的算术结果作为输入保存到ints中。但是static_cast<long>理论上会像在C++中那样工作吗?我在文档中没有看到任何提及。

哦,顺便说一下,时区。是UTC吗?那本书只是一直在说从1970年1月1日0:00开始的秒数。我可以假设它是像UNIX时间一样的UTC,只是我们已经确定这里的 "datetime "变量和C++使用的至少有一些差异(例如没有毫秒)--承认它本身不是UNIX时间,但还是被称为 "datetime"--所以仅仅因为它表面上像UNIX时间,因为从1970年初开始,我不应该假设它是这样的。是否一定是UTC,还是每个经纪商都可以根据自己的时区有自己的偏移量,而我需要在代码中让它根据数据计算出一周的开始时间,调制成10080分钟?重点是,要知道交易开始和结束的时间,因为市场在这10080分钟中只有7200分钟是开放的,这样它就可以在周末临近时减少头寸,而不是在开始时就全速前进,或者更糟糕的是,根据一周结束和下一周开始之间的价格不连续情况做出激烈的交易决定。甚至在确定像波动率这样的信息时,对间断情况视而不见--我把波动率定义为1分钟后价格的均方变化--然后我把2分钟后价格的均方变化的1/4倍,3分钟后价格的均方变化的1/9倍,4分钟后价格的均方变化的1/16倍,然后把整个东西乘以1/(1+1/2+1/3+1/4)=0。48.

嘿,我还能说什么呢,我是来寻求帮助 的,而他们从一开始就对我很讨厌,也很敌视。如果有人要求帮助,我的做法是要么不给他们,要么给他们。如果我不知道别人问的问题的答案,我不会用闲聊来代替回答,如果我不想花时间正确回答问题,我也不会花时间嘲笑他们的问题,或者给他们一个无用的非答案。如果有人问了一个他们应该知道答案的问题,如果他们在地球上生活了超过一天,或者如果这个问题是反问句,特别是如果是为了侮辱某一群人,那么最后一个问题就有回旋余地。我是那种开门见山的人,我以一种针锋相对的道德准则来运作。我对人很有礼貌,直到他们对我很讨厌,然后我就不再有礼貌,我也对人很诚实,直到他们对我撒谎、欺骗和偷窃,然后我默认的公民行为准则就会被抛到窗外,我将撒谎、欺骗和偷窃作为交换,不会表现出怜悯或克制。这可能是看待世界的一种简单化的方式,但我很固执,不宽容。

但对你来说,感谢你的帮助。如果有什么我可以帮助你的地方,请问吧。不是说我假设你在寻找我可以帮助的东西。

 
zortharg:

在写了一些代码之后,我确实很难避免将有日期的算术结果作为输入保存到ints中。但是static_cast<long>理论上会像在C++中那样工作吗?我在文档中没有看到任何提及。

哦,顺便说一下,时区。是UTC吗?


它与时区无关。你不需要知道时区来回答3600,如果有帮助的话,就假设开始时间,1970年1月1日午夜和你感兴趣的时间都在同一个时区。
 

编辑:哎呀,正如有人指出的那样,datetime并没有特定的时区。这取决于你从哪里获得它! (这造成了不必要的复杂化,不像它最终基于的UnixTime那样!)。

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

与真正的UTC一样,Unix时间忽略了闰秒(见第一段),所以模数运算对分钟和小时都有效。

datetime - datetime = long (seconds duration) - 尽管就交易而言,在我所设想的大部分时间里,它都是一个int!

datetime +/- seconds(long) = datetime(other date)

datetime +/- seconds(int) = datetime(other date)

原因: