感谢作者的相关文章。我也一直在思考这个问题,但没有读到这篇文章。
作者提醒说,你应该仔细监控哪些工具在运行什么。鉴于要编写可在任何货币对上运行的智能交易系统,这有点困难。您必须跟踪 EA 在哪个货币对上运行,并调整平行流的货币对。
在这方面,我想问一个问题(与其说是问作者,不如说是问 MQ 开发人员):是否 有可能引入自定义工具?
这样我们就可以解决很多任务,从创建用于并行计算的空 图表,到创建我们自己的刻度线图。
至于数据传输缓冲区,我建议您创建一个全局结构,并通过该结构传输不同类型的数据。我的经验告诉我,以数组的形式返回计算结果并不总是很方便,往往还需要跟踪一些计数器,而且为了避免混淆名称,将所有数据以结构的形式传递会更方便,同时还可以将变量作为结构的成员 来引用。顺便说一下,同一个结构也可以包含数组。
- www.mql5.com
在这方面,我想问一个问题(与其说是问作者,不如说是问 MQ 开发人员):是否 有可能引入自定义工具?
也许我会重复在这里已经表达过的关于自定义工具的想法,但我想补充....
现在,EA(指标、脚本)只在特定符号上启动。它可以访问其他符号的当前数据,但 OnTick 事件只针对宿主符号生成,而 Expert Advisor 是在宿主符号的图表上启动的。
或许可以引入创建自己的"自定义工具 "的 可能性,这就像一个附加组件。 它就像智能交易系统的上层建筑,能够接收和处理来自多个符号的刻度线, 并将结果传递给在各自线程中处理特定符号的程序(程序或智能交易系统的一部分、指标)。这极大地促进和推动了 "多货币 "的创造。而对象编程的概念本身也推动了它的发展。如果您使用多个符号,为什么要将智能交易系统与特定符号绑定呢?
附注:或者在SymbolInf... 函数中添加类似 "此符号的新刻度已到达 "的事件也不错。
现在,Expert Advisor(指标、脚本)只在特定符号上启动。它可以访问其他符号的当前数据,但 OnTick 事件只针对宿主符号生成,而 Expert Advisor 是在宿主符号的图表上启动的。
很难理解为什么开发人员要重复使用这种拐杖。毕竟,在开发 MQL5 架构时,已经存在一个非常强大的 API,其中onTick 会触发任何已签名符号的任何 tick。
总的来说,我不明白为什么他们选择了这样一种架构,却很少从现有的 API 中汲取精华,而现有的 API 在架构方面是非常称职 的。
MQL5 开发人员的行为就像是在重新发明轮子:"我们会考虑这个功能的","是的,你是对的,我们会添加的",等等。
我们曾多次提到,开发架构花费了一年多的时间。因此,他们决定采用这种方式而不是其他方式,是有一定道理的。
附注:也许原因在于 MetaTrader 开发人员在经纪和交易方面经验不足,但在编写平台方面经验丰富。相反,其他开发人员则拥有丰富的实际经纪和市场交易经验。
附注:我写的是我的想法,而不是猜测。批评总是比创造容易。尽管开发人员有明显的失误,但他们值得尊敬。
或许,引入创建您自己的"自定义工具 "的 可能性是合乎逻辑的,该工具就像 Expert Advisors 的附加组件,能够接收和处理来自多个符号的刻度线,并将结果传递给程序(程序的一部分或 Expert Advisors、处理特定符号的指标) 。它就像 EA 的上层建筑,能够接收和处理多个符号的刻度, 并将结果传递给在各自线程中处理特定符号的程序(程序的一部分或 EA、指标)。这极大地促进和推动了 "多货币 "的产生。而对象编程的概念本身也推动了它的产生。如果您使用多个符号,为什么要将智能交易系统与特定符号绑定?
附注:或者在 SymbolInf... 函数中添加类似 "该符号的新刻度线已到达 "的事件也不错。
谢谢。正是这篇文章促使我得出上述结论。但正如您自己在这篇文章中所注意到的:
使用提示:
1.多币种勾选处理程序的这一变体相当耗费资源。您可以使用延迟变量增加脚本中接收刻度的延迟时间,从而减轻处理器的负担。但同时也可以跳过一定数量的刻度。
如果将延迟时间增加到 1 秒,就可以使用 OnTimer() 获得相同的效果。遗憾的是,它也有同样的缺点。
同时,终端会不断接收和处理来自 "市场窗口 "的符号刻度。我们可以访问这些刻度,但却没有更新这些数据的信号。这就是为什么我们必须人为地进行检查。MQL5 的优势在于可以做到这一点。但我们同意,如果能在终端函数中嵌入一个解决方案,那将会更加优雅。让它成为一个单独的事件,如 OnTrade(),开发人员可以自行决定使用(或不使用)。
关于专家.... 上的 "自定义工具 "或上层建筑我意识到这是一种 "梦想",应该在设计阶段就考虑到......真遗憾!
谢谢。正是这篇文章促使我得出了上述结论。但正如你自己在这篇文章中指出的那样:
使用提示:
1.多币种勾选处理程序的这一变体相当耗费资源。您可以使用延迟变量来增加脚本中接收刻度的延迟时间,从而减轻处理器的负担。但同时您也可以跳过一些刻度。
如果将延迟时间增加到 1 秒,就可以使用 OnTimer() 获得相同的效果。遗憾的是,它也有同样的缺点。
同时,终端会不断接收和处理来自 "市场窗口 "的符号刻度。我们可以访问这些刻度,但却没有更新这些数据的信号。这就是为什么我们必须人为地进行检查。MQL5 的优势在于可以做到这一点。但我们同意,如果能在终端函数中嵌入一个解决方案,那将会更加优雅。让它成为一个单独的事件,如 OnTrade(),开发人员可以自行决定使用它(或不使用)。
关于专家.... 上的 "自定义工具 "或上层建筑我知道这只是一个 "梦想",应该在设计阶段就考虑到......真遗憾!
好的现在就等开发人员来听听我们的意见了。如果这个插件能同时包含线程管理功能就更好了。
这样就可以在独立的线程中运行每个处理过程。或许还能在处理当前刻度的同时处理新的刻度。
有用的文章。它打开了新的视野。
我有一个问题:OnTick()函数 能否变成一个带参数的函数,如 OnTick(EURUSD),以便在一个智能交易系统中并行处理来自不同交易工具的刻度?当然,要在单独的线程(单独的内核)中处理单参数函数的每个实例。
- www.mql5.com
新文章 MetaTrader 5 中的并行计算已发布:
在人类的整个历史长河中,时间都是极其宝贵的,因此我们努力避免不必要的时间浪费。如果您的电脑配备了多核处理器,本文将告诉您如何为“EA 交易”的工作提速。此外,实施建议的方法不要求您掌握 MQL5 以外的其他语言的知识。
作者:Andrew