文章 "交易员生存技巧: 由指标制作的快餐" - 页 13

 
Vladimir Karputov:

- 你有一个很好的代码和对测量结果的描述。

我没有机会查看代码

 

调用指标 时,速度降低了 40%。

MQL5 模式

i = 0 Pass = 0 OnTester = 7.679 s.: Count = 9986677, 1300517.9 unit/sec, Agent = C:\Program Files\Alpari Limited MT5\Tester\Agent-127.0.0.1-3000 build = 1755
i = 1 Pass = 1 OnTester = 7.645 s.: Count = 9986677, 1306301.8 unit/sec, Agent = C:\Program Files\Alpari Limited MT5\Tester\Agent-127.0.0.1-3000 build = 1755


MQL4 样式(无缓存)

i = 0 Pass = 0 OnTester = 14.117 s.: Count = 9986677, 707422.0 unit/sec, Agent = C:\Program Files\Alpari Limited MT5\Tester\Agent-127.0.0.1-3000 build = 1755
i = 1 Pass = 1 OnTester = 14.067 s.: Count = 9986677, 709936.5 unit/sec, Agent = C:\Program Files\Alpari Limited MT5\Tester\Agent-127.0.0.1-3000 build = 1755


MQL4 样式(带缓存)

i = 0 Pass = 0 OnTester = 10.077 s.: Count = 9986677, 991036.7 unit/sec, Agent = C:\Program Files\Alpari Limited MT5\Tester\Agent-127.0.0.1-3000 build = 1755
i = 1 Pass = 1 OnTester = 10.104 s.: Count = 9986677, 988388.5 unit/sec, Agent = C:\Program Files\Alpari Limited MT5\Tester\Agent-127.0.0.1-3000 build = 1755

有缓存变量比 MQL5 风格变量慢 32%。至于无缓存版本,则无法达到上述 40% 的速度。和以前一样,它的速度慢了一倍。但是,在利润方面的巧合是肯定存在的。

 

对不起,我不明白 Metaquotes 为什么允许发表这篇文章。

mql5 中指标句柄的主要优点是从缓冲区获取多个值的能力,您可以完全丢弃它。而且,提供的代码在大多数情况下效率较低!我甚至没有提到不检查函数 返回值的不良编码实践。

这篇文章毫无用处,甚至是最糟糕的。不要惊讶人们会继续使用 mql4。

 
Alain Verleyen:

抱歉,我甚至不明白 Metaquotes 为何允许发表这篇文章。

mql5 中指标句柄的主要优点是从缓冲区获取多个值的能力,您可以完全丢弃它。而且,提供的代码在大多数情况下效率较低!我说的甚至不是不检查函数 返回值的不良编码实践。

这篇文章毫无用处,甚至是最糟糕的。不要惊讶人们会继续使用 mql4。

我不认为你是对的。这篇文章首先帮助受教育程度不高、头脑灵活的业余程序员了解 mql5 与 mql4 相比对指标的处理,其次向他们展示了如何以他们在 MQL4 中习惯的方式使用指标。
 

如果我在 MQL5 中通过所有可用的工具循环运行一个简单的 iVolume,那么平台就会冻结,大量的copybuffer 调用 就像对操作系统的 ddos 攻击一样,它就会跳闸,而如果我在 MQL4 中执行相同的过程,它就会像一包热熔黄油一样平稳运行。

在同一台机器上,这告诉了我更多我需要知道的东西。

结合来自社区的所有信号和噪音,我认为我的结论一直都是正确的。

 
仅标记
 

问题是:为什么每次读取指标值时都要复制缓冲区?缓冲区就在那里,已经计算过了,为什么我不能直接访问它的值呢?

这是不合理的!

我只能直接访问指标缓冲区,反复复制只会降低性能。

我真不明白 Metaquotes 为什么要采用这种工作方式。

CopyBuffer(...) vs buffer[i] ?

 
ludoz:

问题是:为什么每次读取指标值时都要复制缓冲区?缓冲区就在那里,已经计算过了,为什么我不能直接访问它的值呢?

这完全是无稽之谈!

我只能直接访问指标缓冲区,反复复制只会降低性能。

我真不明白 Metaquotes 为什么要采用这种工作方式。

CopyBuffer(...) 与缓冲区[i]?

因为这并不简单。指标运行在一个线程上,EA 运行在另一个线程上(您可以有多个指标/多个 EA)。如果你对 handle/CopyBuffer 这样一个简单的过程有意见,相信我,你不会想继续使用多线程应用程序。

mql5 提供了通用解决方案,能够处理大多数 "正常 "情况。如果您的项目中存在特殊问题,总有解决方案。

 
现在怎么都是MQL5了      可是大部分人还用的mt4哦