在真实分时基础上测试交易策略
本文所提供的是一个简单策略以三种模式进行测试的结果: "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