文章 "MQL5 中的统计分布 - 取最佳的 R" - 页 5

 
Renat Fatkhullin:
  1. 源代码中存在 MQL5 库,您可以将其代码直接内联到调用位置,最大限度地利用被调用位置的 const 环境。

许多标准函数是否也会包含在库中供内联?

 
Renat Fatkhullin:

这并不严重。

在 Wyne 下,甚至是 32 位。32 位 MT5 使用的是类似 MT4 的旧编译器。它比 64 位代码慢几十倍,而 64 位代码是由专门用于 64 位 MT5 版本的新编译器创建的。我们发布了一份报告,比较 32 位和 64 位 MQL5 程序的速度。

每个 MQL5 程序实际上包含两份编译代码:32 位用于旧系统以保证兼容性,64 位用于新系统。

我们已经完全放弃了 32 位编译器的开发,因为它没有意义,也没有未来。

因此,如果您想获得最高性能,只能使用 64 位版本的 MetaTrader 5。


顺便告诉那些使用 MT4 的用户--MQL4 代码的执行速度也比 64 位 MetaTrader 5 慢几十倍。

出乎意料的是......对我来说,这是最终重新考虑我的习惯并切换到 MT5 的真正重要原因。在此之前,我认为它....。
 
fxsaber:

许多标准函数也会被放入库中进行内联吗?

没错。

在接下来的几个版本中,我们就会实现这一点。我们将在编译过程中即时为程序添加函数源,这样优化器就能充分发挥其潜力。

尽量减少调用平台内核的次数对我们来说至关重要。

 
Реter Konow:
出乎意料......对我来说,这确实是我最终重新考虑自己的习惯并转用 MT5 的一个重要原因。在此之前,我认为它....。

如果您深入研究 MT4 和 MT5 内部流程(包括交易)的延迟,您就会远离 MT4。在流程的质量和整洁度方面存在着深渊。

我们对 MT5 性能和优化如此狂热是有原因的。这是一个巨大的技术优势。

 
Renat Fatkhullin:

R 用的是多次启动的最短时间,而不是第一次启动的最长时间

因此,"冷启动 "在这里并不能解释问题。即使在所有库代码都在 DLL 中的情况下。实际上没有什么需要预热的。

但可以解释的是

  1. 由于使用纯类型的 双倍数据,在动态对象上不存在 R 中的开销
  2. MQL5 中的编译器效率极高。看一下编译出来的 asm 代码真的很吓人。
  3. 源代码中存在 MQL5 库,这允许您在调用处直接内联它们的代码,并最大限度地使用被调用处的 const 环境。

    与动态链接库中未经优化的实现相比,编译器在这方面有很大的空间,因为动态链接库没有机会了解环境并进行调整。

这让我想起了 C++ 与 Lisp holivars 的对比--两者是一一对应的,只不过其中一个 "比较者 "几乎是 ++,而另一个是 Schema :-))它们只是根本不同的东西....
 
Renat Fatkhullin:

如果深入研究 MT4 和 MT5 内部流程(包括交易)的延迟,您就会远离 MT4。在流程的质量和整洁度方面存在着深渊。

我们对 MT5 性能和优化如此狂热是有原因的。这是一个巨大的技术优势。

现在我知道了。当然,即使有足够的语言兼容性,移植所有代码也并非易事,但我相信结果是值得的。我一直致力于提高效率,性能和速度差异问题一直是我非常感兴趣的问题。如果我能更早地了解这种差异,我早就会忘记速度较慢的平台了。感谢您提供的信息。
 
Maxim Kuznetsov:
这让我想起了 C++ 和 Lisp 的 holivars,两者如出一辙,只不过一个 "比较 "的是几乎 ++,而另一个则是过度生长的 Schema :-)它们只是本质上的不同.....。

这只是在实践中和理论上证明了一些交易者在主题https://www.mql5.com/ru/forum/96176/page10 中表达的立场的谬误(在某处提到过):

  • 在 R 中,所有库都经过优化,速度尽可能快
  • R 中有许多优化,包括英特尔线程构建模块等。


事实证明并非如此。在最简单的函数中,事实证明这是一种消耗,MQL5 的效率更高。此外,我还从理论上证实了它更快的原因。除了实际结果之外。

Используете ли вы CExpert при создании роботов?
Используете ли вы CExpert при создании роботов?
  • www.mql5.com
Да Нет, пишу класс робота с нуля Нет, у меня есть свой базовый класс робота Нет, я не использую ООП Хочу посмотреть результат...
 
Renat Fatkhullin:

如果深入研究 MT4 和 MT5 内部流程(包括交易)的延迟,您就会远离 MT4。在流程的质量和整洁度方面,MT4 是一个深渊。

交易在某种程度上被遗忘

交易、自动交易系统和交易策略测试论坛

错误、错误、问题

fxsaber, 2016.10.09 09:39 pm

MT5-OrderSend 并非完全同步 - 与交易环境不同步。这意味着历史读数与实际情况不符。

任何超时都是不可能的。这个问题没有可靠的解决方案,因为同步问题必须在终端层面而不是服务器层面解决。

事实上,MT5 用户面临着 MT4 桥接开发人员所面临的问题。

如果发送了订单发送(OrderSend),就应该记住(这是一个潜在漏洞)已经发送。然后忽略当前的历史记录(交易环境),直到相应的信息到达 OnTrade。一旦到达,就不需要 "忘记"。

如果没有 FORGOTTEN 数据,您就可以信任历史记录,就像在 MT4 中一样。

MT4 订单发送完全同步。

是的,剩下的问题就简单多了。

 
fxsaber:

不知何故,交易被遗忘了

您将异步进程与希望看到同步混为一谈了。

OrderSend 的任务是尽快发出请求并得到确认。系统可以完美地完成这项任务。

但是,获得已完成的交易/交易,将其记入历史记录,然后根据您的要求将其提供给您--这是另一个流程,它无权拖慢订单发送的工作。

这就是一切正常的原因--您迅速执行交易,然后在一毫秒内(实际上更早)在邻近的数据包中获得票据更新并进行处理。


至于其他简单得多的部分,事实证明也存在问题

编写一个编译器,尤其是实现邪恶的 C++ 模板是很简单的事情????。

无论如何,非常感谢 A100 的耐心--他在捕捉 bug 方面提供了很大帮助。


但这已经偏离了主题,如果您想讨论这些问题,请在本地主题中进行。这里是关于 R 的。
 
与本主题无关的评论已移至"如何在 MT5 中正确使用订单发送功能"。