English Русский Español Deutsch 日本語 Português 한국어 Français Italiano Türkçe
购买交易机器人前如何进行测试

购买交易机器人前如何进行测试

MetaTrader 5测试者 | 4 三月 2014, 10:42
57 537 0
MetaQuotes
MetaQuotes

与别处相比,在 MQL5 应用商店 购买交易机器人有一个明显的优势 - 其提供的自动化系统,可直接在 MetaTrader 5 终端内接受完整测试。购买前,EA 交易可以、也应该在内置的策略测试程序中,以所有不利的模式谨慎运行,从而对此系统有一个全面的认识,注意 MQL5 应用商店中提供的每一个 EA 交易都有试用版本提供。

记住:不仅仅是您在购买交易机器人时支付款项方面的风险,还有使用此类交易机器人在实际账户交易所带来的潜在损失。

下面,我们以免费的三种移动平均线 EA 交易直接在 MetaTrader 5 终端下载)为例来研究一下。它是某种基于三种移动平均线的经典交易策略的一种实施。

直接在 MetaTrader 5 终端从 MQL5 应用商店下载 EA 交易


基于测试结果的 EA 交易评估法

尽管没有什么可以 100% 保证交易机器人性能的通用方法,但允许您在 MetaTrader 5 终端策略测试程序中检查任何特定交易系统主参数的简单方法还是有的。主要方法如下:

  • 随机延迟模式下的压力测试,
  • 不同交易环境下的测试,
  • 不同交易品种/时间框架的测试,
  • 不良历史数据的事后检验,
  • 延长历史周期的事后检验(继 EA 交易于 MQL5 应用商店中发布之后),
  • 前向测试。

此外,对潜在的可疑因素应予注意,比如:

  • 过高的获利系数,
  • 历史数据的巨大利润值,
  • 某交易系统中大量的外部参数,
  • 资金管理的复杂规则。

尽管上面所说的都是非常简单的任务,但大多数的初学者、甚至许多拥有一定程度经验的交易者,要么不清楚其微妙之处,要么不能始终集中注意力。再一次提醒大家,从 MQL5 应用商店下载的任何交易机器人,都可以设置为在 Navigator (导航器)窗口中直接测试。

利用 Navigator 菜单启动 EA 交易

一旦您按下上下文菜单中的 "Test" (测试),就会显示出带有您所选 EA 交易的策略测试程序面板。测试所下载 EA 交易的一切工作均已就绪,我们也做好了仔细研究上述评估方法的准备。


随机延迟模式下的压力测试

策略测试程序主要设计用于测试系统的交易规则。也就是说,此策略测试程序会模仿所有过程的理想环境:

  • 发送交易请求,
  • 更新未平仓与挂单的状态,
  • 获取交易事件,
  • 获取价格历史,
  • 计算指标以及许多其它事项。

一切都旨在用最少的时间,完成交易策略的测试和优化。但是,鉴于实际环境中交易机器人的操作远非理想和即时,所以利用一种附加的测试模式来模拟某交易订单发送与执行之间的随机延迟,从而强化策略测试程序。

设置随机延迟模式

此测试模式会准确地检测:

  • 交易操作处理错误,
  • 调整策略以适应特定交易条件。

在标准与随机延迟两种模式下,运行单次 EA 交易测试后得到的交易结果却有显著不同,让人不得不重视。首先,查看策略测试程序日志,因为其所包含的大量交易错误,足够作为不再考虑此 EA 交易的原因。而本例中,在随机延迟模式下的压力测试过程中未检测到任何此类错误,这就表明此 EA 交易已成功通过测试的前半部分。

现在,我们来看看利用两种模式下运行的单次测试所获得的交易结果之间有无差异。随机延迟模式下所获交易数与利润的大幅缩减,表明此策略高度依赖于传输和交易订单执行的质量,而且只能在特定的理想条件下盈利。可能大多数情况下,开发人员都是在无意中完成了这一操作。但是,这样一个“瑕疵”却可能变成您交易账户的一场灾难。

不同交易订单执行模式下测试结果的对比

本例中,切换到不同的交易订单执行模式并未影响到交易数量。而测试结果的些微不同,用由于重新报价而导致的交易中出现的小幅价格变动完全可以解释。

总结:三种移动平均线 EA 交易已通过此测试。随机延迟模式下的压力测试,并未对交易结果产生重大影响。


不同交易环境下的测试

在 MQL5 应用商店中的描述里指明的条件下,运行交易机器人测试。然后连接到另一经纪人账户,并再次运行此测试。这与之前的压力测试有些类似,允许您查看价格与交易条件(点差、允许的止损/获利水平等)对于交易结果的影响有多小。

