English Русский Español Deutsch 日本語 Português
在真实分时基础上测试交易策略

在真实分时基础上测试交易策略

MetaTrader 5示例 | 8 八月 2016, 17:54
7 104 0
MetaQuotes
MetaQuotes

本文所提供的是一个简单策略以三种模式进行测试的结果: "1 分钟 OHLC" 仅使用分钟柱线的开盘价, 最高价, 最低价和收盘价; "每笔分时" 模式的 详尽模型, 以及应用实际历史数据更精确的 "基于真实分时的每笔分时" 模式。

比较结果可令我们评估各种模式的品质, 并有助于我们更有效地使用测试器, 以便更迅速地获得结果。"1 分钟 OHLC" 模式可以得到快速的评估测试结果, "每笔分时" 模式更加可靠, 当测试时基于真实的分时数据但消耗更多时间。请记住, 交易机器人的逻辑错误也许会影响交易操作的数量, 致使策略测试的结果极易受到所选测试模式的影响。


交易策略

我们已经开发了一款简单的交易策略, 它基于在最后 RangeLength 范围内的柱线突破其范围。交易规则如下: 在新柱线开盘伊始, 计算最后 N 根柱线的最高价和最低价的范围。附加 EA 的 RangeLength 参数省缺值为 20 根柱线。它代表我们所建立范围的窗口宽度。

在首次向上突破范围 - 或者向下时, 开始统计接收分时的累加 (高于和低于突破价位的数量)。一旦接收的分时数量超过 (或等于) TicksForEnter=30, 则做出在当前价位入场的决定。如果范围向上突破, 高于突破价位的分时数量应当超过低于该价位的分时数量。在此情况下, EA 开多头仓位。相反的情况则导致一笔空头仓位。

已开仓位会在 BarsForExit 根柱线之后被平仓。如您所见, 规则十分的简单。参看以下屏幕截图会更清晰:


现在, 让我们来看看当应用三种不同分时模型模式之一时, EA 的结果会如何变化。


测试进行中

交易策略已在 2016 年上半年的 EURUSD H1 上进行了测试 – 从 2016 年 01 月 01 日至 2016 年06 月 30 日。所有 EA 参数设为省缺值, 因为我们的目的是在不同模型模式下的简单策略测试。



不同测试模式的结果比较

不同模式的测试结果显示在表格中。第一件吸睛的东西就是交易操作的数量差异。因此, 所有其它的结果同样会有所差别。测试在 "1 分钟 OHLC" 模式花费了 1.57 秒, 它比 "每笔分时" 模式快了 23 倍。当优化交易系统的输入时, 这种差异十分重要。

与之相反, 比之 "每笔分时" 模式的 36.7 秒, 模式 "基于真实分时的每笔分时" 却变得更耗时 – 74 秒。这很容易用事实来解释, 当使用真实分时数据的时候, 建模分时数据将会超过 3 千 4 百万笔, 这几乎相当于 "每笔分时" 模式的两倍。因此, 在测试里使用更多的分时数据, 在策略测试器里过一遍就需要更多时间。

参数
1 分钟 OHLC
每笔分时
每笔分时
基于真实分时
分时
731 466
 18 983 485
34 099 141
净盈利
169.46 -466.81
-97.24
交易
96
 158 156
成交
192
 316 312
净值回撤 %
311.35 (3.38%)
 940.18 (9.29%)
625.79 (6.07%)
余额回撤 281.25 (3.04%)
882.58 (8.76)
591.99 (5.76%)    
盈利交易 (%)
50 (52.08%)  82 (51.90%) 73 (46.79%)
平均连续胜率
2
2
2
测试时间包括分时生成时间
1.6
36.7
74 秒 (1 分 14 秒)

不同模型模式的测试结果显示在以下动态 GIF 图片中, 可令您比较参数。


余额和净值的图形也不尽相同。正如我们看到的那样, 这个简单的策略难以令人印象深刻 - 增长阶段之后紧随回撤, 且测试图形看起来更像是巧合锁链。此策略肯定不适合实盘交易, 因为结果就好似掷硬币。



交易系统依据分时数据

我们早先呈现的交易系统高度依赖建模方法 – 亦即, 接收分时数据的数量和它们抵达的顺序。当在 "1 分钟 OHLC" 模式下测试时, 我们得到的分时数据最少, 以至于不足以开仓。"每笔分时" 和 "基于真实分时的每笔分时" 模式, 分时数据抵达顺序也许十分的不同。在 "每笔分时" 分时模式情况下, 我们接收的是单向上行或单向下行顺序的分时, 无形中保证了突破范围之后入场。在 "基于真实分时的每笔分时" 模式情况下, 真实分时的历史用于制造价格的动态异常行为。

因此, 我们能看到入场和离场点在图表是不同的, 哪怕是在测试间隔的开始。此外, 一些交易被略过。



四种分时生成模式

MetaTrader 5 策略测试器可以按照文章 "在 MetaTrader 5 里的测试基础" 中所描述的四种分时模型模式来检验交易策略。 最快速且粗略的模式是 "仅用开盘价", 此刻交易操作仅在新柱线开盘时才会执行。不提供柱线内的交易动作。此模式十分适合针对那种不必依赖柱线内价格走势的策略进行测试。

