请 [注册] 或 [登录]  | 返回主站

量化交易吧 /  量化策略 帖子:3354327 新帖:18

测试交易货币对篮子时出现的形态。第三部分

英雄就是我发表于:4 月 17 日 17:22回复(1)

引言

我们正逐渐接近交易货币对篮子时出现的形态测试的最后部分。您可能还记得, 在我们 之前的文章 中, 我们描述过当组合指标图形与移动平均线交叉时形成的形态。我们还研究过利用它作为 超买/超卖线突破形态 过滤器的可能性。 

我们已评估过组合指标上出现的形态的发展 - 振荡器图形。此话题可以被认为是完整的。

我们来测试最后的形态类型。在关于交易货币对的主要 文章 中, 有关它的说明位于 4 和 5 节。我要简单提醒您, 您可以在哪里找到这样的形态。

每双货币都属于其篮子。例如, EURUSD 代表两个货币篮子 — EUR 和 USD。这一货币对的行为可以使用两个组合指标进行分析 — 每个篮子对应一个。我们分析这些指标读数之间的差异, 以便检测它们相互之间的相对弱势加强势。因此, 我们能够得出趋势方向的结论。

组合指标图形基于所描述的原理, 我们在其上查找形态 4 和 5。我们已经知道它们的外观共性: 其中一个是基于超买/超卖线的突破 (我们将在本文中测试它), 第二个是在组合指标与移动平均线的交汇处。

我们来回顾一下这种形态的优点:

  1. 由于它考虑了货币对中的两支货币而非单支货币的行为 (如以前的文章 这篇 和 这篇), 分析变得更加准确。
  2. 根据这些形态入场时只针对一对执行, 而不是在整个篮子上执行。这反过来又给我们带来一些其它的好处:
    • 更少的回撤;
    • 为交易者带来更舒适的心理承受度, 并在日常仓位管理中提供便利。

形态研究

形态研究保持不变, 但我们会在新的组合指标图形上寻找它们。首先, 我们来看一下由组合指标图形突破超买/超卖等级的形态。假设我们已经知道等级的位置。在技术分析中这种形态众所周知, 其描述在 这里。我们将在蜡烛收盘时识别它。它看起来应该很明显:

目标形态
无形态




开始研究的工具

和以前一样, 我们使用 "United WPR" 指标和基于它的工具。主指标代码已显示在 前文。在本文中, 它们附加在 test.zip 当中。首先, 我们来定义可能的交易数量。

可能的交易数量

我们已经确定可能的交易数量不止一次。我们这样做是为了比较结果, 并评估超买和超卖等级的位置。您可能还记得, 这些等级在父本 WPR 指标中的位置如下:

  • 超买等级 - 20%
  • 超卖等级 - 80%

但是 "组合 WPR" 从 -100% 变为 +100%, 所以等级分别变为 +60% 和 -60%。如果它们的突破数量与所获得的结果相当, 那么我们假设这些等级保持不变。

我们将按照以下顺序研究 H1, H4 和 D1 时间帧。

  1. 将 testDistance.mq5 指标放置在图表上。还有两个其它指标 — testWPRjpy.mq5 和 testWPeur.mq5。
  2. 首先, 改变最后两个指标的代码: 它们当中的每一个均对应 testDistance.mq5 指标所在货币对中的一支货币。例如, testWPRjpy.mq5 指标包含 JPY 篮子的货币对, 那么 testWPReur.mq5 — 对应 EUR。所以, testDistance.mq5 放置在 EURJPY。
  3. 将 testIndexZig-Zag1.mq5 指标放置在 testDistance.mq5 指标图形上方 (我们已在 前文之一中描述了前者)。它突破 testWPReur.mq5 的数值范围 (从 100% 到 -100%), 间隔从 0 到 99, 并计算每个间隔内的突破次数。 将获得的数值假设为 testIndexZig-Zag1.mq5 指标的工作结果 (我们将其简称为 "结果") 并保存到文件中。生成这个文件是当前阶段的主要目标。出于便利, 下面是以表格形式提供的文件片段:
    间隔编号 指标范围 最小指标值
    最大指标值 
    突破次数
    ... ... ... ... ...
    47 -4 -6 -4 3
    48 -2 -4 -2 5
    49 0 -2 0 5
    50 2 0 2 7
    ... ... ... ... ...
  4. 我们来分析一下结果文件。