比如说,您拥有经纪人 A 账户上的 EURUSD EA 交易测试结果。再次运行相同的 EURUSD 测试,只是这次是在经纪人 B 账户。假如两个结果有很大不同,则是重新考虑是否需要此交易机器人的很好理由。


另一交易品种/时间框架

大多数的交易机器人都是为了执行某特定交易品种的交易而研制,有一些甚至还要求必须用于某特定时间框架。这似乎很合理,因为每一款工具都有自己的操作方式。因此,一般来说,MQL5 应用商店提供的交易机器人的描述中,始终都会指定交易品种和时间框架。

下载一份 EA 交易的试用版,并按不同的交易品种和(或)周期启动它。首先,您需要确保 EA 交易不会因严重错误崩溃,或是因在不宜的启动条件下使用而向日志添加交易错误消息。第二,确保可盈利交易策略尚未因以上设置变更而变得极端亏损 - 出现曲线拟合处可能会有这种情况发生。

为 EA 交易安排此类测试最简单的方法之一,即就 Market Watch (市场报价)中选定的所有交易品种实施优化。我们在相当长的时间框架 H1、且生成“每一价格变动”的情况下,于此模式下运行 EA 交易优化,很快就得到了第二个问题的答案。

 就 Market Watch 中选定所有交易品种的优化

此优化的结果表明,该策略有存在的权利,从统计学上展示了每一交易品种足够的交易量,且未产生真正的不良结果。注意,我们已经按默认设置,利用相同参数Market Watch 中的全部 13 个交易品种完成了一次策略测试。

 Market Watch 中选定所有交易品种的优化结果

当然,我们也不奢望每一个 EA 交易在任何交易品种和时间框架上都同等有效。但利用此法在策略测试程序中检查一下还是值得的。它不仅会揭示出潜在的代码错误,甚至还可以催生新想法。

总结三种移动平均线 EA 交易在不同的交易品种/时间框架上测试时表现正常。测试期间未见任何明显代码错误。


不良历史数据的事后检验

我们发现,此 EA 交易在 GBPUSD 上的结果最佳。但是,如果这不是一种一致的形态、且这种行为是由于所选的从 2012.01.01 到 2012.09.28 的测试间隔、而这种选择又是纯粹出于偶然得到了有利结果,那么,又会怎样呢?为深入研究这一问题,我们就 2011 年采用相同的参数来测试此 EA 交易,并取 2011.01.01-2011.12.31 作为间隔。运行测试,并查看结果。

就不良历史数据的事后检验

此 EA 交易不再有利可图,而且立即变得乏善可陈。此外,2011 年遭受的损失,已大大超过了策略测试程序于 2012.01.01-2012.09.28 间展示的利润。但是,现在我们知道了潜在的损失,即便是在 GBPUSD 上交易也是一样。

总结: 三种移动平均线 EA 交易需要进一步的开发,才能确保对于市场行为变化的正确自动应对;否则,就要通过优化,找到每个间隔的最佳参数。


延长历史周期的事后检验

给出描述时,交易机器人的开发者都会试图呈现其产品最好的一面,并因此提供针对某特定间隔参数最优的报告及测试图表。由于从交易机器人发布之日到您对其感兴趣之时,通常已经过去了相当长的时间,所以,我们可以运行一次所谓的前向测试。

前向测试会针对选择最优参数时未考虑到的一段历史期间执行测试。我们会用 GBPUSD 、在稍长一点的测试间隔内(其中包括自 2012 年 9 月 28 日之后的历史数据)继续此 EA 交易的分析。结束日期设置为 2012.11.26,由此又添加了近两个月。所以,在完成从 2012.01.01 到 2012.11.26 期间的运行测试之后,我们得到了新的测试图表:

延长历史周期的事后检验

本例中,三种移动平均线 EA 交易在附加短间隔(前向)表现的结果,甚至比之前 10 个月达成的结果都要好。当然,这种情况也非常罕见。

总结: 用 GBPUSD、就延长历史期间的三种移动平均线 EA 交易测试,未能显示出交易参数的任何削弱。


前向测试

前向测试用于评估交易系统在不断变化的市场行为中的稳定性。经过对策略测试程序中参数的优化,即可得到交易机器人在特定时间间隔内、就历史数据实现最佳状态的参数。但这样却不会确保所获的参数将同样地最为适合,即便是用于即将到来的交易也是如此。

开发自动化交易系统的交易者通常都会混淆优化和曲线拟合之类的概念。出色优化与曲线拟合之间的界线并不明显,很难找到。而前向测试允许客观地评估所获参数,证明确有用武之地。

经过在 MetaTrader 5 策略测试程序中的优化之后,您可以选择对产生的优化参数进行前向测试,并设置必要的限制。我们利用以下显示的设置,运行我们交易机器人的前向测试。

设置前向优化模式

