下载MetaTrader 5

请观看如何免费下载自动交易

有趣的脚本?
因此发布一个链接 -
让其他人评价

喜欢这个脚本? 在MetaTrader 5客户端尝试它

程序库

TesterBenchmark - MetaTrader 5程序库

| Chinese English Русский Español Deutsch 日本語 Português

显示:
131
等级:
投票: 18
已发布:
2017.11.16 09:08
\MQL5\Include\\MQL5\Experts\

当写不同的代码版本时,您可能需要评估它们在测试器中对 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 Software Corp. 撰写的俄文原文
官方代码: https://www.mql5.com/ru/code/18804

Chart Save Template Chart Save Template

这个脚本程序可以使用指定的名称来把图表设置保存到模板中。

Report Report

这个 MetaTrader 4/5 开发库可以使您根据交易历史生成报表。

Four_MA_Strength Four_MA_Strength

该指标根据四个移动平均显示趋势的强度和方向。

Mikahekin_HTF Mikahekin_HTF

在输入参数中带有时段选择选项的 Mikahekin 指标。