Одной из основных проблем с MQL5 до сих пор было удаление встроенных функций для работы с таймсериями. Несмотря на то, что такой подход расширил для программистов возможности разработки, он также замедлил работу из-за обязательного шага по созданию и удалению новых ячеек памяти каждый раз, когда требуется доступ к данным таймсерии. Рассмотрим...
MT5 运行速度慢的主要原因是模仿了完整的交易环境。在绝大多数智能交易系统中,没有必要进行如此精确的模拟。对于此类智能交易系统,一个极佳的解决方案是切换到简化测试模式,对交易环境进行简单模拟。不过,目前还没有这种可能性。但是,如果您自己编写简化策略测试器,并在数学计算 模式下运行,优化速度会非常快! 这就是我建议每个想大幅提高 EA 优化速度的人都应该考虑的问题。
在 CStrategy 中,交易操作 直接通过 CTrade 执行。也就是说,CStrategy 完全没有自己的交易逻辑。在测试的智能交易系统中,除了在 N 秒后开仓/平仓外,我没有看到任何其他交易逻辑。CStrategy 也不存储历史仓位,因此很遗憾,这个例子无法在 CStrategy 中实现。
CTrade 也不存储历史仓位,但这并不妨碍我们通过它实现变体。
OOP 代码比程序代码慢这一事实并不能说明什么。让我们直奔主题:哪些 CTrade 方法是瓶颈?为什么?对这些方法的剖析能说明什么?如何在测试器中识别速度较慢的代码段?
我还没有分析 SB 刹车的原因,但我不认为这是 OOP 的问题,因为 MT4Orders 也是通过 OOP 编写的,甚至是最基本的 OOP。在向 BOD 提出要求后,开发人员加速了 SB。我不知道他们是调整了 SB 本身还是编译器。
我自己首先分析绝对刹车,然后分析相对刹车。
MetaTrader 5 具有根据历史数据分析智能交易系统的出色功能。但是,除了工作速度慢(在可视模式下)之外,最终结果是以相对单位提供的,即无法比较绝对性能。
MT5 运行速度慢的主要原因是模仿了完整的交易环境。在绝大多数智能交易系统中,没有必要进行如此精确的模拟。对于此类智能交易系统,一个极佳的解决方案是切换到简化测试模式,对交易环境进行简单模拟。不过,目前还没有这种可能性。但是,如果您编写自己的简化策略测试器,并在数学计算 模式下运行,优化速度就会非常快! 这就是我建议所有想大幅提高 EA 优化速度的人考虑的问题。
通过自定义符号,你可以在完全模拟的情况下实现数量级的提速。事实上,即使是现在的自定义符号测试版模式也可以实现这一点。我稍后会做的。
MT4Orders:
MQL5 结果比用相同的 MQL5 编写的库要慢!我开始调查,并通过以下替换找到了原因
Expert Advisor 的 MQL5 变体开始显示这种性能。
用 PositionGetTicket 取代PositionSelect,使回测速度提高了 7%!
MT4Orders 与经过最大优化的纯 MQL5 相比,落后不到一个百分点。
名额分配如下
我稍微调整了一下 SB 本身(Expert Advisor 使用的 SB 部件),但没有改变其功能和通用性。结果不是 84%,而是 97%。
使用 SB 的用户请注意加速的潜在可能性。
比较以不同方式转换的同一 MT4 多货币智能交易系统的性能变得非常有趣。
完全转换
和手工(快速)转换
交易、自动交易系统和交易策略测试论坛。
智能交易系统:价差器
fxsaber, 2016.09.03 11:18 AM.
性能测量结果。
正式版
手工版
工匠版输得很惨。原因很简单--如果您想要快速的时间序列,就不能正面转换 MT4 时间序列。
交易、自动交易系统和交易策略测试论坛。
库:CPrice
fxsaber, 2016.08.28 10:36 AM
看看这样的选项
在 MT4 中,您可以调用 Open[bar]、High[bar]、Time[bar]、Volume[bar] 等。还可以调用 iHigh(...)、iClose(...) 等。
您需要使用(不仅在灌木丛中,而且在正式变体中)这样的 解决方案。
而手工操作则损失惨重。原因很简单--如果想要快速的时间序列,就不能正面转换 MT4 时间序列。
结论错误。刹车的原因完全不同。让我们在每种 MT5 变体中只插入一条线
并再次测量
全功能版快 67%,手工版快 108%!总之,现在的差距很小--全功能版比手工版快 ~11%。看来,原因在于 OOP 的开销。
但这并不是主要原因。通过一行代码,我们成功地提高了 EA 的速度!而这是在优化器中,Comment 在其中不起任何作用。
关于交易、自动交易系统和测试交易策略的论坛
库:TesterBenchmark
fxsaber, 2017.07.24 14:13
交易 SB 比纯 MQL5 慢 1.5 倍!
这是在夏天与 SD 应用程序一起编写的。我很惊讶,一切都很平均!这符合逻辑吗?几乎所有的 EA(使用 SB)都在速度上失败,在云中吃钱,等等,怎么能说测试仪速度超快呢?显然,这很正常。
我简化了源代码,删除了历史记录和 MT4Orders 的工作。我只留下了纯粹的 MQL5 和 SB
SB 结果
纯 MQL5 的结果
都是一样的 1.5 倍!但傻瓜 们不在乎,让我们继续使用超级 SB。
同样是 1.5 倍!但笨蛋 们不在乎,让我们继续使用超级 SB。
这种 SB 调整
奇迹般地加快了 SB 顾问的速度。复杂吗?
老实说,在不改变 API 逻辑的情况下,交易 SB 几乎应该完全重写。它的任何部分都是糟糕的。