前向被设置为 1/4,也就是说,指定的间隔 2012.01.01- 2012.11.26 会被分为 4 部分。前 3/4 的历史将被用于查找最优参数,而最佳的 25% 传递(EA 交易参数集)则会在剩余的 1/4 历史数据上接受前向测试。

指定要优化的参数 - 我们会选择那些应该会对交易逻辑造成影响的参数。因此,我们将优化负责资金管理的参数。

要优化的参数

上述的组合步骤,加上各值的启动与停止,就已经导致了近 500 万次的传递。在给定的环境下,在优化过程中使用遗传算法并加入 MQL5 云网络也不是没有道理。

所以,我们来研究一下优化结果,其中包括共耗时 21 分钟的前向传递,并花费利用云代理执行 4000 多次传递的 0.26 积分。成本计算方式的示例,请见MQL5 云网络:您还在计算吗?

前向测试结果图表

乍一看来,似乎是出错了。我们检查结果,发现前三个优化参数的值在整个传递过程中都一样。而且,只有最后两个参数 Inp_Signal_ThreeEMA_StopLoss 和 Inp_Signal_ThreeEMA_TakeProfit 的值有变化。

前向传递结果表

有鉴于此,我们可以做出两种假设:

  • 这些参数,尤其是止损与获利值,实际上都对交易结果没有影响;
  • 遗传算法未能避免优化期间我们遇到的局部极值。

我们一起利用相同的设置和输入参数重新优化,以检验这两种假设。这一次,前向测试结果图表看起来有些不一样了。

前向期间重新优化的另一图表

作为优化的结果,我们现在可以看到三个主流。这就意味着,给定交易机器人最后两个优化的参数仍然显得偶然。

总结: GBPUSD 上三种移动平均线 EA 交易的优化已表明,交易逻辑仅取决于 7 个参数中的 3 个。

我们一起做最后一次尝试,消除优化中的不必要参数。现在,我们只有 1650 次传递。

减少的优化参数集

因此,完整的参数搜索比遗传优化更有意义。这种情况下,MQL5 云网络会为我们提供更多的代理,而完成这一过程所需的时间也会因此大幅缩短。

完整参数搜索后使用 MQL5 云网络代理

此任务由 2000 个云代理在 7 分钟内完成,且前向测试图表看起来不错。

优化图表

整个前向期间的大多数传递都显示出可盈利,在初始 10.000 美元之上的点数比亏损区域中的大很多。看起来有点希望,但还不能因此就说,相关参数集未来亦可盈利。


交易系统中的参数数量

我们有机会看到,并非所有可用于设置某交易机器人的策略参数,都能同等有效地影响交易结果。本例中,Inp_Signal_ThreeEMA_StopLoss 和 Inp_Signal_ThreeEMA_TakeProfit 的值对 EA 交易性能几乎没有影响。但是,碰到拥有大量参数设置的交易机器人的情况却更加常见。

大量参数允许您为交易机器人做出非常准确的设置,从而匹配其性能,以适应极有可能在优化期间揭示的特定历史期间。

曲线拟合是指 EA 交易在超出指定间隔、用于优化的数据上,很可能就不会显示与测试数据同样的盈利水平。而且,更糟糕的是,还可能会产生相当负面的结果——导致亏损。

人们相信,交易系统的参数设置越少,已确定模式将在未来消失的可能性就越小。反过来也一样 - 系统中的参数越多,市场会保持其与这种经过微调的 EA 交易一致特征的可能性就越小。作为上述内容的证明,我们强烈建议您熟悉优化与现实:来自 ATC 2011 的证据一文中提供的交易分析,下文我们将详细讲解。

余额与参数数量的相关性

此图表所示为整个 2011 年自动交易锦标赛参与者的交易结果。纵轴显示锦标赛结束后的账户余额,而横轴则显示 EA 外部参数的数量。EA 交易则由红色方块代表。可以清楚地看出,在锦标赛的前向周期进行交易时,拥有大量参数的 EA 交易都亏损,最多也就是不盈不亏。

代售交易机器人中外部参数的缺少,也并不能说明预置交易规则的普遍性,更不能被视为冷静。出于某种原因,EA 交易的开发者必须直接将外部参数引入交易机器人内部。


极高的利润系数

许多交易者不喜欢输掉交易,并将此认作是某交易系统运行故障的表现。实际上,由于金融市场中交易的属性,这些情况都不能避免。只要一建仓,任何交易最终都面临着或赢或输的局面。而交易损失也不可避免,像所有企业一样,被视为一种自然发生的支付形式,以及不可避免的支出项目。

有许多自动化交易系统的开发者更是走向极端,试图将亏损交易和毛损的数量降至最低。为实现这一目标,并改善策略测试程序中可能取得的结果,他们又添加了允许您避免亏损交易、由此加大利润系数的额外过滤器。额外过滤器有其自身的参数和设置,从而加大了输入参数的总量。

