文章 "针对初学者以 MQL5 编写“EA 交易”的分步指南" - 页 31

首先我想说的是,我读了这篇文章并复制了代码,因为我想学习 MQL5 编码。其次,我觉得我学到了很多东西,现在我已经编写了 7 个 EA 和一些指标。因此,我觉得我已经在学习的道路上走得很好,以至于我可以编写自己的想法。


此外。我对策略测试器 非常好奇。起初我认为它太基础了,不可能成功。但事实并非如此。它可以工作。但是。就我而言,它只对有极大耐心的人有效。因此,我在美元兑加元的日线时间框架上进行了测试,并优化了止盈、止损和 ADX 周期。简而言之就是将 ADX 放在中间。高于 29,低于 60。就可以了。止盈。尽可能高。在 300 和 500 之间。止损。肯定要少很多。经常出现的数字是 155 或 30。然后就是大问题了。我从 2019 年一直测试到 2025 年初。在最高 ADX 设置下,交易次数从 75 次到 45 次左右不等。我查看了其中 5 次测试的图表。它在 0 附近徘徊,直到 2024 年。然后,所有收益都出现在最后一年。我查看的利润系数从 1.77 到 2.61。到处都是问题。所有空头都亏损了。86% 的多头获利。很多交易持续时间很长。一般都超过 10 天。最长持有时间为 3440 小时。平均为 846 小时。我觉得回报率也会很高,但谁会想在 6 年后只做不到 20 笔交易呢?


我花了好几天时间才完成所有 33000 种组合。现在我将进一步测试,大大减少任务量。我不需要 ADX 值超过 55。止损 30 也太低了,即使我也看到了很多盈利。最后一点。我在书上看到,可以将多台个人电脑/笔记本电脑连接到局域网中以提高速度。我建议这样做。

我同意,验证不应仅限于选择最佳优化结果。我还有另一个顾虑,即验证过程本身可能会导致过拟合。

例如,如果我们在看到结果后反复调整前向窗口、蒙特卡洛假设、参数扰动范围或交易成本假设,最终可能会导致对验证过程本身进行优化。

我认为更稳妥的做法是:在查看最终的“出样本”(OOS)结果之前先定义好验证方案,然后保留一段完全未被修改的最终周期,且仅使用一次。

对于自适应专家顾问(EA),我还想知道,状态检测参数是否应该与交易参数分开进行验证。有人测试过这种方法吗?

Erlend Christiansen #:

首先我想说的是,我读了这篇文章并复制了代码,因为我想学习 MQL5 编码。其次,我觉得我学到了很多东西,现在我已经编写了 7 个 EA 和一些指标。因此,我觉得我已经在学习的道路上走得很好,以至于我可以编写自己的想法。


此外。我对策略测试器 非常好奇。起初我认为它太基础了,不可能成功。但事实并非如此。它可以工作。但是。就我而言,它只对有极大耐心的人有效。因此,我在美元兑加元的日线时间框架上进行了测试,并优化了止盈、止损和 ADX 周期。简而言之就是将 ADX 放在中间。高于 29,低于 60。就可以了。止盈。尽可能高。在 300 和 500 之间。止损。肯定要少很多。经常出现的数字是 155 或 30。然后就是大问题了。我从 2019 年一直测试到 2025 年初。在最高 ADX 设置下,交易次数从 75 次到 45 次左右不等。我查看了其中 5 次测试的图表。它在 0 附近徘徊,直到 2024 年。然后,所有收益都出现在最后一年。我查看的利润系数从 1.77 到 2.61。到处都是问题。所有空头都亏损了。86% 的多头获利。很多交易持续时间很长。一般都超过 10 天。最长持有时间为 3440 小时。平均为 846 小时。我觉得回报率也会很高,但谁会想在 6 年后只做不到 20 笔交易呢?


我花了好几天时间才完成所有 33000 种组合。现在我将进一步测试,大大减少任务量。我不需要 ADX 值超过 55。止损 30 也太低了,即使我也看到了很多盈利。最后一点。我在书上看到,可以将多台个人电脑/笔记本电脑连接到局域网中以提高速度。我建议这样做。


这是你使用策略测试器初期经验的一份非常详尽的总结。

如果可以的话,我想提几点建议:

第一步其实应该是检查你的经纪商/交易商提供的行情数据质量。有一个非常好的脚本可以自动化完成这个过程,地址是:

代码库

Tick Audit——逐月检查真实报价历史数据及回测质量

Ayaz,2026年9月5日 06:13

该脚本按月生成报告,告知您所选交易品种是否真正包含Tick数据,还是仅包含K线数据——这样您在信任回测曲线之前,就能明确回测的哪部分是基于生成的Tick数据运行的。策略测试器在测试结束后只会给出一个“历史数据质量”数值,却从未指出具体是哪几个月存在问题。而本脚本会首先进行确认。

步骤 #2 应基于您特定经纪商的“基于真实 tick 的每 tick 数据”进行回测(以防您尚未这样做)。根据您的电脑配置,您可能需要分批进行——尤其是在老旧机器上。

步骤 #3 应是对您已开始生成的策略测试报告进行评估。请特别关注连续亏损的平均次数和最大次数。当您在实时交易中连续亏损的次数超过平均连续亏损次数时,您可能需要相应调低仓位规模(详细解释已发布在我的个人主页墙上)。 同时请关注你的EA实现盈利的时间段(小时、天和月)。由于系统本身不支持交易入场时间功能,因此我开发了一个生成辅助报告的工具(https://www.mql5.com/en/blogs/post/774010)。 您可能需要实施一个交易时间过滤器(https://www.mql5.com/en/blogs/post/770147)。

顺便提一下,有很多盈利的持仓型(长期)交易者。如果您的个人目标与这种交易风格一致,我建议不必过分担心交易频率。就我个人而言,创建一个盈利的持仓型(LFT)策略要比高频交易(HFT)甚至中频交易(MFT)策略容易得多。

Profit By Deal-Entry-In Per Hour Report for MT5 (unlike deal-entry-out in the native Tester Report)
Profit By Deal-Entry-In Per Hour Report for MT5 (unlike deal-entry-out in the native Tester Report)
  • 2026.08.12
  • www.mql5.com
As the MT5 Tester does not natively support reporting hourly profit and loss by deal-entry-in (only deal-entry-out), I created this MQL5 Service to to generate custom backtest reports limited to, and