我们仅需简单地将 testWPRjpy.mq5 和 testWPeur.mq5 指标指派到所有已分析货币对的每一支货币上即可处理。我们使用 EURJPY 和 EURUSD 作为示例。

我们来比较两个货币对的三支货币 (EUR, USD 和 JPY) 在三个时间帧 (H1, H4 和 D1) 的超买/超卖等级突破。

最有可能的是, 检测到的形态要比 之前 研究过的情况少得多。原因很简单: 为了使这个组合指标的图形突破超买/超卖等级, 应该同时发生两个事件:

  1. 基准货币超卖;
  2. 报价货币超买,

或反之。换言之, 一支货币必须尽可能弱势, 另一支货币尽可能强势。这并非一个非常频繁的情况, 所以突破的数量相较很少。

上述两个事件的巧合还可能具有非市场性质, 例如同时发布 "相斥导向" 的新闻。在这种情况下, "超买" 和 "超卖" 的概念并不完全正确, 但为了不使问题复杂化, 我们依然采用它们。

testIndexZig-Zag1.mq5 操作 (生成的文件) 的完整结果位于附件 Files.zip 文档中。测试是在整个可用历史数据上进行的。 

我们总结表格中最重要的结果:

品种

时间帧
D1 H4 H1
EURJPY 2 / 3 19 / 19 39 / 46
EURUSD 3 / 1 17 / 17 31 / 50
EUR 5 / 1 15 / 16 67 / 73
JPY 5 / 5 20 / 17 79 / 62
USD 2 / 9 13 / 9 80 / 69

我们来澄清内容:

  • 前两行是 testIndexZig-Zag1.mq5 针对两个选定货币对的操作结果。
  • 最后三行是 testIndexZig-Zag1.mq5 指标针对三个 单独 货币对篮子的操作结果。每个篮子由基准货币, 或前两行中货币对的报价货币组成。
  • 右边三列中的数值是来自附件 Files.zip 文档文件中发现的超卖 (-60%)/超买 (60%) 等级的数量。例如, 80/69 意味着检测到等级 -60% 突破 80次, 60% 的等级突破 69 次。


我们的任务是比较前两行和后三行的数据。在本节开始时, 减少突破数量的初步预测在 H1 时间帧是合理的, 而在 H4 和 D1 则 "失败"。我们可以假设 H4 和 D1 时间帧没有足够的突破来统计确定的结论, 或者我们可能需要改变超买/超卖等级。但我们不会那样做。分析仅针对两个货币对进行, 不足以作出正确的结论。因此, 一旦统计数据积累足够, 可能需要调整超买/超卖等级的位置。

不过, 我们可以得出一个合理的结论: 和以前一样, D1 上的入场数量可以忽略不计。

开始测试

我们 已测试过 一个类似的形态。因此, 我们使用已有的 testEAbasket2.mq5 EA 并对其进行略微修改。

  • EA 调用 testDistance.mq5 指标。
  • 尽管已有开单, EA 仍然可以在每次检测到形态时入场 (在每个超买/超卖等级突破处)。

