- 显示:
- 1300
- 等级:
- 已发布:
- 2017.11.16 09:08
-
需要基于此代码的EA交易或指标吗?请在自由职业者服务中订购 进入自由职业者服务
当写不同的代码版本时,您可能需要评估它们在测试器中对 EA 交易的总体效能的影响。这使您了解与其他程序相比,代码优化得如何,并且为进一步快速优化 EA 交易提供先决条件。这种方法使我们可以识别出 EA 效能中的“瓶颈”。
MetaTrader 5 提供了一个用于在历史数据上分析 EA 交易的很好的函数,但是它有些不足: 它很慢 (在可视化模式中), 并且最终结果是以相关单位表示的,也就是说,它不能从绝对角度上比较效能。
另外,在 MetaTrader 5 中, 即使不在可视化模式下运行一次,EA也是在一个局部代理中执行的。有时候,测试时间的大部分都是用在终端和对应的局部代理同步上面。所以,时间数据构成了下面的内容
核心1 EURUSD,M1: 3387955 个分时, 生成了 52608 个柱. 环境同步在 0:00:01.389内完成. 测试通过在 0:00:09.422 内完成(包含分时预处理时间 0:00:00.187). 核心1 EURUSD,M1: 从登录到停止测试总经过时间为 0:00:10.811 (包括 0:00:01.389 的时间用于历史数据同步)
这对表现净值EA/测试器效能表现得很不好,并且在不同的运行中可能差别很大。
策略测试器的净运行时间是从第一个分时时间(第一个OnTick)直到测试时间段的最后分时. 在这个时间间隔之后, 测试器会调用 OnTester (之后是 OnDeinit).
在策略测试器中测试运行的净时间
这个开发库允许加入一行到EA代码中
#include <TesterBenchmark.mqh>
并且从记录中获得测试器的净数据。
核心 1 2017.07.21 23:59:59 时间段 = 8.842 s., 计数 = 3387955, 383166.1 单位/秒 核心1 EURUSD,M1: 3387955 个分时, 生成了 52608 个柱. 环境同步在 0:00:01.389内完成. 测试通过在 0:00:09.422 内完成(包含分时预处理时间 0:00:00.187). 核心1 EURUSD,M1: 从登录到停止测试总经过时间为 0:00:10.811 (包括 0:00:01.389 的时间用于历史数据同步)
另外,如果在测试器中您从单次运行切换到优化模式 (不需要为 MetaTrader 5 指定优化范围), 开发库将会运行指定的次数,并且将会生成测试器测试效率报告。
------ OnTesterInit i = 0 Pass = 0 OnTester = 8.687 s.: Count = 3387955, 390002.9 unit/sec, Agent = C:\Program Files\Alpari Limited MT5\Tester\Agent-127.0.0.1-3000 i = 1 Pass = 1 OnTester = 8.702 s.: Count = 3387955, 389330.6 unit/sec, Agent = C:\Program Files\Alpari Limited MT5\Tester\Agent-127.0.0.1-3000 iMin = 0 Results[iMin] = 8.687s. iMax = 1 Results[iMax] = 8.702s. Amount = 2 Mean = 8.694 s. - 83.89% OnTesterDeinit ------ Interval = 20.729 s., Count = 0, 0.0 unit/sec
在这种情况下,很明显可以看到在同一个本地代理开始了两次。显示出最小值,最大值和平均计算时间。也显示了总的优化时间 (间隔)。百分比特征 (83.89%) 显示了总优化时间占测试器平均纯运行时间的多少 (考虑了所需的与代理同步的时间).
OnTick 分析
通过加入一行代码
#define PROFILER_OnTick // 度量所有 OnTick 执行的净时间,可能轻微减慢总体的运行 #include <TesterBenchmark.mqh>
您可以看到,在 OnTick 执行上花费的时间,没有考虑到模拟交易环境,效能,等等。
------ OnTesterInit i = 0 Pass = 0 OnTester = 9.540 s.: OnTick Profiler: Count = 3387955, Interval = 8.079 s., 419359.4 unit/sec , Agent = C:\Program Files\Alpari Limited MT5\Tester\Agent-127.0.0.1-3000 i = 1 Pass = 1 OnTester = 9.471 s.: OnTick Profiler: Count = 3387955, Interval = 8.029 s., 421956.9 unit/sec , Agent = C:\Program Files\Alpari Limited MT5\Tester\Agent-127.0.0.1-3000 iMin = 1 Results[iMin] = 9.471s. iMax = 0 Results[iMax] = 9.540s. Amount = 2 Mean = 9.505 s. - 98.86% OnTesterDeinit ------ Interval = 19.231 s., Count = 0, 0.0 unit/sec
实例
这个库在头部提供了一个例子EA (MQL4/5), 这有助于了解这个开发库的实际应用。
#include <TesterBenchmark.mqh> // 如果下面两行都注释掉,那么交易逻辑就是使用 MQL5 - trade API 来写的 // 否则,不注释的代码行就是使用了 API 封装 // TesterBench 三个 API 中的每个的效能. // #include <MT4Orders.mqh> // https://www.mql5.com/en/code/16006 // #include <Trade\Trade.mqh>
由MetaQuotes Ltd译自俄语
原代码: https://www.mql5.com/ru/code/18804