"1 分钟 OHLC" 模式是比较准确的, 源自它使用所选测试历史范围内的每根分钟柱线的开盘价、最高价、最低价和收盘价建模。这意味着当在 H1 测试时, EA 将在一小时柱线内调用 240 次: 在每根 60 分钟柱线, OnTick() 处理器将被调用 4 次 (对于每个 OHLC 价格)。这个模式使得尾随止损可以发挥作用, 并且在必要时在其它时间帧上查看价格动态和指标 (例如, 当测试 长老的三重屏幕 策略时)。

这两种模式适合测试大堆的交易策略, 因为大多数交易员开发的交易机器人选择在新柱线开盘时交易。不过, 若您需要进行更精确, 以及接收分时更详尽的建模, 您将需要 "每笔分时" 模式。在此模式下, 每根柱线之内的价格行为会被额外建模。分时是根据复杂的 (预定的) 法则生成的。此模式下价格建模机制的细节在文章 "MetaTrader 5 终端策略测试器的分时生成算法" 里描述。

如果您需要在策略测试器里呈现历史数据的最精准结果, 使用 "基于真实分时的每笔分时" 模式。在此模式下, 测试器从经纪商的交易服务器下载真实分时并用之显示价格进展。在真实分时情况下若某些时间段数据缺失, 测试器会模拟价格, 就像在 "每笔分时" 模式一样。因此, 如果经纪商拥有全部所需品种的历史数据, 您可以执行真实的历史数据测试, 而无需人工智能建模。此模式的缺点如上表所示, 就是显著增加测试时间。

开始研发采用 "1 分钟 OHLC" 模式的系统

如您所见, 不可能在所有方面同时取胜 - 如果我们不想花费太多的时间来快速检验交易思路, 那么我们就需要牺牲准确性转而使用简单的价格模拟模式。如果入场价格和交易信号序列的精准度是至关重要的, 我们需要使用精确模式, 但需要更多的时间。

在测试交易策略之前, 您应当记住, 您所选择的价格模拟模式将会影响结果的精度, 以及获得它们所花费的时间量。如果您需要快速检验和评估交易策略, 采用 "1 分钟 OHLC" 模式。它可以令您无需花费太多时间即可评估交易系统的潜力。

下一步 – 调试 "每笔分时" 模式

如果初步结果令人满意, 您可以使用更准确的模拟模式来继续调试和分析交易系统。此刻测试模式下的策略调试模式派上用场, 它可令您设置断点并检查变量的状态, 以及内置条件的执行。如果您有没有考虑过系统中的一些细微之处, 您也许会在这里偶然发现一些不愉快的意外。



精确度与速度

正如我们从三种模式的测试结果看到的那样, 交易员可以且应当选择一种更适合他们交易策略的分时建模模式。如果您在日线时间帧上测试您的系统, "仅用开盘价" 模式可能对您更佳, 因为高速测试不会对所获结果产生干扰。

如果您正在开发剥头皮或套利策略, 或者如果您的算法基于指数或实时指标合成, 则您将需要 "基于真实分时的每笔分时" 模式。测试将更加耗时, 但您会得到越加接近真实的结果。请牢记, 历史永远不会重演。当在实盘里启动 EA 时, 即使更彻底地选择输入, 也不能保证成功。

在所提及的模式之间, "1 分钟 OHLC" 和 "每笔分时" 模式速度较快但精度低于 "基于真实分时的每笔分时"。因此, 我们可以制定规则来描述测试时间和精度:

测试速度更快, 交易模拟精度越低。价格进展精度越高, 需要更多的时间进行测试。

交易服务器积累了多年的真实分时历史, MetaTrader 5 的策略测试器在 "基于真实分时的每笔分时" 模式中能够自动下载它。然而, 更可靠的测试, 需要更多的资源。因此, 您总要在精度和速度的平衡之间取决。 

并非所有的策略在开发的初始阶段都需要详细的建模。合理的选择一种测试模式将节省您的时间, 并筛选出大量不合适的策略!

在解决了主要任务之后 (开发一款可盈利的自动交易系统), 您可以利用真实分时来优化它。此刻, MQL5 云网络 的能力也许会派上用场。

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

附加的文件 |
SimpleBreakOut.mq5 (20.38 KB)
交易员的正则表达式 交易员的正则表达式
正则表达式 (regular expression) 是通过应用特定的规则来处理文本的一种特殊语言, 也简称为 regex 或 regexp。在本文中, 我们将要展示如何利用 RegularExpressions 库的 MQL5 版本来处理交易报告, 以及使用它处理之后的优化结果。
通用EA交易:与MetaTrader的标准信号模块集成 (第7部分) 通用EA交易:与MetaTrader的标准信号模块集成 (第7部分)
这部分文章描述了使用CStrategy引擎与MetaTrader中标准库的信号模块做集成。本文描述了如何操作信号,以及如何基于它们创建自定义的策略。
EA交易的自我优化: 进化与遗传算法 EA交易的自我优化: 进化与遗传算法
本文涵盖的内容是提出了进化算法主要原则,以及它们的特点和多样性。我们将使用一个简单的EA交易作为实例来做实验,来展示如何通过优化使我们的交易系统获益,我们将探讨在软件程序中实现遗传、进化以及其它类型的优化,并且在优化交易系统的预测器集合与参数时提供示例程序。
创建一个人工交易助手 创建一个人工交易助手
近来,货币市场上的交易机器人已经大幅增加,它们执行着各种各样的策略和概念,然而,它们还都没有能够成功创造人工智能双赢、多赢的实例,所以,很多交易者还是进行人工交易。但是,即使对于这样的专家,还是可以为他们创建被称为机器人助手的交易面板。本文就是从头开始创建交易面板的一个实例。