我们稍微改变形态形式以便增加交易数量。在 EA 参数中反映这些更改。

  • SELLPROFIT. 当组合 WPR 达到此值时, 篮子的所有空头持仓平仓。默认是 0%。
  • SELL1LIMIT. 这是点 1 处的组合 WPR 的最小值 (参见上图), 以便开始识别篮子卖出形态。默认是 65%。
  • SELL2FROM. 点 2 处组合 WPR 的最大值以便识别篮子卖出形态。默认 60% 是超买等级。
  • SELL2TO. 用于最终识别篮子卖出形态的点 2 处组合 WPR 的最小值。默认是 40%。
  • BUYPROFIT. 当组合 WPR 达到此值时, 篮子的所有多头持仓平仓。默认是 0%。
  • BUY1LIMIT. 这是用于确定篮子买入形态的点 1 处组合 WPR 的最大值。默认是 -65%。
  • BUY2FROM. 为了识别篮子买入形态, 点 2 处组合 WPR 的最小值。默认 60% 是超卖等级。
  • BUY2TO. 对于篮子买入形态的最终识别, 点 2 处组合 WPR 的最大值。默认是 -40%。

此外, 主要指标 testDistance.mq5 应用 testWPRХХХ.mq5 指标, 提供某个篮子的组合 WPR 值。将最后的指标计算方法从算术改为几何平均值。计算指标值的不同方法在 此文 中有详细解释。在此我们只显示测试指标中负责主计算的代码片段:

double m_dParam = 0.143; // 1/LG

double GetValue(int shift) 
  {
   double dBuf[1];
   double res=0.0;
   
         res = 1;
         for (int i = 0; i < LG; i++) {
            CopyBuffer(h[i],0,shift,1,dBuf);
            if (bDirect[i]) res *= dBuf[0];
            else            res *= dBuf[0] + 100;            
         }  
         res = -MathPow (MathAbs(res), m_dParam);  
   return (NormalizeDouble((res + 50) * 2, _Digits) );
  }

全套应用指标和 EA 在附件存档 test2.zip 中提供。

我们从 EURUSD 开始我们的工作。去年的结果:

针对 AUDUSD USDJPY 的进一步测试未产生交易。显然, 篮子的一支货币超买, 同时另一支货币超卖的情况相当罕见。我们通过改变形态参数来增加突破的次数并继续测试。下面显示了更新的输入列表。

  • SELLPROFIT. 无改变。
  • SELL1LIMIT = 50%.
  • SELL2FROM = 40%
  • SELL2TO     = 20%.
  • BUYPROFIT. 无改变。
  • BUY1LIMIT  = -50%
  • BUY2FROM  = -40%
  • BUY2TO      = -20%。

EA 针对主货币对的测试报告显示在附件存档 result.zip 中。获得的损益显示在表格中:

  AUDUSD EURUSD GBPUSD NZDUSD USDCAD USDCHF USDJPY
H1 -27.63 48.28 49.34 -20.02 -20.04 29.82 -19.99
H4 -35.10 14.44 1.60 -49.18 -38.75 -15 2.46

D1 时间帧几乎没有交易, 因此它不包含在报告中。在其它时间帧内, 交易也很少。仅在 H1 上检测到可接受的结果。它显示了三个货币对的利润 (EURUSD, GBPUSD 和 USDCHF)。其它主要货币对表现出一些损失, 尽管不是那么明显, 但不能假定算法失败。我们不要忘记, 我们测试了最简单的 EA 版本, 没有过滤, 一条单独的入场规则和一条 - 离场。当然, 这对于真正的交易是不够的。我们可能会尝试改进 EA 并使其更高效。我们分析一下获得的结果, 找出我们下一步应该处理的算法。

分析测试结果

第一件我们应停止的事情是 H1 和 H4 交易数量之间的差异。可以理解的是, H4 的交易量较少, 因为与同样的时间间隔的 H1 相比, 蜡烛数量少了四倍。看起来交易的数量也应该少四倍。在我们的研究中, 这个规则有点黏性: 在所有分析的货币对上, H4 的交易少于 H1。由于 H1 上的交易很少, 因此存在一个问题: 如果我们想按照该方法在 H4 交易, 我们应该怎么做?只能有一种解决方案 - 进一步 "扩展" 这种形态:

  • SELLPROFIT. 无改变。
  • SELL1LIMIT = 45%.
  • SELL2FROM = 40%
  • SELL2TO     = 10%。
  • BUYPROFIT. 无改变。
  • BUY1LIMIT  = -45%
  • BUY2FROM  = -40%
  • BUY2TO      = -10%。

