文章 "从 MQL4 迁移到 MQL5" - 页 2

 
文章很有意思,谢谢。
 
Quantum:

可能会出错,材料相当大。

移植的主题(更确切地说,使用 MQL4 方法编写仿真器类的主题)在另一篇文章中进行(我们希望它能完成)。 在阅读材料的过程中,我们要求作者以参考书的形式撰写一篇文章,涵盖所有 MQL4 函数(交易除外 - 您很快就会看到它们的解决方案之一),在 MQL5 中提供每个函数的类比,总之,将所有内容放在一起,以便重写 MQL4 程序的人可以快速找到类比。关于不受约束的愿望,如果我们谈论的是所考虑的部分的数量--我们坚持要涵盖所有的功能(结果超过了 250 个)。

至于对某些部分的功能进行比较--这并不完全是一种比较。即使是相同的函数,也有必要进行类比。对于所有函数来说都是如此。因此,看似有比较,但从比较中可以看出,例如数学函数是相同的。顺便提一下,作为建议,在每一节的开头提到这一点可能会有帮助,这是需要注意的。

由于这个原因(仿真器函数的架构),作者在实现中使用了一些非显而易见的东西(例如,对于 iLowest/iHighest 全局 Open[]...High[]...,事先进行了全局声明,并在 OnInit 中设置为 AsSeries),这在仿真器中是隐含的,自然,为了实现函数的通用性,最好使用本地数组。

至于使用技术指标,可能会有很多问题,使用技术指标 不应像在 MQL4 中那样--最好是在 OnInit 中手动创建技术指标 并引用描述符,而不是每次都在本地函数中创建技术指标。但作者建议的方法也行得通,因为终端不会立即销毁指标。因此,这其中有很多微妙之处。

重要的是,现在有了一些可以讨论的东西,如果您发现错误(包括由建议的函数结构引起的错误),请提出您的变体。

如果这是一本参考书,那就让它成为一本参考书吧!.....!

否则就不是鱼和肉


为什么全局数组用于中间计算?

可以在函数内部为此类计算分配空间。为什么要放置引用?

在某些函数中,它们被修改为你的 atas。

又是这个问题!!在函数内部修改全局缓冲区就是 atas!

好吧,虽然在我写这篇文章的时候已经解决了这个问题,但我相信在整篇文章中都会出现这种风格。

当 mcl4 价格结构访问这些数组时,会发现.....


接下来我们有 6 节比较!

mcl4 函数与 mcl4

只是比较。


然后突然开始

函数替换表。

2 个部分


然后再次比较

3 个部分


然后是替换

函数!

然后再次....

表格中首先是 µl4 函数,然后是 2 种单元格。

其中包含一个改写为 mcl5 的替代函数。

或者说,2 种细胞,只是一个相同的函数。

整篇文章都是这样......那么,这是转到 µl4 还是参考书?

别管它了!


还有很多缺陷会导致无法工作。

因为我已经学到了很多关于在 µl5 数组中存储数据的特殊性。

在许多函数中,确定数组的大小是必要的,甚至可以说是必须的、

有些函数还必须确定索引的方向。

因为 mcl4 和 mcl5 环境下的数据处理不同。

因为我已经感觉到它会编译,但不会启动。


当然,您所说的这种指南确实非常有用。

文章中有几个有趣的观点

但鱼和熊掌不可兼得。


只留下一个函数和它在 mql5 上的类似功能,不做替换。

这将有助于将 mql4 指标完全重写为 mql5 指标。

所有参考文献!

让这些粗糙的替代品见鬼去吧。


当然,很抱歉提出如此严厉的批评,但在人们最期待的时候发布这样一篇原始文章。

还出现如此严重的错误。

我们能从中学到什么....

显然是异端邪说......


最后,为什么没有附件?

如果这么多的功能都被移动了,为什么没有 .mqh 文件?

为什么没有 .mqh 文件?特别是其中的 250 个...逐一拷贝以转移 mqh4 ....

这再次表明作者在刻意隐瞒什么。


致 Vasily。

 
CoreWinTT:
...

因为我已经能闻到它正在编译,但却无法启动。

...

事实上,编写一个编译无误的函数并不意味着可以放心地将其加入代码中。最大的问题是翻译程序逻辑。这就像翻译诗歌:你逐字翻译了它,但它并不押韵。这就是为什么仅仅翻译函数是不够的。从一种语言转换到另一种语言的任务并不像看起来那么简单。

我认为有一种解决方案,即仿真器具有简单明了的机制,可将指标、脚本和智能交易系统转移 到 MQL5。目前,我正在研究。

 
是的,酷 emule 将 =)
 
CoreWinTT:

如果这是一本旅游指南,那就让它成为一本旅游指南吧!!!这不是鱼和薯条!

这不是鱼和薯条。

....

瓦西里,感谢您的建设性批评,我希望作者能考虑到读者的愿望,提供不使用全局数组的自给自足函数的变体。

这篇文章的目的是作为参考--提供 MQL4 和 MQL5 函数之间的对应关系。

这可能是作者试图隐藏一些东西的原因:最少的解释、大量的表格、没有完整的使用示例。但这是这一类型的特点。

使用函数有许多微妙之处,应结合实例详细考虑细节,但这些是其他文章的主题 - 我们希望它们会出现。从 MQL4 迁移的主题远非这篇文章所能穷尽,许多有趣的资料正在准备中,不久就会发表。

 
DC2008:

我们应该这样理解:实现过程过于复杂,而且不合理。毕竟,我们的目标是完全放弃 MQL4 函数。

没错。问题的关键在于解释由于系统架构发生了哪些变化,现在应该使用哪些(其他)工具。由于本资料是作为参考书提供的,因此必须用 "解决方案 "来填充其中的所有单元格。如果没有类似的方法,那么就有另一种方法。
 
marketeer:
没错。问题的关键是要说明,由于系统结构发生了哪些变化,现在应该使用哪些(其他)手段。由于这些材料是以参考书的形式提供的,因此必须用 "解决方案 "来填充其中的所有单元格。如果没有类似的方法,那就另辟蹊径。

至少很难读完一本关于每个指标的书。

就连我自己也无法做到。

 
marketeer:
...重要的是要用 "解决方案 "填满所有方框。没有类比意味着有另一种方法。

添加第 17 节,提及 "解决方案"。

建议先注意哪些 "无类比 "的特征,因为并非所有特征都那么相关和必要。我会尽量修改。

 

17 很好。关于第一轮--这不是我能评判的。将 mql4 转换为 mql5 的每个人都有自己的队列。为了不遗漏任何东西,我会简单地从上到下依次填写,从 AccountFreeMarginCheck、AccountFreeMarginModeArrayCopyRates、ArrayDimension 等开始(只剩下 9 个了)。

 
Quantum:

亲爱的瓦西里

感谢您的意见,第 18 节的功能已经更新。请查看当前版本。

作者做了大量工作,可能会有错误,我们会一起修正。

需要使用 TFMigrate(int tf) 函数来替换 MQL5时间框架的 正确。例如,在 MQL4 中,PERIOD_H1 常量的数值是 60,而在 MQL5 中,PERIOD_H1 的数值=16385,即 TFMigrate(60)=16385。

我认为,在迁移条件下使用 TF 需要两个函数:

1.将秒数转换为 TF - 比如ENUM_TIMEFRAMES SecondToPeriod (int Value);

2.将周期转换为秒--例如int PeriodToSecond(ENUM_TIMEFRAMES Value)。


这是我在迁移模块一开始就成功做到的(还有一个 DLL 选项)。


PS

为了最大限度地与 MQL4 兼容,我个人删除了所有非标准的周期