利润系数被定义为毛利除以毛损。盈利系统的利润系数总是大于 1。但是,如果有人使用过度、利用策略测试程序过度优化交易系统,则此数字可能会大得多。我们再来看看来自优化与现实:来自 ATC 2011 的证据一文中的另一图表。

优化产生的极高利润系数

很显然,几乎所有的利润系数超高的交易机器人,在历史数据测试期间,甚至都没有接近过在 2011 年自动交易锦标赛前向期间测试的事后检验结果,几乎损失了一切。这就表明,策略测试程序中显示的超高利润系数,只是由于调整策略以适应某个用于交易机器人优化的特定时间段。


基于历史数据的巨额利润

另一个惊人的事实,可能就是某交易机器人描述中声称的巨大利润。如果随附的策略测试程序报告显示了超高余额,那么最有可能是与曲线拟合有关。此类“印钞机”式的开发者甚至没有意识到,他们的系统已经过度优化,而且有太多的外部参数。我们用上文提过的报告优化与现实:来自 ATC 2011 的证据中的另一图表来支持这一论断。

基于历史数据的巨额利润

这种“圣杯”的购买者已成定式,都是没有经验、易于被基于历史数据的巨额利润蒙骗的人。这种情况下,此类交易机器人可以赢得利润的幻象就变得真实且有响应。


资金管理操作

创建一种允许您在策略测试程序中仔细检查不良历史数据,成功交易亏损最小化、回报最大化的交易操作规则,是应对交易机器人畸形开发的一种最复杂、也最罕见的方法。它与所谓的资金管理相去甚远。

发现此类拟合的最好办法,就是测试在历史期间之外、用于获取开发者在交易机器人描述中所声称的结果的数据。拟合范围越宽,该交易机器人通不过测试的可能性越大。


不要相信任何人,甚至包括自己

遗憾的是,与任何复杂的程序一样,交易机器人也可能包含无意的失误。除了在线交易,无法检测出这种失误。没有任何交易机器人的开发者可以保证其程序没有错误,可以正确处理所有非标准的状况。即便是成功通过测试的 EA 交易,将其放入开发者不能预见的未知状况,也可能会犯交易错误,或是因严重错误而崩溃。这种情况下,唯一的隐性担保,可能就是交易机器人开发者的经验和声望了。

而且,已在足够长的期间内在“信号”服务领域显示出积极成果的 EA 交易,相比之下更加可靠也是理所当然的。不管怎样,千万不要被未来利润的计算所击倒,要记住两条仍然有效的规则:

  1. 不要相信任何人,
  2. 以及,任何过去的成功都不能保证明天的利润。


我们也推荐以下专注于市场的文章:

本文由MetaQuotes Ltd译自俄文
原文地址: https://www.mql5.com/ru/articles/586

MQL5 中艾略特波浪自动分析的实施 MQL5 中艾略特波浪自动分析的实施
艾略特波浪理论是最流行的市场分析方法之一。然而,这个过程非常复杂,从而导致我们使用额外的工具。自动标记器是其中一种工具。本文描述用 MQL5 语言创建艾略特波浪的自动分析程序。
MQL5 编程基础:字符串 MQL5 编程基础:字符串
本文会讲解您可以利用 MQL5 中的字符串所做的一切。对此感兴趣的主要应是 MQL5 入门程序员,同时也为经验丰富的开发人员提供了一次总结和系统化其知识的良机。
在 MetaTrader 5 中应用费歇尔变换和逆费歇尔变换进行市场分析 在 MetaTrader 5 中应用费歇尔变换和逆费歇尔变换进行市场分析
我们知道一个市场周期的概率密度函数 (PDF) 并不会让我们想到高斯分布,而是一种正弦波的概率密度函数,并且大多数指标假定市场周期的概率密度函数为高斯分布,我们需要一种方式来纠正。解决方法是使用费歇尔变换。费歇尔变换将任何波形的概率密度函数转换为近似的高斯分布。本文介绍费歇尔变换和逆费歇尔变换的算法以及它们在交易中的应用。介绍和评估了一个基于逆费歇尔变换的专有交易模块。
机器学习:支持向量机如何应用于交易 机器学习:支持向量机如何应用于交易
长时间以来,支持向量机一直被应用于生物信息学和应用数学等领域,以评估复杂数据集以及提取可用于数据分类的有用模式。本文会研究何为支持向量机、它们的工作方式,以及为什么说它们在提取复杂模式时非常有用。之后,我们再研究如何将其应用于市场,并发挥交易建议的潜在作用。本文将提供使用支持向量机学习工具的有效示例,让读者能够试验自己的交易。