这可能会稍微增加交易的数量, 但它如何影响盈利和回撤?我们针对两个货币对进行额外的测试 - GBPUSD (它在 H1 表现出很好的利润) 和 AUDUSD (它表现出亏损)。

获取的结果与存档 result-1.zip 挂钩。事实上, "扩展" 形态预计会增加交易数量。值得注意的是, 盈利/无利被证明继承自 H1 - GBPUSD 看到了利润, 而 AUDUSD 则遭受了损失。但是这种形态是否已经 "扩展" 并开始更频繁地自我识别?最初, 该形态出现在超卖/超买线突破。在两次 "扩展" 之后, 谈论突破和曲线的新位置是相当困难的。也许, 交易者不应该在高于 H1 的时间帧上寻找这种形态, 以确保安全。

我们来看看测试过程中检测到的回撤。它们出现在上面的 EA 针对 EURUSD 的测试屏幕截图中。除了回撤之外, 我们还可以看到, 订单仅会在稍后回归到更加温和的位置才能获得稳定的利润。我们已在 此处 的类似形态测试中看到了这一点。可能的原因是什么?

  1. 离场规则的缺陷。正如您可能记得的, 当组合 WPR 突破其零轴时, 将执行离场。换言之, 它在基准货币和报价货币之间达到平衡。显然, 这还不够, 我们需要其它方法来定义离场时间。但在这种情况下, 我们不会采取任何其它手段来排除外部影响。
  2. 形态识别的缺点。我们已经扩展了 H1 和 H4 的输入。在 "扩展" 形态的同时, 我们已将超卖/超买等级上调至 45-40%。因此, 当系统自动发现形态时, 可能还没有真正的超卖/超买线突破。例如, 该线可能仅在一支货币上突破, 或者两支货币都可能在超卖/超买等级附近震荡, 而实际上没有穿越它们。在这种情况下, 当前的趋势可能会持续下去, 不会发生逆转。这种事件过程的可能性增加了更多额外的形态 "扩展"。形态输入越宽, 它变得越不重要。所描述的事件可能会导致回撤。

现在, 测试已经完成, 到了为我们的整个工作做出结论的时候了。

结论

  • 该平台在 D1 时间帧中未能识别, 在 H4 上也很罕见。我不建议在高于 H1 的时间帧内寻找它。
  • 我们可以通过降低对其形式和质量的要求来 "扩展" 这种形态, 以便增加可能的交易次数。但是如果我们太过度了, 这种形态就会失去它的能力, 并不能反映真正的超买/超卖等级突破。因此, 扩展形态要小心。
  • 检查形态的盈利能力并不令人意外。不过, 有一些很有前途的特征。在货币对上没有检测到严重的损失, 其中一些甚至表现出利润, 而在我们以前的测试中, H1 时间帧完全是红色。这种形态显然有可能通过采用标准的技术手段产生稳定的利润 - 尾随停止等等。
  • 所描述的形态很少出现。它应被视为增强其它形态的附加信号, 而不是制定入场决策的主要工具。我们稍后会尝试弄清楚这一点。

文章中使用的程序

 # 名称
类型
 描述
1 test.zip 存档
判断可能的交易次数的工具。
2
Files.zip 存档 判断一些潜在入场时机的结果。
3 test2.zip 存档 EA 测试工具。
4 result.zip 存档 形态测试 HTML 报告。
5
result-1.zip 存档
在 H4 上的额外测试 Html 报告。

全部回复

0/140

量化课程

    移动端课程