支持MG4脚本和顾问的测试人员 - 页 11

 
Renat:

CopyXXX的速度 与iClose/iOpen/iXXXX功能相同。只有iXXX一次返回一个元素,而CopyXXX返回许多元素,因此效率更高,速度更快

也许,您没有考虑到,在每个tick处理程序启动之前, MT4会 本地图表的所有历史记录强行复制到 本地(缓存)EA的市场环境中。而这是非常昂贵的,尽管我们有一种方法可以经济地更新这些信息。MQL4中的特殊函数RefreshRates 会导致强制刷新本地图表的缓存和历史。

调用CopyXXX的效率要高得多,它有一个非常精确和准确的机制来缓存以前请求的数据。例如,你不需要在每次勾选时重新请求深层历史,而是将其存储/写入本地,并尽可能快地访问它。

如果我们比较一下 "直接"(实际上不是直接访问)访问Open/High/Low/Close的老方法和使用本地数组double local[xxxx]的工作,后者要快很多倍。因此,最好是复制到自己本地,然后在本地快速访问重复查询的数据。

什么是 "勾选程序"--像OnTick这样的自定义函数?为什么要复制整个历史,而不是只复制出现的数据?
 
Vinin:
这不是一个指标。
在这里 给了一个OOP指标的链接。
 
C-4:
什么是 "勾选程序"--像OnTick这样的自定义函数?为什么要复制整个历史,而不是只复制出现的数据?

是的,OnTick/OnStart。

我认为这对很多人来说是一个启示,在MT4中直接访问本地图表并不是真正的直接。有双倍的内存消耗和同步损失。

幸运的是,高速缓存的刷新是经济的,但它仍然会造成系统成本。在MT5中,我们完全摆脱了本地缓存,在调用OnTick/OnStart前的系统开销较少。

 
Renat:

是的,OnTick/OnStart。

我认为这对很多人来说是一个启示,在MT4中直接访问本地图表并不是真正的直接。有双倍的内存消耗和同步损失。

幸运的是,我们有一个稀缺的缓存更新,但它仍然给出了系统成本。在MT5中,我们完全摆脱了本地缓存,OnTick/OnStart调用前的系统开销较少。

一年前,我们正在讨论MT4/MT5测试器的性能 问题。在类似的测试条件下,MT4的标准EA "MovingAverage "在1分钟内完成了一次运行,而在MT5中,它在2:34就完成了。为什么在时间尺度上有差异?首先想到的是MT5的 "模块化 "和MT5在运行过程中要拉动的大量交易环境。
 
C-4:
一年前,我们讨论了MT4/MT5测试器的性能。在类似的测试条件下,MT4的标准EA "MovingAverage "在1分钟内完成了一次运行,而在MT5中则需要2:34。为什么在时间尺度上有差异?首先想到的是MT5的 "模块化 "和MT5在运行过程中要拉动的大量交易环境。

模块化、外部流程和更好的环境建模,为多货币执行量身定做。