精通金融模式识别-二-

1,835 阅读1小时+

精通金融模式识别(二)

原文:annas-archive.org/md5/4328078f8bab6733c95749acb5952053

译者:飞龙

协议:CC BY-NC-SA 4.0

第五章:现代趋势跟踪模式

继续遵循趋势跟踪的概念,本章揭示了不属于经典模式的新模式。我将这些新模式称为现代模式,因为它们是我在分析中使用的个人发现。

目标仍然是相同的,即创建客观条件并对其进行回测,以形成对其频率和可预测性的看法。重要的是要记住,一个模式的可预测性在不同市场之间是相当随机的,这意味着在 GBPUSD 上有效的模式可能在 EURGBP 上无效,因为每个市场具有不同的统计和技术特性。

因此,我现在做出的主要假设是,现代模式既不比经典模式更好也不更差;它们只是一个让您在分析中获得更多确认的多样化工具。这意味着,如果您看到至少两三种(经典或现代)模式在同一时间出现,您应该更有信心进行交易。现在让我们开始学习这些新模式,并探索它们的直觉和代码。

五胞胎模式

五胞胎模式是一个多蜡烛配置,确认了潜在的趋势。该模式源于群体心理学和反应失败,¹这使其能够继续朝同一方向发展。其特点是有五个连续的相同类型的小蜡烛。该模式依赖于市场逐步上涨的事件,其中市场似乎被高估或超买,但仍然未受影响并继续上涨。

注意

这种类型的模式通常出现在市场上一个有影响的事件后,价格行动保持在低波动率环境中,但仍然能看到明显的趋势。例如,2021 年 12 月底的 USDTRY²。土耳其总统雷杰普·塔伊普·埃尔多安在通胀和利率方面的声明震动了市场,引起了巨大的波动,但随后出现了一种明显的无决定形式,USD 相对 TRY 稳步上涨。

图 5-1 展示了一个看多的五胞胎模式。

​​

图 5-1. 一个看多的五胞胎模式

当波动性放缓时,出现五连小阳蜡烛,这就是五胞胎模式的发生。图 5-2 展示了一个看空的五胞胎模式。

​​

图 5-2. 一个看空的五胞胎模式

讨论在 第四章 中讨论的三根蜡烛模式与五连小阳线模式的区别在于蜡烛图的数量和它们的大小。前者假设大幅移动后面跟随大幅移动,而后者假设缓慢渐进的移动也会后续有缓慢渐进的移动。(这与金融市场中的波动聚集事件一致。波动聚集 是指波动性通过时间的持续性,低波动率通常后跟低波动率,而高波动率则后跟高波动率。)

因此,这两种模式指向同一个方向,但处理不同的市场特性。

检测五连小阳线模式很容易,但该模式可能不常见,因为您需要满足许多条件。在算法上,条件需要如下:

  • 如果最新的五个收盘价都大于其开盘价,以及其前面的收盘价,并且每个蜡烛图都遵守最大蜡烛体大小,则在下一个买入行中打印 1。

  • 如果最新的五个收盘价都低于其开盘价,以及其前面的收盘价,并且每个蜡烛图都遵守最大蜡烛体大小,则在下一个卖出行中打印 −1。

注意

记住,五连小阳线模式由五个小蜡烛组成。因此,您需要编写它们必须具有最大大小的条件。

现在的任务是编写信号函数如下:

def signal(data, open_column, close_column, buy_column, sell_column):

    data = add_column(data, 5)    

    for i in range(len(data)):    

       try:

      `# Bullish pattern`
           if data[i, close_column]>data[i, open_column] and\               data[i, close_column]>data[i - 1, close_column] and\               data[i, close_column]-data[i, open_column]<body and\               data[i-1, close_column]>data[i-1, open_column] and\               data[i-1, close_column]>data[i-2, close_column] and\               data[i-1, close_column]-data[i-1, open_column]<body and\               data[i-2, close_column]>data[i-2, open_column] and\               data[i-2, close_column]>data[i-3, close_column] and\               data[i-2, close_column]-data[i-2, open_column]<body and\               data[i-3, close_column]>data[i-3, open_column] and\               data[i-3, close_column]>data[i-4, close_column] and\               data[i-3, close_column]-data[i-3, open_column]<body and\               data[i-4, close_column]>data[i-4, open_column] and\               data[i-4, close_column]-data[i-4, open_column]<body and\               data[i, buy_column] == 0:

                    data[i + 1, 4] = 1 

           `# Bearish pattern`
           elif  data[i, close_column]<data[i, open_column] and\                  data[i, close_column]<data[i-1, close_column] and\                  data[i, open_column]-data[i, close_column]<body and\                  data[i-1, close_column]<data[i-1, open_column] and\                  data[i-1, close_column]<data[i-2, close_column] and\                  data[i-1, open_column]-data[i-1, close_column]<body and\                  data[i-2, close_column]<data[i-2, open_column] and\                  data[i-2, close_column]<data[i-3, close_column] and\                  data[i-2, open_column]-data[i-2, close_column]<body and\                  data[i-3, close_column]<data[i-3, open_column] and\                  data[i-3, close_column]<data[i-4, close_column] and\                  data[i-3, open_column]-data[i-3, close_column]<body and\                  data[i-4, close_column]<data[i-4, open_column] and\                  data[i-4, open_column]-data[i-4, close_column]<body and\                  data[i, sell_column] == 0:

                    data[i + 1, 5] = -1 

       except IndexError:

            pass

    return data

与三根蜡烛模式类似,表 5-1 显示了在使用小时时间框架时变量 body 的默认值。

表 5-1. 五连小阳线模式:蜡烛体大小选择

资产蜡烛类型
EURUSD0.0005Pip
USDCHF0.0005Pip
GBPUSD0.0005Pip
USDCAD0.0005Pip
BTCUSD50USD
ETHUSD10USD
GOLD2USD
S&P50010Points
FTSE10010Points

图 5-3 展示了根据函数给出的信号在 ETHUSD 上生成的交易。五连小阳线在收盘时验证,这就是为什么信号在下一个蜡烛图开盘时给出的原因。

图 5-3. ETHUSD 的信号图
注意

上箭头表示在蜡烛图开盘时产生的看涨信号,而下箭头表示同样在蜡烛图开盘时产生的看跌信号。

图 5-4 展示了银的信号图的另一个示例。您可以看到,只要条件保持有效,您可能会得到连续的五连小阳线,但这并不一定意味着对趋势延续的信心加强。

图 5-4. 银的信号图

表 5-2 总结了五连小阳线模式的表现。

表 5-2. 五连小阳线模式:绩效摘要表

资产命中率收益因子风险-收益比信号
欧元/美元55.21%0.930.762032
USDCHF57.28%0.980.732004
英镑/美元58.08%1.060.762052
美元/加元59.04%1.040.722146
BTCUSD57.49%1.090.81854
ETHUSD58.25%0.930.67800
黄金57.93%1.160.841883
S&P50059.44%1.120.77217
富时 100 指数58.96%1.050.73212

结果在多个市场上与实现的风险-回报比接近保本点。请记住来自“编码性能评估函数”,只有实现的风险-回报比才有意义,而命中率没有任何意义。这就是为什么在 USDCHF 上的 57.28%的命中率并不令人印象深刻,因为每笔交易您冒险1来赚取1 来赚取0.76。这也可以通过小于 1.00 的利润因子来看出。

主要结论是五胞胎模式应与其他技术结合使用,同时优化进出场点,以获得更好的指标。

双重麻烦模式

双重麻烦模式使用外生变量进行验证,这意味着您从名为平均真实范围(ATR)的波动率指标中借用信息来验证模式信号。

让我们首先定义波动率的概念,并了解 ATR,然后介绍双重麻烦模式。

波动率是交易和投资中的关键概念之一,因为它直接与风险相关,间接与回报相关。波动的资产或变量是其回报在其平均值周围大幅波动的资产或变量。

图 5-5 显示了低波动率线(变动较小的线)和高波动率线(波动较大的线)。

图 5-5。高低波动性变量的比较

您可以使用以下代码片段自行编码:

`# Importing the necessary libraries`
import numpy as np
import matplotlib.pyplot as plt

`# Creating high volatility noise`
hv_noise = np.random.normal(0, 1, 250)

`# Creating low volatility noise`
lv_noise = np.random.normal(0, 0.1, 250)

`# Plotting`
plt.plot(hv_noise, color = 'red', label = 'High Volatility')
plt.plot(lv_noise, color = 'blue', label = 'Low Volatility')
plt.axhline(y = 0, color = 'black', linewidth = 1)
plt.grid()
plt.legend()

我使用了一个名为numpy的函数random.normal(),它从正态分布中输出随机样本。正态分布是一个具有均值的概率连续函数,将数据对称地分布在均值周围。接近均值的数据比远离均值的数据更频繁发生。从视觉上看,正态分布的数据呈现出中间值为均值的平滑钟形曲线。

不同类型的波动性可以总结如下:

历史波动率

这是一段特定时间内的实现波动率。尽管这是向后看的,历史波动率通常用作未来波动率的期望。历史测量的一个例子是标准差。

在继续之前,我想提到一种称为衍生品的金融工具。衍生品是交易者用于以特定方式交易市场的产品。例如,远期合约是一种衍生品合约,买方在后续时间锁定资产价格。远期合约是一种义务。另一种衍生品是期权。期权是以现在支付保费(期权的价格)的方式,在未来以特定价格购买某种资产的权利,买方在想购买标的股票时行使他们的期权;否则,他们可以让期权到期。

隐含波动率

在其最简单的定义中,隐含波动率是当输入到 Black-Scholes 方程中时,可以得出期权市场价格的度量。(Black-Scholes 方程是用于定价期权的数学公式。期权的价格是买方支付的保费,以购买期权,在某个特定到期日之前,以预定的价格购买某种资产。)它是预期未来的实际波动性。它有一个时间尺度:期权的到期日。

远期波动率

未来特定期间的波动性。

实际波动率

任何特定时间的波动量,也称为局部波动率。这个度量难以计算,没有时间尺度。

最基本的波动性类型是标准偏差。它是描述性统计的支柱之一。首先,我必须解释方差。

方差是作为离散度量计算的,计算方法是从均值计算的平方偏差。你取平方偏差,以强制距离均值为非负,然后取方差的平方根,从而将其转换为标准偏差,并使该度量具有与均值相同的单位。

注意

通过平方偏差,你可以避免负距离测量,通过取平方根,你可以将苹果(标准偏差)与苹果(平均值)进行比较。

因此,方差通过以下数学公式计算:

σ 2 = 1 n ∑ i=1 n (x i -χ) 2

根据这个逻辑,标准偏差因此如下所示:

σ = 1 n ∑ i=1 n (x i -χ) 2

通俗地说,标准偏差是在数据集中分析每个值时,平均距离离均值的期望距离。

在理解波动性的概念后,让我们来看看你必须使用的波动性指标,以找到双重麻烦模式,即 ATR。

注意

ATR 是衡量波动性的另一种方法。类似于标准偏差,ATR 考虑了其计算中的高点和低点,因此比标准偏差更完整。

ATR 用作历史波动率的测量标准。它由 Wilder Welles Jr.开发,他也是 RSI 的创造者,在第三章讨论的指标中提到。ATR 的第一个构建模块是真实范围。我们来看看如何计算真实范围。

假设您有一个 OHLC 数组。 对于每个小时,真实范围只是三个价格差中的最大值:

  • High − Low

  • High − Previous close

  • Previous close − Low

一旦您从中获得了最大收益,您只需对真实范围的特定回顾期进行平滑平均即可获得 ATR。

由于在恐慌和价格下跌期间,您会看到波动性上升,所以在这些时期 ATR 很可能会上升。 同样,在持续上涨或下跌的时期,ATR 往往会下降。 图 5-6 显示了 EURUSD 的一个示例,其中包含 10 期 ATR 测量值。 看一下图表,你能说什么?

图 5-6. EURUSD 与 10 期 ATR

很明显,市场及其 ATR 测量值之间存在负相关性。 这是相当普遍的,因为高波动性通常与恐惧(市场下跌)相关联,而低波动性通常与贪婪(市场上涨)相关联。 相关性并非完美,但从长期来看,它在统计上是负面的。

ATR 的代码可以在以下代码片段中找到。

注意

确保您已经在第三章中定义了smoothed_ma()函数。 ATR 是特定回顾期内真实范围的平滑平均值。 因此,它不是简单的平均值。

def atr(data, lookback, high_column, low_column, close_column, position):

    data = add_column(data, 1)

    for i in range(len(data)):

        try:

            data[i, position] = max(data[i, high_column] - \
                                data[i, low_column], abs(data[i, \
                                high_column] - data[i - 1, close_column]),\
                                abs(data[i, low_column]  - \
                                data[i - 1, close_column]))

        except ValueError:

            pass

    data[0, position] = 0   

    data = smoothed_ma(data, 2, lookback, position, position + 1)

    data = delete_column(data, position, 1)

    data = delete_row(data, lookback)

    return data

现在您已经准备好了解 Double Trouble 模式,这是一种两蜡烛的趋势跟随配置,通常表明总体方向的持续。

看涨的 Double Trouble 模式由两个看涨蜡烛组成,第一个收盘价低于第二个收盘价。 第二个蜡烛必须至少是前一个蜡烛的 10 期 ATR 的两倍大(从高到低)。

看涨的 Double Trouble 基于市场心理的狂喜。 另一种解释是,它可能是一种空头挤压形式,这可能进一步提高看涨退出的概率。

注意

空头挤压是市场上价格迅速上涨的异常情况。 在空头挤压之前,市场必须有大量的空头卖家。 迅速的价格上涨是由空头卖家的止损订单触发而放大的。

图 5-7 说明了一个看涨的 Double Trouble 模式。

图 5-7. 一个看涨的 Double Trouble 模式

看跌的 Double Trouble 模式由两个看跌蜡烛组成,第一个收盘价高于第二个收盘价。 第二个蜡烛必须至少是前一个蜡烛 10 期 ATR 的两倍大(从高到低)。

图 5-8 说明了一个看跌的 Double Trouble 模式。

图 5-8. 一个看跌的 Double Trouble 模式

现在清楚了,Double Trouble 模式高度依赖于波动性的出现。只有在当前高点和当前低点之间的距离是前一小时 10 周期 ATR 的两倍时,才能验证这种模式。

算法上说,Double Trouble 模式的代码如下:

def signal(data, open_column, high_column, low_column, close_column, 
           atr_column, buy_column, sell_column):

    data = add_column(data, 5)    

    for i in range(len(data)):  

       try:

    `# Bullish pattern`
           if data[i, close_column] > data[i, open_column] and \               data[i, close_column] > data[i - 1, close_column] and \               data[i - 1, close_column] > data[i - 1, open_column] and \               data[i, high_column] - data[i, low_column] > (2 * data[i - \               1, atr_column]) and data[i, close_column] - data[i, \               open_column] > data[i - 1, close_column] - data[i - 1, \               open_column] and data[i, buy_column] == 0:

                    data[i + 1, buy_column] = 1 

           `# Bearish pattern`
           elif data[i, close_column] < data[i, open_column] and \               data[i, close_column] < data[i - 1, close_column] and \               data[i - 1, close_column] < data[i - 1, open_column] and \               data[i, high_column] - data[i, low_column] > (2 * data[i - \               1, atr_column]) and data[i, open_column] - data[i, \               close_column] > data[i - 1, open_column] - data[i - 1, \               close_column] and data[i, sell_column] == 0:

                    data[i + 1, sell_column] = -1 

       except IndexError:

            pass

    return data

信号函数使用abs()函数,该函数获取括号内数字的绝对值。这用于衡量蜡烛的大小。

注意

通过计算 ATR,您使用第五列(索引=4)。因此,Double Trouble 模式的买入和卖出信号必须在第六列和第七列(索引=5 和索引=6)中,与以前的模式不同,以前没有计算过中间指标。在调用函数之前,请确保转移列。

图 5-9 和 5-10 展示了富时 100 和 BTCUSD 的信号图表。

图 5-9. 富时 100 的信号图表

图 5-10. BTCUSD 的信号图表

表 5-3 总结了 Double Trouble 模式的表现。

表 5-3. Double Trouble 模式:绩效摘要表

资产命中率盈利因子风险-回报比信号数
EURUSD51.54%1.030.972103
USDCHF50.47%1.031.012106
GBPUSD50.06%0.980.982155
USDCAD50.86%1.000.961787
BTCUSD53.59%1.211.051056
ETHUSD56.76%1.300.99953
GOLD51.76%1.101.022007
S&P50054.00%1.321.13237
FTSE10045.95%0.620.73198

您可以看到,Double Trouble 模式表现优于 Quintuplets 模式,因为它具有相对更好的盈利因子和风险-回报比。

这些结果表明,Double Trouble 模式可能比 Quintuplets 模式更具预测性。这也表明,考虑到波动性可以在模式识别领域提供新的见解和机会。

Bottle 模式

这是我发现的最简单和最直观的模式之一。它依赖于两根蜡烛来发出趋势延续的信号。我将其称为Bottle模式,因为第二根蜡烛看起来像一个瓶子。这种模式还标志着间隙的回归,因为这是验证牛市或熊市信号所需的条件之一。

看涨的 Bottle 模式由一根看涨蜡烛组成,后跟另一根看涨蜡烛,其低端无影线,但高端有影线。同时,第二根蜡烛必须在上一个蜡烛的收盘价下方开盘,这被认为是向下间隙(或内部间隙)。

该模式可用于确认上涨继续,因为其基础心理是市场在开盘后未能创新低,表明强劲的看涨压力。图 5-11 说明了看涨的 Bottle 模式。

图 5-11. 一个牛市 Bottle 模式

熊市 Bottle 模式由一根熊市蜡烛图组成,后跟另一根熊市蜡烛图,其上无上影线,但下面有一根下影线。同时,第二根蜡烛图的开盘必须高于最后一根蜡烛图的收盘,被视为向上间隙。图 5-12 展示了熊市 Bottle 模式。

图 5-12. 一个熊市 Bottle 模式

辨别配置相对容易,但您必须小心遵守所有条件,因为有时候可能不会出现间隙,从而使模式失效。

您可以用以下方式表达模式的信号功能:

def signal(data, open_column, high_column, low_column, close_column, 
           buy_column, sell_column):

    data = add_column(data, 5)    

    for i in range(len(data)):  

       try:

      `# Bullish pattern`
           if data[i, close_column] > data[i, open_column] and \               data[i, open_column] == data[i, low_column] and \               data[i - 1, close_column] > data[i - 1, open_column] and \               data[i, open_column] < data[i - 1, close_column] and \               data[i, buy_column] == 0:

                    data[i + 1, buy_column] = 1 

      `# Bearish pattern`
           elif data[i, close_column] < data[i, open_column] and \                 data[i, open_column] == data[i, high_column] and \                 data[i - 1, close_column] < data[i - 1, open_column] and \                 data[i, open_column] > data[i - 1, close_column] and \                 data[i, sell_column] == 0:

                    data[i + 1, sell_column] = -1 

       except IndexError:

            pass

    return data

此时,您应该理解条件是如何书写的,因此这些条件应该变得非常自然。此模式的简单性使代码基础。

看一下信号实际操作(图 5-13),然后再进行回测和解读结果。

图 5-13. USDCHF 上的信号图表

首先注意到,在过去的 100 小时内,USDCHF 只有两次熊市 Bottle 模式。这是正常的,有时会发生,特别是当条件要求平等时。图 5-14 显示了 AUDJPY,在过去的 100 个交易小时内也可以看到一个熊市信号。

图 5-14. AUDJPY 上的信号图表
注意

您可以使用四舍五入函数增加 Bottle 模式的信号频率。我选择不这样做,以保持模式的真实本质。

表 5-4 总结了 Bottle 模式的表现。

表 5-4. Bottle 模式:表现总结表

资产命中率盈利因子风险-收益比信号数
EURUSD51.39%0.990.94395
USDCHF52.85%1.171.04507
GBPUSD50.75%0.850.83398
USDCAD50.48%1.141.11513
BTCUSD50.44%0.980.96337
ETHUSD50.95%0.830.80365
GOLD47.98%0.820.89471
S&P50041.81%0.721.0155
FTSE10053.91%1.811.55115

这种模式在 USDCHF 和 FTSE 100 上的表现似乎优于其他回测资产。重要的是要知道,无论是好的还是坏的模式,都不太可能在每个市场上起作用;因此,当您找到一个好的模式时,必须在正确的市场上交易。

最简单的例子是趋势市场上反转模式的表现不佳,以及区域市场上继续模式的表现不佳。请记住,您要寻找的是好的技术(模式或策略),而不是完美的技术

弹弓模式

此模式的名称来自于它处理确认新趋势的突破系统。因此,弹弓模式是一种四蜡烛线趋势检测系统,它在突破发生后使用回调方法。定义可能看起来很复杂,但实际上很简单。让我们从看涨弹弓的条件开始。

首先,该模式的特征是有一个首个看涨蜡烛线,随后是一个更高的蜡烛线,确认了看涨倾向,然后是另外两个蜡烛线,后者未突破前者的高点。最后,最后一个蜡烛线的低点必须等于或低于第一个蜡烛线的高点,且收盘价高于第二个蜡烛线的最高点。第二个和第三个蜡烛线的颜色没有严格的规则。图 5-15 显示了完美的看涨弹弓模式。

图 5-15. 看涨弹弓模式

看跌弹弓模式(图 5-16)的特点是有一个首个看跌蜡烛线,随后是一个较低的蜡烛线,确认了看跌倾向,然后是另外两个蜡烛线,后者未突破前者的低点。最后,最后一个蜡烛线的高点必须等于或高于第一个蜡烛线的低点,且收盘价低于第二个蜡烛线的最低点。

图 5-16. 看跌弹弓模式

检测弹弓模式有些复杂,因为条件和其罕见性,但可以通过算法简化,如下所示:

def signal(data, open_column, high_column, low_column, close_column, 
           buy_column, sell_column):

    data = add_column(data, 5)    

    for i in range(len(data)):  

       try:

    `# Bullish pattern`
           if data[i, close_column] > data[i - 1, high_column] and \               data[i, close_column] > data[i - 2, high_column] and \               data[i, low_column] <= data[i - 3, high_column] and \               data[i, close_column] > data[i, open_column] and \               data[i - 1, close_column] >= data[i - 3, high_column] and \               data[i - 2, low_column] >= data[i - 3, low_column] and \               data[i - 2, close_column] > data[i - 2, open_column] and \               data[i - 2, close_column] > data[i - 3, high_column] and \               data[i - 1, high_column] <= data[i - 2, high_column]: 

                    data[i + 1, buy_column] = 1 

           `# Bearish pattern`
           elif data[i, close_column] < data[i - 1, low_column] and \                 data[i, close_column] < data[i - 2, low_column] and \                 data[i, high_column] >= data[i - 3, low_column] and \                 data[i, close_column] < data[i, open_column] and \                 data[i - 1, high_column] <= data[i - 3, high_column] and \                 data[i - 2, close_column] <= data[i - 3, low_column] and \                 data[i - 2, close_column] < data[i - 2, open_column] and \                 data[i - 2, close_column] < data[i - 3, low_column] and \                 data[i - 1, low_column] >= data[i - 2, low_column]:   

                    data[i + 1, sell_column] = -1 

       except IndexError:

            pass

    return data

图 5-17 显示了黄金商品的示例,突出了弹弓模式给出的信号。

图 5-17. 黄金信号图

该模式通常用于短期趋势延续走势;因此,目标不是在同一方向持续几天,而是至少形成边际新高点(看涨弹弓)或新低点(看跌弹弓)。

因此,退出策略可以极大地影响此模式的结果。尽管如此,我使用与其他模式相同的条件进行回测(在下一个信号出现时退出,无论是看涨还是看跌)。

实际上,您必须根据风险和回报偏好制定自己的入场和退出规则,以便优化预期结果。图 5-18 显示了 AUDNZD 的示例。

图 5-18. AUDNZD 信号图

表 5-5 总结了弹弓模式的结果。

表 5-5. 弹弓模式:绩效摘要表

资产命中率盈利因子风险-回报比信号
欧元美元50.03%0.980.981591
美元瑞郎51.81%0.960.901621
英镑美元48.27%1.011.081622
美元加元48.61%0.940.991728
BTC 美元52.01%0.880.82721
以太坊美元48.52%1.011.07577
黄金47.90%0.850.931332
S&P50049.36%1.011.04158
FTSE10057.14%1.381.04189

与其他蜡烛图案相比,弹弓模式的信号数量相对较多。然而,由于受到退出技术的影响(将在后续章节中介绍),除了富时 100 外,其可预测性相对较低。

H 模式

H模式是一种三根蜡烛的连续形态。看涨的 H 模式(图 5-19)由一个看涨的蜡烛后跟一个不确定的蜡烛组成³,其开盘价等于收盘价。接下来,第三根蜡烛必须是看涨的,其收盘价必须高于不确定蜡烛的收盘价。最后,第三根蜡烛的低点必须高于不确定蜡烛的低点。

图 5-19. 一个看涨的 H 模式

熊市 H 模式(图 5-20)由一个熊市蜡烛后跟一个不确定的蜡烛组成;接下来,第三根蜡烛必须是熊市的,其收盘价必须低于不确定蜡烛的收盘价。最后,第三根蜡烛的高点必须低于不确定蜡烛的高点。

图 5-20. 一个熊市 H 模式

下面的代码片段显示了如何扫描 H 模式:

def signal(data, open_column, high_column, low_column, close_column, 
           buy_column, sell_column):

    data = add_column(data, 5)    

    for i in range(len(data)):  

       try:

           `# Bullish pattern`
           if data[i, close_column] > data[i, open_column] and \               data[i, close_column] > data[i - 1, close_column] and \               data[i, low_column] > data[i - 1, low_column] and \               data[i - 1, close_column] == data[i - 1, open_column] and \               data[i - 2, close_column] > data[i - 2, open_column] and \               data[i - 2, high_column] < data[i - 1, high_column]:

                    data[i + 1, buy_column] = 1 

           `# Bearish pattern`
           elif data[i, close_column] < data[i, open_column] and \                 data[i, close_column] < data[i - 1, close_column] and \                 data[i, low_column] < data[i - 1, low_column] and \                 data[i - 1, close_column] == data[i - 1, open_column] and \                 data[i - 2, close_column] < data[i - 2, open_column] and \                 data[i - 2, low_column] > data[i - 1, low_column]:

                    data[i + 1, sell_column] = -1 

       except IndexError:

            pass

    return data

图 5-21 展示了 S&P 500 生成信号的示例。显然,该模式在实际中可能较为罕见,这取决于市场的特性。理论上,趋势跟随模式在趋势市场上的平均表现比区间市场要好。

鉴于股票大多处于趋势状态,性能摘要表显示,H 模式在股票指数上表现优异。

图 5-21. S&P 500 上的信号图表

模式通常有所谓的潜在目标。到目前为止,你已经在假设在下一个信号时退出的情况下对它们进行了回测。这是可以接受的,因为你希望通过对比各种模式的结果来进行客观评估。

使用本书中介绍的 H 模式和其他现代蜡烛图案,我发现强行施加某种退出并没有真正增加价值,因为每个市场的表现都不同。因此,最好是根据自己的判断使用退出策略,或者如果仅仅依据图案交易,则在下一个信号时退出。

图 5-22 展示了 AUDNZD 货币对小时值上生成的信号。

图 5-22. AUDNZD 上的信号图表

现在让我们来看看回测结果,并看看如何解读它们(参见表 5-6)。

表 5-6. H 模式:性能摘要表

资产命中率盈利因子风险-回报比信号数
EURUSD51.56%0.890.84128
美元/瑞郎45.83%0.770.91144
英镑/美元44.68%0.931.1594
美元/加元57.49%1.310.97120
比特币/美元61.53%3.252.0326
以太坊/美元41.83%0.550.7798
黄金65.38%2.551.3452
标准普尔 500 指数59.64%1.330.9057
富时 100 指数50.00%1.351.3536

这种模式似乎具有更强的预测力,但缺点在这里显而易见:信号的频率。你可以清楚地看到交易的缺乏。正如预期的那样,在标普 500 指数和富时 100 等趋势市场上,你会看到比在美元/加元和英镑/美元等区间市场上更好的结果。

¹ 当市场参与者预期由于极端条件而出现逆转,但市场继续保持初始状态时,就会发生这种事件。

² 美元/土耳其里拉是以 1 美元兑换土耳其里拉的价值。

³ 犹豫模式也被称为十字星。

第六章:经典反向模式

到目前为止,您应该已经熟悉趋势跟随的概念,即在预期其持续的情况下,骑着现有趋势前进的技术。现在是时候看看反向模式,这些模式信号可能发生逆转或至少是初始动作的修正。因此,反向模式建议的策略是与其骑趋势相反,而是逆市操作。

本章涵盖了经典的反向模式。请记住,所谓的经典是指在技术分析领域中已知和已建立的模式。本章的目的是创建反向模式的客观条件,并对其进行回测,以便您对其频率和可预测性形成自己的看法。

阴阳线图案

每当有人提到蜡烛图模式时,许多人会想到阴阳线图案,因为这是最为人熟知和直观的配置。日语中,“doji”的意思是“错误”,这是合理的,因为交易者将其标记为一种犹豫图案。

与光头光脚图案类似,阴阳线图案是一种开盘价等于收盘价的单根蜡烛配置。这就是为什么阴阳线是一种犹豫图案。

要区分牛市阴阳线和熊市阴阳线,你必须检查前一根蜡烛和其后一根蜡烛。图 6-1 展示了理论上的牛市阴阳线配置。在下跌市场中,出现像阴阳线这样的犹豫蜡烛可能是变向的第一个线索。它必须通过随后的牛市蜡烛确认。

图 6-1. 牛市阴阳线

相比之下,图 6-2 展示了理论上的熊市阴阳线配置。在上升市场中,出现阴阳线可能预示着当前方向可能发生变化。类似地,这必须通过随后的熊市蜡烛确认。

图 6-2. 熊市阴阳线

阴阳线图案的理论基础在于力量平衡的概念。当买方多于卖方时,力量平衡向上倾斜,因为需求大于供给;因此市场上升。

当需求开始失去动力并接近供给水平时,就会出现均衡,这表现为在塑造新高点的动力减弱。均衡出现在出现阴阳线图案时,收盘价等于开盘价,表明双方都未能成功将价格推向各自期望的方向。

相反,当供给相对于需求增加时,市场应开始下跌。阴阳线形成均衡点,市场从牛市转向预期的熊市制度。

有趣的是,还有其他类型的阴阳线图案,比如以下几种。

蜻蜓十字星

这种类型的十字星其高价等于收盘价和开盘价。这意味着它是一种只有低价与其他不同的十字星。它也是一个犹豫模式,根据之前的价格走势可以是看涨或看跌的。这种模式的问题在于你可以用两种方式来理解它:一种是市场没有形成更高的高点,因此未能继续上涨,形成看跌倾向;另一种是市场未能收盘低点并回升至原点,形成看涨倾向。无论如何,它必须像所有十字星模式一样被视为反转模式。

Figure 6-3 描述了一个蜻蜓十字星。

Figure 6-3. 蜻蜓十字星

墓碑十字星

这与蜻蜓十字星相反。它遵循相同的直觉,并具有相同的期望,这取决于之前的价格走势。在市场下跌的情况下,如果遇到墓碑十字星,则必须有一个看涨倾向。同样地,如果市场上涨并遇到墓碑十字星,则必须有一个看跌倾向。

Figure 6-4 描述了一个墓碑十字星。

Figure 6-4. 墓碑十字星

平十字星

这种模式通常出现在零售市场关闭或市场接近假期时。低流动性和低交易量是平十字星的主要特征,不太可能指示市场方向。然而,它仍然是一种市场犹豫的类型,其中四个价格相等。这就是为什么它看起来像一条水平线。

Figure 6-5 描述了一个平十字星。

Figure 6-5. 平十字星

双十字星

犹豫可能持续超过一个周期。有可能会看到多个连续的十字星模式。两个连续的十字星模式表示持续的犹豫,而逆势交易者仍在犹豫和努力推动市场朝他们的方向发展,这可能降低了反转的信心。一般来说,两个十字星模式不比一个十字星模式更有价值。

Figure 6-6 描述了一个双十字星。

Figure 6-6. 双十字星

三星十字星

这可能是所有其他十字星模式中最稀有的一种。它的特点是有三个十字星模式,中间的一个跳过其他两个。

Figure 6-7 描述了一个三星十字星。

Figure 6-7. 三星十字星
注意

十字星模式并不完美,因为它可能多次出现后市没有任何反应。这是因为开盘价和收盘价之间的平衡并不一定意味着预期的买卖活动达到了平衡。

算法上,条件并不复杂。你需要像前面展示的那样四舍五入数值,然后遵循以下直觉:

  • 如果当前收盘价格高于当前开盘价格,前一次收盘价格等于开盘价格,并且前一次收盘价格低于前一次开盘价格,则在下一行打印 1。

  • 如果当前收盘价格低于当前开盘价格,前一次收盘价格等于开盘价格,并且前一次收盘价格高于前一次开盘价格,则在下一行打印−1。

我之前提到道琼斯蜡烛图形是一种单蜡烛配置。这是因为道琼斯蜡烛图具有相同的开盘和收盘价格。然而,要确认该图案,以便算法预测下一个可能的方向,您必须施加前述条件。

您可以通过以下代码片段编写道琼斯蜡烛图案的信号函数:

def signal(data, open_column, close_column, buy_column, sell_column):

    data = add_column(data, 5)    

    for i in range(len(data)):  

       try:

           `# Bullish pattern`
           if data[i, close_column] > data[i, open_column] and \               data[i, close_column] > data[i - 1, close_column] and \               data[i - 1, close_column] == data[i - 1, open_column] and \               data[i - 2, close_column] < data[i - 2, open_column] and \               data[i - 2, close_column] < data[i - 2, open_column]:

                    data[i + 1, buy_column] = 1 

           `# Bearish pattern`
           elif data[i, close_column] < data[i, open_column] and \               data[i, close_column] < data[i - 1, close_column] and \               data[i - 1, close_column] == data[i - 1, open_column] and \               data[i - 2, close_column] > data[i - 2, open_column] and \               data[i - 2, close_column] > data[i - 2, open_column]:

                    data[i + 1, sell_column] = -1 

       except IndexError:

            pass

    return data

图 6-8 显示了美元/瑞士法郎的信号图表。

图 6-8. 美元/瑞士法郎信号图表

显然,道琼斯蜡烛图案并不罕见。图 6-9 展示了富时 100 的另一个信号图表。

图 6-9. 富时 100 信号图表

表 6-1 显示了道琼斯蜡烛图案的性能摘要。在检查结果之前,让我们回顾之前提到的交易条件:

  • 入场是在验证当前收盘价格信号后的下一个开盘价格上完成的。

  • 出局是在任一方向(牛市或熊市)获得另一个信号时完成的。

  • 交易成本在性能评估指标中被省略。

  • 没有风险管理系统。

表 6-1. 道琼斯蜡烛图案:性能摘要表

资产命中率盈利因子风险-回报比信号数
欧元/美元45.86%0.971.141537
美元/瑞士法郎45.33%0.831.001661
英镑/美元49.78%1.031.041177
美元/加元48.06%0.921.001315
比特币/美元48.69%0.930.98345
以太坊/美元45.69%0.911.091254
黄金46.17%1.051.223166
标准普尔 500 指数48.84%1.111.16303
富时 100 指数50.27%1.021.00179

经过回测的资产显示,道琼斯蜡烛图案是一种常见的配置,但一般不具有预测性质。根据我的经验,在依赖道琼斯蜡烛图来预测未来反应之前,定义当前市场趋势是至关重要的。例如,在牛市趋势市场中,熊市道琼斯蜡烛图案不太可能提供高质量的信号,但在横盘市场中,效力增加(记住看不见的手)。

总结一下,道琼斯蜡烛图案由于其简单和配置的丰富性是技术图案识别的基础,但远非最具预测性的图案。

榄寡妇线形态

日语中与“怀孕”同义的旧词相符,Harami模式是一个经典的反向两根蜡烛结构,第二根蜡烛的实体被第一根蜡烛的实体包围。通常有严格版和灵活版两种 Harami 模式,本章将分别讨论。让我们从灵活版本开始。

牛市阴线显示第一根熊市蜡烛(母亲)后跟第二根牛市蜡烛(宝宝),它的收盘价低于第一根蜡烛的开盘价,并且开盘价高于第一根蜡烛的收盘价。在灵活版本中,两根蜡烛的高点和低点不相关,而在严格版本中讨论。图 6-10 展示了一个灵活的牛市阴线。

图 6-10. 一个牛市的灵活 Harami

熊市阴线显示第一根牛市蜡烛(母亲)后跟第二根熊市蜡烛(宝宝),它的开盘价低于第一根蜡烛的收盘价,并且收盘价高于第一根蜡烛的开盘价。图 6-11 展示了一个灵活的熊市 Harami。

图 6-11. 一个熊市的灵活 Harami

Harami模式的心理解释是,逐渐减小的蜡烛尺寸暗示初期趋势的犹豫,并且可能会有反转迹象。一般来说,对于经典模式,可能存在一种自我实现预言的情况,其中一定百分比的可预测性归因于该模式的声誉,而非直观的解释。

注意

一些模式可能没有有效的直觉,但仍然受到专业交易员的监视。这是因为许多其他交易员也在监视它们,形成了可能增加其可预测性的无限螺旋。

根据算法,条件应遵循以下直觉:

  • 如果当前的收盘价高于当前的开盘价和前一次的收盘价,并且当前的开盘价高于前一次的收盘价但低于前一次的开盘价,则在下一个买入行中打印 1。

  • 如果当前的收盘价低于当前的开盘价和前一次的收盘价,并且当前的开盘价低于前一次的收盘价但高于前一次的开盘价,则在下一个卖出行中打印-1。

灵活 Harami 模式的信号功能如下:

def signal(data, open_column, high_column, low_column, close_column, 
           buy_column, sell_column):

    data = add_column(data, 5)    

    for i in range(len(data)):  

       try:

           `# Bullish pattern`
           if data[i, close_column] < data[i - 1, open_column] and \               data[i, open_column] > data[i - 1, close_column] and \               data[i, high_column] < data[i - 1, high_column] and \               data[i, low_column] > data[i - 1, low_column] and \               data[i, close_column] > data[i, open_column] and \               data[i - 1, close_column] < data[i - 1, open_column] and \               data[i - 2, close_column] < data[i - 2, open_column]:

                    data[i + 1, buy_column] = 1 

           `# Bearish pattern`
           elif data[i, close_column] > data[i - 1, open_column] and \                 data[i, open_column] < data[i - 1, close_column] and \                 data[i, high_column] < data[i - 1, high_column] and \                 data[i, low_column] > data[i - 1, low_column] and \                 data[i, close_column] < data[i, open_column] and \                 data[i - 1, close_column] > data[i - 1, open_column] and \                 data[i - 2, close_column] > data[i - 2, open_column]:

                    data[i + 1, sell_column] = -1 

       except IndexError:

            pass

    return data

图 6-12 显示了 ETHUSD 上的一个信号图表,其中在整体上涨趋势中的小幅熊市修正中出现了一个牛市的 Harami。

图 6-12. ETHUSD 的信号图表

表 6-2 总结了灵活 Harami 模式的表现。

表 6-2. 灵活 Harami 模式:性能总结表

资产命中率盈利因子风险-收益比信号
EURUSD50.06%1.151.15759
USDCHF53.14%1.120.99668
GBPUSD49.81%1.061.06823
USDCAD52.15%1.060.97696
BTCUSD48.19%0.961.04554
ETHUSD48.81%0.630.66379
GOLD48.73%0.770.82870
S&P50053.75%1.120.9680
FTSE10057.44%1.421.0594

图 6-13 展示了 GBPUSD 上的一个熊背离信号图。

图 6-13. GBPUSD 上的信号图

现在让我们转向严格熊背离形态。看涨的熊背离显示第一个看跌蜡烛(母蜡烛),后跟第二个看涨蜡烛(子蜡烛),其高价低于第一个蜡烛的开盘价,低价高于第一个蜡烛的收盘价。图 6-14 说明了一个看涨的严格熊背离形态。

图 6-14. 一个看涨的严格熊背离形态

熊背离形态显示第一个看涨蜡烛(母蜡烛),后跟第二个看跌蜡烛(子蜡烛),其高价低于第一个蜡烛的收盘价,低价高于第一个蜡烛的开盘价。图 6-15 说明了一个严格熊背离形态。

图 6-15. 一个熊背离严格形态

从算法角度看,条件应按以下直觉进行:

  • 如果当前蜡烛图是看涨的,并完全包含在前一个看跌蜡烛图之内,则在下一个买入行中打印 1。

  • 如果当前蜡烛图是看跌的,并完全包含在前一个看涨蜡烛图之内,则在下一个卖出行中打印 -1。

严格熊背离形态的信号函数如下:

def signal(data, open_column, high_column, low_column, close_column, 
           buy_column, sell_column):

    data = add_column(data, 5)    

    for i in range(len(data)):  

       try:

           `# Bullish pattern`
           if data[i, close_column] > data[i, open_column] and \               data[i, high_column] < data[i - 1, open_column] and \               data[i, low_column] > data[i - 1, close_column] and \               data[i - 1, close_column] < data[i - 1, open_column] and \               data[i - 2, close_column] < data[i - 2, open_column]:

                    data[i + 1, buy_column] = 1 

  `# Bearish pattern`
           elif data[i, close_column] < data[i, open_column] and \                 data[i, high_column] < data[i - 1, close_column] and \                 data[i, low_column] > data[i - 1, open_column] and \                 data[i - 1, close_column] > data[i - 1, open_column] and \                 data[i - 2, close_column] > data[i - 2, open_column]:

                    data[i + 1, sell_column] = -1 

       except IndexError:

            pass

    return data

由于严格熊背离形态的罕见性,回测结果并不是非常有信息性。数据分析需要大量输出;因此,少数信号不太可能得出任何健壮的结论。在实践中,你不应常见到严格熊背离形态,而更多是灵活版本。

总结一下,熊背离形态是一个由两根蜡烛图组成的配置,可以有两种变化形式:灵活和严格。前者版本最常用,因为有足够的数据来评估,而后者由于条件严格而极其罕见。

熊势颈线形态

熊势颈线形态是一个容易理解的两根蜡烛图组合。看涨的熊势颈线由第一个看跌蜡烛图和第二个看涨蜡烛图组成,后者开盘价低于前者,但收盘价与第一个蜡烛图相同。图 6-16 说明了一个看涨的熊势颈线形态。

图 6-16. 一个看涨的熊势颈线形态

熊势颈线形态由第一个看涨蜡烛图和第二个看跌蜡烛图组成,后者开盘价高于前者,但收盘价与第一个蜡烛图相同。图 6-17 展示了一个熊势颈线形态。

图 6-17. 一个熊势颈线形态

自然地,根据这些条件,你需要像我之前展示的那样四舍五入数值。这是为了增加信号频率而不放弃任何条件。

Bullish On Neck 模式的心理直觉源于尽管卖家控制了局面,但向下跳空未能进一步推动市场价格下跌,买家成功收盘于前次收盘价,从而掌控了局面。Bearish On Neck 模式有相同的直觉,但方向相反,最初由买家掌控,后来卖家填补了下跳空并显示了他们的存在。

Note

On Neck 的名称来源于第二个蜡烛图看起来像是抓住第一个蜡烛图的脖子。

算法上,条件应该遵循以下步骤:

  • 如果当前收盘价高于当前开盘价且等于前次收盘价,并且当前开盘价低于前次收盘价,则在下一个买入行中打印 1。

  • 如果当前收盘价低于当前开盘价且等于前次收盘价,并且当前开盘价高于前次收盘价,则在下一个卖出行中打印-1。

On Neck 模式的信号函数如下:

def signal(data, open_column, high_column, low_column, close_column, 
           buy_column, sell_column):

    data = add_column(data, 5)    

    for i in range(len(data)):  

       try:

           `# Bullish pattern`
           if data[i, close_column] > data[i, open_column] and \               data[i, close_column] == data[i - 1, close_column] and \               data[i, open_column] < data[i - 1, close_column] and \               data[i - 1, close_column] < data[i - 1, open_column]:

                    data[i + 1, buy_column] = 1 

           `# Bearish pattern`
           elif data[i, close_column] < data[i, open_column] and \                 data[i, close_column] == data[i - 1, close_column] and \                 data[i, open_column] > data[i - 1, close_column] and \                 data[i - 1, close_column] > data[i - 1, open_column]:

                    data[i + 1, sell_column] = -1 

       except IndexError:

            pass

    return data

Figure 6-18 展示了 EURUSD 的信号图表。

Figure 6-18. Signal chart on EURUSD

Table 6-3 总结了该模式的表现。

Table 6-3. On Neck 模式:性能摘要表

Asset命中率盈利因子风险-收益比信号数
EURUSD51.30%1.141.08191
USDCHF46.36%0.881.02220
GBPUSD54.63%1.281.06194
USDCAD50.84%1.000.97177
BTCUSD44.04%0.420.5384
ETHUSD41.41%0.560.7999
GOLD51.56%1.271.19128
S&P50036.11%0.350.6136
FTSE10057.50%0.790.5840

Figure 6-19 展示了金价信号图表。

Figure 6-19. Signal chart on gold

总结来说,On Neck 模式在市场中表现出混合的结果。此外,它可能相当罕见。

Tweezers Pattern

Tweezers 模式是一个由两个蜡烛图组成的反向配置。它是最简单和最直接的反向模式之一。Bullish Tweezers 模式由第一个看跌的蜡烛图和第二个与第一个蜡烛图低点相同的看涨蜡烛图组成。Figure 6-20 展示了一个 Bullish Tweezers 模式。

Figure 6-20. A bullish Tweezers

Bearish Tweezers 模式由第一个看涨的蜡烛图和第二个与第一个蜡烛图高点相同的看跌蜡烛图组成。Figure 6-21 展示了一个 Bearish Tweezers 模式。

Figure 6-21. A bearish Tweezers
Note

该模式被称为 镊子,因为等式条件类似于一对镊子。可以说,这种命名模式有些牵强。

看涨的镊子模式的心理直觉来自于市场未能形成新低,可能已找到支撑。看跌的镊子模式来自于市场未能形成新高,可能已找到阻力。

算法上来说,条件应该遵循这种直觉:

  • 如果当前的看涨蜡烛的最低价等于前一个看跌蜡烛的最低价,则在下一个买入行中打印 1。

  • 如果当前的看跌蜡烛的最高价等于前一个看涨蜡烛的最高价,则在下一个卖出行中打印-1。

镊子模式的信号函数如下:

def signal(data, open_column, high_column, low_column, close_column, 
           buy_column, sell_column):

    data = add_column(data, 5)    

    for i in range(len(data)):  

       try:

           `# Bullish pattern`
           if data[i, close_column] > data[i, open_column] and \               data[i, low_column] == data[i - 1, low_column] and \               data[i, close_column] - data[i, open_column] < body and \               data[i - 1, close_column] - data[i - 1, open_column] < body 
              and data[i - 1, close_column] < data[i - 1, open_column] \               and data[i - 2, close_column] < data[i - 2, open_column]:

                    data[i + 1, buy_column] = 1 

           `# Bearish pattern`
           elif data[i, close_column] < data[i, open_column] and \                 data[i, high_column] == data[i - 1, high_column] and \                 data[i, close_column] - data[i, open_column] < body and \                 data[i - 1, close_column] - data[i - 1, open_column] < \                 body and data[i - 1, close_column] > data[i - 1, \                 open_column] and data[i - 2, close_column] > data[i - 2, \                 open_column]:

                    data[i + 1, sell_column] = -1 

       except IndexError:

            pass

    return data

图 6-22 展示了黄金的信号图表。你可以看到有时同一区域可能会有很多镊子形态。

图 6-22. 黄金的信号图表

表 6-4 总结了该模式的绩效。

表 6-4. 镊子模式:绩效摘要表

资产命中率盈利因子风险-收益比信号数
欧元美元50.77%1.201.171028
美元瑞郎48.27%1.121.201104
英镑美元49.32%0.890.91667
美元加元49.71%0.870.88883
比特币美元46.61%1.171.35354
以太币美元50.16%0.820.81911
黄金50.57%1.031.011038
标普 50048.61%0.961.01253
富时 10049.04%1.091.14157

总结一下,镊子模式是一个简单的构型,结果略带负面到混合。

图 6-23 显示了富时 100 的信号图表,可以在底部看到一个镊子模式。

图 6-23. 富时 100 的信号图表

Stick Sandwich 模式

Stick Sandwich 模式是一个由颜色交替的三根蜡烛组成的反向构型。看涨的 Stick Sandwich 包括首先是一根看跌蜡烛,接着是一根较小的看涨蜡烛,最后是一根比第二根蜡烛大的看跌蜡烛。图 6-24 展示了一个看涨的 Stick Sandwich 模式。

图 6-24. 一个看涨的棒形三明治

看跌的 Stick Sandwich 包括首先是一根看涨蜡烛,接着是一根较小的看跌蜡烛,最后是一根比第二根蜡烛大的看涨蜡烛。图 6-25 展示了一个看跌的 Stick Sandwich 模式。

图 6-25. 一个看跌的棒形三明治

一般来说,Stick Sandwich 模式出现在趋势中;因此,看涨的 Stick Sandwich 在看跌的价格行动之前,看跌的 Stick Sandwich 在看涨的价格行动之前出现。

棍子三明治模式的名称来源于其外部大蜡烛看起来像面包,中间蜡烛看起来像馅料的形状。

牛市棍子三明治的心理直觉来自于市场未能形成新低,可能已找到支撑(类似于镊子的直觉)。熊市棍子三明治模式来自于市场未能形成新高,可能已找到阻力。

棍子三明治的信号功能如下:

def signal(data, open_column, high_column, low_column, close_column, 
           buy_column, sell_column):

    data = add_column(data, 5)    

    for i in range(len(data)):  

       try:

           `# Bullish pattern`
           if data[i, close_column] < data[i, open_column] and \               data[i, high_column] > data[i - 1, high_column] and \               data[i, low_column] < data[i - 1, low_column] and \               data[i - 1, close_column] > data[i - 1, open_column] and \               data[i - 2, close_column] < data[i - 2, open_column] and \               data[i - 2, high_column] > data[i - 1, high_column] and \               data[i - 2, low_column] < data[i - 1, low_column] and \               data[i - 2, close_column] < data[i - 3, close_column] and \               data[i - 3, close_column] < data[i - 3, open_column]:

                    data[i + 1, buy_column] = 1 

           `# Bearish pattern`
           elif data[i, close_column] > data[i, open_column] and \                 data[i, high_column] > data[i - 1, high_column] and \                 data[i, low_column] < data[i - 1, low_column] and \                 data[i - 1, close_column] < data[i - 1, open_column] and \                 data[i - 2, close_column] > data[i - 2, open_column] and \                 data[i - 2, high_column] > data[i - 1, high_column] and \                 data[i - 2, low_column] < data[i - 1, low_column] and \                 data[i - 2, close_column] > data[i - 3, close_column] and\                 data[i - 3, close_column] > data[i - 3, open_column]:

                    data[i + 1, sell_column] = -1 

       except IndexError:

            pass

    return data

图 6-26 展示了 GBPUSD 的信号图表。

图 6-26. GBPUSD 的信号图表

图 6-27 展示了 USDCAD 的信号图表。

图 6-27. USDCAD 的信号图表

表 6-5 总结了该模式的表现。

表 6-5. 棍子三明治模式:性能总结表

资产命中率盈利因子风险-回报比信号数
EURUSD44.26%0.730.92253
USDCHF47.53%1.001.10284
GBPUSD49.37%0.970.99318
USDCAD49.12%1.011.05285
BTCUSD51.12%1.881.80178
ETHUSD50.37%1.561.54135
GOLD50.99%0.960.92251
S&P50056.86%1.190.9051
FTSE10053.84%2.622.2439

总结一下,棍子三明治模式在本章中表现略胜一筹。这使得它成为与技术指标和其他退出技术结合的有趣候选。

锤子模式

从技术上讲,锤子模式只是称为四种不同(但相似)蜡烛图形的一个名称,分别为流星,吊人,锤子和倒锤子。根据我的经验,只有锤子和倒锤子值得追求,因为它们在本节后面讨论的直觉是有效的。

牛市锤子是一个长低影线没有高影线的牛市蜡烛图。此外,它必须有一个相对较小的实体。图 6-28 说明了一个牛市锤子。

图 6-28. 一个牛市锤子

熊市锤子是一个长高影线没有短低影线的熊市蜡烛图。此外,它必须有一个相对较小的实体。图 6-29 说明了一个熊市锤子。

图 6-29. 一个熊市锤子

锤子模式的名称来自于长影线看起来像锤柄而蜡烛的实体看起来像锤头。

牛市锤子的直觉是,在时段内形成极端低点后,买家设法收高于开盘价。相反,熊市锤子的直觉是,在形成极端高点后,卖家设法收低于开盘价,从而掌控局势。

锤头模式的信号函数如下:

def signal(data, open_column, high_column, low_column, close_column, 
           buy_column, sell_column):

    data = add_column(data, 5)    

    for i in range(len(data)):  

       try:

            `# Bullish pattern`
            if data[i, close_column] > data[i, open_column] and \                abs(data[i - 1, close_column] - data[i - 1, open_column]) \                < body and min(data[i - 1, close_column], data[i - 1, \                open_column]) - data[i - 1, low_column] > 2 * wick and \                data[i - 1, close_column] == data[i - 1, high_column] and \                data[i - 2, close_column] < data[i - 2, open_column]:

                     data[i + 1, buy_column] = 1 

            `# Bearish pattern`
            elif data[i, close_column] < data[i, open_column] and \                  abs(data[i -1, close_column] - data[i - 1, open_column]) \                  < body and data[i - 1, high_column] - max(data[i - 1, \                  close_column], data[i - 1, open_column]) > 2 * wick and \                  data[i - 1, close_column] == data[i - 1, low_column] and \                  data[i - 2, close_column] > data[i - 2, open_column]:

                     data[i + 1, sell_column] = -1                      

       except IndexError:

            pass

    return data

图 6-30 展示了英镑/美元的信号图表。

图 6-30. 英镑/美元的信号图表

表 6-6 总结了该图案的表现。

表 6-6. 锤头模式:绩效总结表格

资产命中率盈利因子风险-收益比信号数
EURUSD47.82%1.241.3623
USDCHF61.11%1.931.2336
GBPUSD47.61%0.870.9621
USDCAD42.85%0.70.9428
BTCUSD52.63%2.392.1419
ETHUSD60.00%1.080.7220
GOLD47.36%1.091.2238
S&P50057.57%2.221.6333
FTSE10055.00%1.220.9920

总结一下,锤头形态是一个简单直观的配置,但相当罕见,这使得其评估有偏差。

图 6-31 展示了美元/加元的信号图表。

图 6-31. 美元/加元的信号图表

星型图案

形态是一个包含间隙和颜色交替的三蜡烛反向配置,比其他模式更不常见。这是因为其特性使得其不太可能经常发生。

看涨的星型图案,也称为晨星,由一个看跌蜡烛后跟随一个小实体蜡烛组成,前者的间隙低于它,之后是第三个看涨蜡烛,其间隙高于中间蜡烛。图 6-32 展示了一个晨星图案。

图 6-32. 晨星

看跌的星型图案,也称为晚星,由一个看涨蜡烛后跟随一个小实体蜡烛组成,前者的间隙高于它,之后是第三个看跌蜡烛,其间隙低于中间蜡烛。图 6-33 展示了一个晚星图案。

图 6-33. 晚星

星型图案的名称来自于中间的蜡烛形成孤立,使其看起来像是遥远的星星。

晨星的直觉是市场已经完美地形成了一个 U 型转折,需求现在比之前更加健康,因为平衡的转移(由第三个看涨蜡烛确认)。晚星也适用相同的直觉。

星型图案的信号函数如下:

def signal(data, open_column, high_column, low_column, close_column, 
           buy_column, sell_column):

    data = add_column(data, 5)    

    for i in range(len(data)):  

       try:

        `# Bullish pattern`
            if data[i, close_column] > data[i, open_column] and \                max(data[i - 1, close_column], data[i - 1, open_column]) \                < data[i, open_column] and max(data[i - 1, close_column], \                data[i - 1, open_column]) < data[i - 2, close_column] and \                data[i - 2, close_column] < data[i - 2, open_column]:

                     data[i + 1, buy_column] = 1 

            `# Bearish pattern`
            elif data[i, close_column] < data[i, open_column] and \                  min(data[i - 1, close_column], data[i - 1, open_column]) \
                 > data[i, open_column] and min(data[i - 1, close_column],\                  data[i - 1, open_column]) > data[i - 2, close_column] \                  and data[i - 2, close_column] > data[i - 2, open_column]:

                     data[i + 1, sell_column] = -1                      

       except IndexError:

            pass

    return data

图 6-34 展示了标准普尔 500 的信号图表。

图 6-34. 标准普尔 500 的信号图表

由于图案的罕见性,回测被省略。

刺透图案

刺透 模式是技术图案识别领域中最著名的两蜡烛形态之一。看涨的刺透模式由一个看跌蜡烛后跟随一个看涨蜡烛组成,后者开盘比前一个蜡烛的收盘价低,并且收盘价高于前一个蜡烛的开盘价。图 6-35 展示了一个看涨的刺透模式。

图 6-35. 一个看涨的刺透形态

看跌刺透形态由一根看涨蜡烛后跟一根开盘高于前一蜡烛收盘价的看跌蜡烛组成。图 6-36 展示了一个看涨刺透形态。

图 6-36. 一个看跌的刺透形态
注:

刺透形态的名称来源于第二根蜡烛从外部穿透第一根蜡烛的事实。

看涨刺透形态的直觉是,尽管市场开盘时有较低的缺口,但前一收盘价仍被超越。该形态显示出购买者不愿意放弃购买活动,这些活动阻止了市场继续下跌。类似地,看跌刺透形态中的卖方拒绝让缺口保持未填补状态,并掌控了市场。

刺透形态的信号功能如下:

def signal(data, open_column, close_column, buy_column, sell_column):

    data = add_column(data, 5)    

    for i in range(len(data)):  

       try:

           `# Bullish pattern`
           if data[i, close_column] > data[i, open_column] and \               data[i, close_column] < data[i - 1, open_column] and \               data[i, close_column] > data[i - 1, close_column] and \               data[i, open_column] < data[i - 1, close_column] and \               data[i - 1, close_column] < data[i - 1, open_column] and \               data[i - 2, close_column] < data[i - 2, open_column]:    

                    data[i + 1, buy_column] = 1 

           `# Bearish pattern`
           elif data[i, close_column] < data[i, open_column] and \                 data[i, close_column] > data[i - 1, open_column] and \                 data[i, close_column] < data[i - 1, close_column] and \                 data[i, open_column] > data[i - 1, close_column] and \                 data[i - 1, close_column] > data[i - 1, open_column] and \                 data[i - 2, close_column] > data[i - 2, open_column]: 

                    data[i + 1, sell_column] = -1 

       except IndexError:

            pass

    return data

图 6-37 展示了黄金的信号图表。

图 6-37. 黄金信号图表

图 6-38 展示了富时 100 的信号图表。

图 6-38. 富时 100 信号图表

表 6-7 总结了该形态的表现。

表 6-7. 刺透形态:表现总结表

资产命中率盈利因子风险-回报比信号
欧元兑美元51.41%0.950.901904
美元兑瑞士法郎49.26%0.930.951961
英镑兑美元50.83%0.840.811985
美元兑加拿大元50.73%0.930.901961
比特币兑美元50.88%0.870.841584
以太币兑美元48.68%0.910.961066
黄金51.30%0.960.922341
标准普尔 500 指数49.46%1.061.07186
富时 100 指数49.49%0.960.98295

刺透形态可能很常见,但其盈利能力与其他形态相比较低。

吞没形态

吞没形态,一个由两根蜡烛构成的反向模式,是 Harami 形态的镜像。有趣的是,它们都具有反向操作的特性。看涨吞没形态由第一根看跌蜡烛和随后完全包含它的看涨蜡烛组成。图 6-39 展示了一个看涨吞没形态。

图 6-39. 一个看涨吞没形态

看跌吞没形态由第一根看涨蜡烛和随后的完全包含它的看跌蜡烛组成。图 6-40 展示了一个看跌吞没形态。

图 6-40. 一个看跌吞没形态
注:

吞没形态的名称来源于第二根蜡烛完全覆盖(或吞没)第一根蜡烛的事实。

Engulfing 形态的直觉在于第二根蜡烛完全遮盖了第一根蜡烛。显然,当发生 Engulfing 时,会出现动态变化,由相反方向的更大蜡烛线表示。

Engulfing 形态的信号函数如下:

def signal(data, open_column, close_column, buy_column, sell_column):

    data = add_column(data, 5)    

    for i in range(len(data)):  

       try:

           `# Bullish pattern`
           if data[i, close_column] > data[i, open_column] and \               data[i, open_column] < data[i - 1, close_column] and \               data[i, close_column] > data[i - 1, open_column] and \               data[i - 1, close_column] < data[i - 1, open_column] and \               data[i - 2, close_column] < data[i - 2, open_column]:

                    data[i + 1, buy_column] = 1 

           `# Bearish pattern`
           elif data[i, close_column] < data[i, open_column] and \                 data[i, open_column] > data[i - 1, close_column] and \                 data[i, close_column] < data[i - 1, open_column] and \                 data[i - 1, close_column] > data[i - 1, open_column] and \                 data[i - 2, close_column] > data[i - 2, open_column]:

                    data[i + 1, sell_column] = -1 

       except IndexError:

            pass

    return data

图 6-41 显示了 EURUSD 的信号图表。

图 6-41. EURUSD 信号图表

表 6-8 总结了这种形态的表现。

表 6-8. Engulfing 形态:绩效汇总表

资产命中率盈利因子风险-收益比信号数
欧元/美元46.73%0.941.071881
美元/瑞士法郎47.46%0.951.051890
英镑/美元49.87%1.061.061989
美元/加拿大元48.96%1.001.041793
BTCUSD47.88%0.921.001251
ETHUSD47.71%1.031.13876
黄金47.08%0.971.092130
标普 500 指数50.25%0.970.96193
富时 100 指数42.49%0.640.87313

图 6-42 显示了 BTCUSD 的信号图表。

图 6-42. BTCUSD 信号图表

总结一下,Engulfing 形态在可预测性上类似于穿透形态。这两种形态可能受益于交易条件的变化,如进出场点。

弃婴形态

这并不是一个真正可交易的形态,因为它极为罕见。我只是为了教育目的而介绍它,因为你不应指望在实践中经常看到它。弃婴形态 是一个由三根蜡烛线组成的形态,其中间的蜡烛线是十字星。看涨的弃婴形态由一个看跌的蜡烛线后跟一个向下跳空的十字星蜡烛线组成,其高点不接触第一个蜡烛线的低点。最后,有第三个看涨的蜡烛线,其低点也不接触中间蜡烛线的高点。图 6-43 展示了一个看涨的弃婴形态。

图 6-43. 一个看涨的弃婴形态

看跌的弃婴形态由一个看涨的蜡烛线后跟一个向上跳空的十字星蜡烛线组成,其低点不接触第一个蜡烛线的高点。最后,有第三个看跌的蜡烛线,其高点也不接触中间蜡烛线的低点。图 6-44 展示了一个看跌的弃婴形态。

图 6-44. 一个看跌的弃婴形态
注意

弃婴形态的名称源于中间的蜡烛线完全孤立,其上下影线不接触其他两个蜡烛线的影线。

这种形态在流动性较低的股票和其他资产中可能更常见。一般来说,流动性强和主要市场很少见到这种复杂的配置。

看涨的遗弃婴儿的直觉是,市场形成了一个 U 形转折,需求现在比之前更加健康,因为平衡已经转移。同样的直觉适用于看跌的遗弃婴儿。

遗弃婴儿模式的信号函数如下:

def signal(data, open_column, high_column, low_column, close_column, 
           buy_column, sell_column):

    data = add_column(data, 5)    

    for i in range(len(data)):  

       try:

            `# Bullish pattern`
            if data[i, close_column] > data[i, open_column] and \                data[i - 1, close_column] == data[i - 1, open_column] and \                data[i - 1, high_column] < data[i, low_column] and \                data[i - 1, high_column] < data[i - 2, low_column] and \                data[i - 2, close_column] < data[i - 2, open_column]:

                     data[i + 1, buy_column] = 1 

          `# Bearish pattern`
            elif data[i, close_column] < data[i, open_column] and \                  data[i - 1, close_column] == data[i - 1, open_column] and \                  data[i - 1, low_column] > data[i, high_column] and \                  data[i - 1, low_column] > data[i - 2, high_column] and \                  data[i - 2, close_column] > data[i - 2, open_column]:

                     data[i + 1, sell_column] = -1                      

       except IndexError:

            pass

    return data

我不会展示此模式的性能,因为没有足够的数据来得出任何结论。

总结来说,遗弃婴儿主要是一个在理论上看起来很好的模式,但实际上它非常罕见,因此你无法判断它的表现。此外,检测到的少数模式并没有显示出很强的预测潜力,这使得遗弃婴儿成为一个美丽的神话构型,但实际表现不及其名声。

陀螺模式

陀螺模式是一个由三根蜡烛组成的逆势结构,类似于十字星模式,但通常更常见,间接暗示波动率上升。看涨的陀螺模式由一个看跌蜡烛后跟一个具有长影线(高点和低点)的小实体蜡烛组成。最后,出现一个看涨蜡烛来确认预期的上涨动作。图 6-45 展示了一个看涨的陀螺模式。

图 6-45. 看涨的陀螺模式

看跌的陀螺模式由一个看涨蜡烛后跟一个具有长影线(高点和低点)的小实体蜡烛组成。最后,出现一个看跌蜡烛来确认预期的下跌动作。图 6-46 展示了一个看跌的陀螺模式。

图 6-46. 看跌的陀螺模式
注意

陀螺模式的名称显然与其类似陀螺的外形有关。

陀螺模式背后的直觉与十字星模式相同,尽管它的力量较小,因为收盘价并不完全等于开盘价。然而,长影线所显示的波动性表明买家和卖家之间的斗争,并可能预示着模式之后会出现明确的方向。

陀螺模式的信号函数如下:

def signal(data, open_column, high_column, low_column, close_column, 
           buy_column, sell_column):

    data = add_column(data, 5)    

    for i in range(len(data)):  

       try:

            `# Bullish pattern`
            if data[i, close_column] - data[i, open_column] > body and \                data[i - 1, high_column] - data[i - 1, close_column] >= wick \                and data[i - 1, open_column] - data[i - 1, low_column] >= \                wick and data[i - 1, close_column] - data[i - 1, \                open_column] < body and data[i - 1, close_column] > data[i \                - 1, open_column] and data[i - 2, close_column] < data[i - \                2, open_column] and data[i - 2, open_column] - data[i - 2, \                close_column] > body:

                     data[i + 1, buy_column] = 1 

            `# Bearish pattern`
            elif data[i, open_column] - data[i, close_column] > body and \                  data[i - 1, high_column] - data[i - 1, open_column] >= \                  wick and data[i - 1, close_column] - data[i - 1, \                  low_column] >= wick and data[i - 1, open_column] - \                  data[i - 1, close_column] < body and data[i - 1, \                  close_column] < data[i - 1, open_column] and data[i - 2, \                  close_column] > data[i - 2, open_column] and data[i - 2, \                  close_column] - data[i - 2, open_column] > body:

                     data[i + 1, sell_column] = -1                      

       except IndexError:

            pass

    return data

图 6-47 展示了富时 100 的信号图表。

图 6-47. 富时 100 的信号图表

表 6-9 总结了该模式的性能。

表格 6-9. 陀螺模式:性能摘要表

资产命中率盈利因子风险-回报比信号数
欧元/美元51.02%0.870.83243
美元/瑞士法郎49.69%0.790.80163
英镑/美元48.79%1.141.19414
美元/加元45.22%0.790.96272
比特币/美元48.62%0.770.81401
ETHUSD38.37%0.661.06185
黄金41.22%0.620.88228
S&P50050.00%1.181.1836
富时 10042.34%0.841.14111

内部上/下模式

内部上涨/下跌 模式是一个由三根蜡烛组成的反向配置,通过两根确认蜡烛来信号初次移动的结束。内部上涨模式由一个熊市蜡烛后跟一个较小的阳线组成,其实体在第一个蜡烛的实体内。最后,必须出现一个阳线并超过第一个蜡烛的开盘价。图 6-48 展示了一个内部上涨模式。

图 6-48. 一个内部上涨

熊市内部下跌模式由一个牛市蜡烛后跟一个较小的阴线组成,其实体在第一个蜡烛的实体内。最后,必须出现一个阴线并打破第一个蜡烛的开盘价。图 6-49 展示了一个熊市内部下跌模式。

图 6-49. 熊市内部下跌
注意

蜡烛的实体是开盘和收盘价格之间的绝对差异,而蜡烛的范围是高点和低点价格之间的绝对差异。

内部上涨模式的直觉是在主导的熊市趋势之后,买家开始控制局势。第二根蜡烛显示了第一个力量平衡,第三根蜡烛通过超越第二根蜡烛的收盘价来确认这一新动向。第二根蜡烛的实体包含在第一根蜡烛的实体内,表明卖方无法将价格进一步推低,这表明他们开始感到困难。内部下跌模式的直觉是在主导的牛市趋势之后,卖家开始控制局势。第二根蜡烛的实体包含在第一根蜡烛的实体内,表明买家无法将价格进一步推高。

注意

注意,内部上涨/下跌模式类似于一个孕线形态,后跟一个确认新方向的大蜡烛。

内部上涨/下跌模式的信号功能如下:

def signal(data, open_column, high_column, low_column, close_column, 
           buy_column, sell_column):

    data = add_column(data, 5)    

    for i in range(len(data)):  

       try:

           `# Bullish pattern`
           if data[i - 2, close_column] < data[i - 2, open_column] and \               abs(data[i - 2, open_column] - data[i - 2, close_column]) > \               body and data[i - 1, close_column] < data[i - 2, \               open_column] and data[i - 1, open_column] > data[i - 2, \               close_column] and data[i - 1, close_column] > data[i - 1, \               open_column] and data[i, close_column] > data[i - 2, \               open_column] and data[i, close_column] > data[i, \               open_column] and abs(data[i, open_column] - data[i, \               close_column]) > body:

                    data[i + 1, buy_column] = 1 

           `# Bearish pattern`
           elif data[i - 2, close_column] > data[i - 2, open_column] and \                 abs(data[i - 2, close_column] - data[i - 2, open_column]) \                 > body and data[i - 1, close_column] > data[i - 2, \                 open_column] and data[i - 1, open_column] < data[i - 2, \                 close_column] and data[i - 1, close_column] < data[i - 1, \                 open_column] and data[i, close_column] < data[i - 2, \                 open_column] and data[i, close_column] < data[i, \                 open_column] and abs(data[i, open_column] - data[i, \                 close_column]) > body:

                    data[i + 1, sell_column] = -1 

       except IndexError:

            pass

    return data

图 6-50 展示了美元/加元的信号图表。

图 6-50. 美元/加元信号图表

表 6-10 总结了该模式的表现。

表 6-10. 内部上涨/下跌模式:性能总结表

资产命中率盈利因子风险-收益比信号
欧元/美元49.82%0.940.95572
美元/瑞士法郎48.89%0.981.02452
英镑/美元48.86%1.151.20659
美元/加元50.93%1.261.22591
比特币/美元51.40%1.301.23214
以太坊/美元42.22%0.731.0090
黄金46.73%0.730.83199
标普 50050.00%0.620.6264
富时 10054.13%1.040.88133

图 6-51 展示了以太坊/美元的信号图表。

图 6-51. 以太坊/美元信号图表

塔形态

Tower 模式是一个多蜡烛(通常为五根)的反向配置,预示着逐渐趋势的结束。看涨的 Tower Bottom 模式以一个看跌蜡烛图开始,接着是三根小实体蜡烛,其中中间的一根略低于另外两根。最后,一个正常大小的看涨蜡烛图出现来确认向上走势。图 6-52 展示了 Tower Bottom 模式。

图 6-52. 一个 Tower Bottom

熊市 Tower Top 模式始于一个看涨蜡烛图,接着是三根小实体蜡烛,其中中间的一根略高于另外两根。最后,一个正常大小的看跌蜡烛图出现来确认向下走势。图 6-53 展示了 Tower Top 模式。

图 6-53. 一个 Tower Top

Tower 模式是一种稳定配置,暗示初始趋势可能结束。

Tower Bottom 模式的直觉是在一个看跌行情后,小实体蜡烛暗示可能的稳定,最后的看涨蜡烛预示着预期的看涨反转。类似地,Tower Top 模式暗示可能在看跌蜡烛验证向下行情之前的整理。

多蜡烛模式有时由于其模糊的条件而难以编码。Tower 模式有许多版本,但我发现限制在最多五根蜡烛的条件比创建涉及更多蜡烛的条件更好。

Tower 模式的信号功能如下:

def signal(data, open_column, high_column, low_column, close_column, 
           buy_column, sell_column):

    data = add_column(data, 5)    

    for i in range(len(data)):  

       try:

           `# Bullish pattern`
           if data[i, close_column] > data[i, open_column] and \               data[i, close_column] - data[i, open_column] > body and \               data[i - 2, low_column] < data[i - 1, low_column] and \               data[i - 2, low_column] < data[i - 3, low_column] and \               data[i - 4, close_column] < data[i - 4, open_column] and \               data[i - 4, open_column] - data[i, close_column] > body:

                    data[i + 1, buy_column] = 1 

           `# Bearish pattern`
           elif data[i, close_column] < data[i, open_column] and \                 data[i, open_column] - data[i, close_column] > body and \                 data[i - 2, high_column] > data[i - 1, high_column] and \                 data[i - 2, high_column] > data[i - 3, high_column] and \                 data[i - 4, close_column] > data[i - 4, open_column] and \                 data[i - 4, close_column] - data[i, open_column] > body:

                    data[i + 1, sell_column] = -1 

       except IndexError:

            pass

    return data

图 6-54 展示了美元加元的信号图表。

图 6-54. 美元加元信号图表

图 6-55 展示了英镑美元的信号图表。

图 6-55. 英镑美元信号图表

表 6-11 总结了该模式的绩效。

表 6-11. Tower 模式:绩效摘要表

资产命中率盈利因子风险-收益比信号
EURUSD49.31%1.011.04878
USDCHF50.47%1.21.18735
GBPUSD46.30%0.951.101203
USDCAD50.44%1.091.071013
BTCUSD43.33%1.061.38503
ETHUSD45.45%0.881.05231
GOLD47.32%0.730.81336
S&P50043.75%0.851.0916
FTSE10050.00%1.271.2760

第七章:现代逆势模式

继续秉承逆势交易的精神,本章讨论了现代逆势模式,这些模式是我多年来注意到的蜡烛图形成,可以作为已知模式的补充。

本章的目的与往常一样,是描述模式的客观条件并对其进行回测,以便您对它们的频率和可预测性形成意见。

分身模式

在德语中,Doppelgänger一词意为“双重行走者”或“双重步行者”,通常用于指看起来完全相同但生物上无关的人。 Doppelgänger 蜡烛图形态是一个我喜欢用来确认中间逆转的三根蜡烛逆转配置。

图 7-1 说明了一个看涨的分身。该模式由一个看跌蜡烛后跟两根数值相似的蜡烛(相同的高低点,且它们的收盘价和开盘价必须相等,或者收盘价必须等于开盘价)组成,其类型(看涨或看跌)具有灵活性。

图 7-1。一个看涨的分身

相比之下,图 7-2 展示了理论上的看跌分身模式。该模式由一个看涨蜡烛后跟两根数值相似的蜡烛组成,其类型(看涨或看跌)具有灵活性。请注意,这些是理论条件;在现实生活中,可能会添加一些灵活性(正如您将在本章中看到的)。

图 7-2。一个看跌的分身

理想情况下,看涨逆转在下一根蜡烛超过相似高点时得到确认。同样,当下一根蜡烛突破相似低点时,看跌逆转得到确认。这是一个可选条件,可将该模式转变为四根蜡烛的配置。

分身模式的理论基础在于力量平衡的概念。具有相似蜡烛的情况下,当前总体方向周围存在犹豫,这可能导致完全的制度转变。此外,在看涨分身中低点的相等和看跌分身中高点的相等等价于支撑和阻力水平的概念,分别。

为增加信号的频率,您必须像在先前章节中看到的那样四舍五入值。对于外汇数据,您需要四位小数,对于其他回测资产,您需要零位小数。

从算法的角度看,实际条件如下:

  • 如果当前高点等于先前高点,当前低点等于先前低点,并且两期前的蜡烛是看涨的,则在下一行打印 1,表示开盘价的买入信号的代表。

  • 如果当前高点等于先前高点,当前低点等于先前低点,并且两期前的蜡烛是看跌的,则在下一行打印−1,表示开盘价的卖出信号的代表。

注意

尝试编写添加第四根蜡烛图的可选条件。提醒一下,这个条件旨在过滤虚假信号,但可能会过滤掉太多信号。

你可以通过以下代码片段为幻影模式编写信号函数:

def signal(data, open_column, high_column, low_column, close_column, 
           buy_column, sell_column):

    data = add_column(data, 5)  

    data = rounding(data, 4) `# Put 0 instead of 4 as of pair 4`

    for i in range(len(data)):  

       try:

    `# Bullish pattern`
           if data[i - 2, close_column] < data[i - 2, open_column] and \               data[i - 1, close_column] < data[i - 2, open_column] and \               data[i, high_column] == data[i - 1, high_column] and \               data[i, low_column] == data[i - 1, low_column]: 

                    data[i + 1, buy_column] = 1 

           `# Bearish pattern`
           elif data[i - 2, close_column] > data[i - 2, open_column] and \                 data[i - 1, close_column] > data[i - 2, open_column] and \                 data[i, high_column] == data[i - 1, high_column] and \                 data[i, low_column] == data[i - 1, low_column]:

                    data[i + 1, sell_column] = -1 

       except IndexError:

            pass

    return data

图 7-3 展示了 GBPUSD 的信号图。

图 7-3. GBPUSD 的信号图

幻影模式并不常见。图 7-4 展示了另一个 USDCHF 的信号图。

图 7-4. USDCHF 的信号图

表 7-1 总结了幻影模式的表现。

表 7-1. 幻影模式:表现总结表

资产命中率盈利因子风险收益比信号数
EURUSD46.42%0.971.12448
USDCHF50.00%0.890.89558
GBPUSD48.05%1.071.16283
USDCAD45.52%0.760.91380
BTCUSD45.45%1.782.1399
ETHUSD50.87%0.920.881201
GOLD49.74%0.850.852738
S&P50050.90%0.980.95110
FTSE10048.27%1.271.3629

总结一下,这种模式显示出跨资产类别的混合信号和混合频率。这可能是因为出场技术不适合这种模式,因为它主要关注中期逆转动作,但为了使书中所有模式的回测保持一致,出场条件是相同的。

提醒一下,出场条件是遇到看涨或看跌信号;否则,交易将继续进行。​

封锁模式

这种模式类似于市场发现支撑或阻力并显示出逆转迹象的概念。封锁 模式是一个由四根蜡烛图组成的配置,其中一些条件在视觉上难以检测。

图 7-5 描述了一个看涨的封锁。第一根蜡烛图必须是看跌的,并跟随着三根蜡烛图,其低价等于或高于第一根蜡烛图的低价,但低于其收盘价。最后,第四根蜡烛图必须是看涨的,并且其收盘价高于第一根蜡烛图的高价。这些条件验证了封锁模式并生成了一个看涨信号。

图 7-5. 一个看涨的封锁

图 7-6 描述了一个熊市封锁。第一根蜡烛图必须是看涨的,并跟随着三根蜡烛图,其高价等于或低于第一根蜡烛图的低价,但低于其收盘价。最后,第四根蜡烛图必须是看跌的,并且其收盘价低于第一根蜡烛图的低价。这些条件验证了封锁模式并生成了一个看跌信号。

图 7-6. 一个熊市封锁

块位模式的理论基础在于,围绕支撑或阻力区域的稳定阶段可能提供了通过第四根蜡烛确认的反转机会。

下面的代码片段展示了如何编写块位模式的信号函数:

def signal(data, open_column, high_column, low_column, close_column, 
           buy_column, sell_column):

    data = add_column(data, 5)    

    for i in range(len(data)):  

       try:

        `# Bullish pattern`
           if data[i - 3, close_column] < data[i - 3, open_column] and \               data[i - 2, close_column] < data[i - 3, open_column] and \               data[i - 2, low_column] >= data[i - 3, low_column] and \               data[i - 2, low_column] <= data[i - 3, close_column] and \               data[i - 1, low_column] >= data[i - 3, low_column] and \               data[i - 1, low_column] <= data[i - 3, close_column] and \               data[i, low_column] >= data[i - 3, low_column] and \               data[i, low_column] <= data[i - 3, close_column] and \               data[i, close_column] > data[i, open_column] and \               data[i, close_column] > data[i - 3, high_column]:        

                    data[i + 1, buy_column] = 1 

           `# Bearish pattern`
           elif data[i - 3, close_column] > data[i - 3, open_column] and \                 data[i - 2, close_column] > data[i - 3, open_column] and \                 data[i - 2, high_column] <= data[i - 3, high_column] and \                 data[i - 2, high_column] >= data[i - 3, close_column] and\                 data[i - 1, high_column] <= data[i - 3, high_column] and \                 data[i - 1, high_column] >= data[i - 3, close_column] and\                 data[i, high_column] <= data[i - 3, high_column] and \                 data[i, high_column] >= data[i - 3, close_column] and \                 data[i, close_column] < data[i, open_column] and \                 data[i, close_column] < data[i - 3, low_column]:  

                    data[i + 1, sell_column] = -1 

       except IndexError:

            pass

    return data

图 7-7 展示了英镑/美元的信号图表。首先要注意的是由于算法强加的多重条件,信号的稀缺性。

图 7-7. 英镑/美元的信号图表

罕见的模式无处不在,无论是经典还是现代的,它们在结果上与普通模式并没有太大区别。重要的是用其他信号和指标确认模式。

图 7-8 展示了澳元/新西兰元的信号图表。注意,通常情况下,图案与其完美理论形式并不相同,因为那样会使它们极为罕见甚至不可能找到;因此,有时可以应用一定的灵活性。

图 7-8. 澳元/新西兰元的信号图表

例如,我在这里应用的灵活性措施是,对于牛市块位模式,我已经取消了要求低点完全相同的条件,而对于熊市块位模式,则取消了要求高点完全相同的条件。记住,目的是检测一些模式并对其进行回测,以便对其预测能力有所了解,这将融入更复杂的策略中。

表 7-2 总结了块位模式的性能。

表 7-2. 块位模式:性能总结表

资产命中率盈利因子风险-回报比信号数
EURUSD40.77%0.630.92233
USDCHF47.00%1.11.24234
GBPUSD50.19%1.061.06263
USDCAD46.15%0.921.07260
BTCUSD51.64%1.791.68182
ETHUSD45.40%1.641.96174
GOLD51.25%1.131.08240
S&P50046.66%0.860.98240
FTSE10035.71%1.11.9828

总结来说,块位模式是一种在某些市场中可能稀有的复杂形态。它基于市场已找到支撑或阻力区域,并通过牛市或熊市蜡烛图表显示了反转意图的概念。

狂喜模式

乍一看,“狂喜”模式基本上与讨论的经典趋势跟随模式中的三根蜡烛模式相同。然而,我发现将一个条件添加到三根蜡烛模式中足以使其成为反向配置。当然,视觉上的冲突仍然相同,因为额外条件比交易员更容易通过算法检测到。

额外条件是每个蜡烛必须比前一个更大。这里的“更大”指的是实际范围,即书中早前提到的收盘价和开盘价的绝对差。

图 7-9 描绘了一个看涨的狂喜模式。该模式由三个连续的看跌蜡烛线组成,每个蜡烛线比前一个更大。

图 7-9. 一个看涨的狂喜模式

图 7-10 描绘了一个看跌的狂喜模式。该模式由三个连续的看涨蜡烛线组成,每个蜡烛线比前一个更大。

图 7-10. 一个看跌的狂喜模式
注意

三蜡烛模式和狂喜模式非常相似,但蜡烛线尺寸的增加是它们之间的区别。在原始文献中,三蜡烛模式没有尺寸限制,这可能会导致这两种模式之间的冲突。

直觉上,你必须跟随让你更舒适的模式,并且你还必须用其他技术和指标来确认,以帮助你决定市场是否会继续朝着相同的方向趋势(三蜡烛模式),还是会反转(狂喜模式)。

下面的代码片段展示了如何为狂喜模式编写信号函数。你还需要对数值进行四舍五入:

def signal(data, open_column, close_column, buy_column, sell_column):

    data = add_column(data, 5)  

    data = rounding(data, 4) # Put 0 instead of 4 as of pair 4

    for i in range(len(data)):  

       try:

  `# Bullish pattern`
           if data[i, open_column] > data[i, close_column] and \               data[i - 1, open_column] > data[i - 1, close_column] and \               data[i - 2, open_column] > data[i - 2, close_column] and \               data[i, close_column] < data[i - 1, close_column] and \               data[i - 1, close_column] < data[i - 2, close_column] and \               (data[i, open_column] - data[i, close_column]) > \               (data[i - 1, open_column] - data[i - 1, close_column]) and\               (data[i - 1, open_column] - data[i - 1, close_column]) > \               (data[i - 2, open_column] - data[i - 2, close_column]): 

                    data[i + 1, buy_column] = 1 

           `# Bearish pattern`
           elif data[i, open_column] < data[i, close_column] and \                 data[i - 1, open_column] < data[i - 1, close_column] and \                 data[i - 2, open_column] < data[i - 2, close_column] and \                 data[i, close_column] > data[i - 1, close_column] and \                 data[i - 1, close_column] > data[i - 2, close_column] and\                 (data[i, open_column] - data[i, close_column]) > \                 (data[i - 1, open_column] - data[i - 1, close_column]) and\                 (data[i - 1, open_column] - data[i - 1, close_column]) > \                 (data[i - 2, open_column] - data[i - 2, close_column]):

                    data[i + 1, sell_column] = -1 

       except IndexError:

            pass

    return data

图 7-11 展示了美元加元的信号图表。从视觉上看,狂喜模式比封锁模式更丰富,可能会提供更多信号,但这并不能说明质量如何,这一点我通常在本节末尾的绩效总结表格中会详细展示。

图 7-11. 美元加元的信号图表

狂喜模式的风险在于它试图计时贪婪阶段的结束,这非常危险。然而,基于短期事件的短期走势,狂喜模式表现优于其平均表现。例如,在确立的牛市趋势期间,狂喜模式的命中率小于横盘市场期间的命中率。

图 7-12 展示了澳元纽元的信号图表。请注意,在拥挤期间,该模式较为常见且质量相对较好。

图 7-12. 澳元纽元的信号图表
注意

请确保区分狂喜模式和双重麻烦模式,后者使用了包括高点和低点的波动率测量来考虑持续移动。一些蜡烛图模式可能相互类似,但存在一些微妙的差异,这些差异可能会改变预期的反应甚至预期的目标。

表格 7-3 总结了狂喜模式的绩效。请注意,通常的退出条件并非狂喜模式的最佳退出技术。

表格 7-3. 狂喜模式:绩效总结表格

资产命中率盈利因子风险-收益比信号数
欧元美元49.17%1.171.211513
美元瑞士法郎45.17%0.991.211523
英镑美元46.69%1.081.241741
美元加元46.96%1.001.121584
BTCUSD47.24%1.121.241327
ETHUSD45.71%0.981.161155
GOLD44.48%0.941.172039
S&P50046.17%1.161.35379
FTSE10046.34%1.051.21369

总结来说,欢乐模式就像是市场参与者最初加速阶段的刹车,基于市场参与者的乐观情绪。基本上,更大的蜡烛意味着更大的风险,因为恐惧比贪婪更强大,交易者可能会在强劲的行情后开始减仓。

区分欢乐模式和第四章中讨论的三根蜡烛模式非常重要。

障碍模式

障碍模式非常基础且直观,可以被视为封锁模式的简化版本。它由三根蜡烛组成,同时借鉴了支撑和阻力水平的概念。该模式还利用了取整以稳定信号频率。

图 7-13 展示了一个看涨的障碍模式。前两根蜡烛必须是看跌的,而最后一根蜡烛必须是看涨的。同时,这三根蜡烛的最低点必须相同,这暗示着支撑区域。最后一根看涨蜡烛确认了看涨反转。

注意

一个看涨的蜡烛意味着需求大于供应,因此在熊市后可以作为确认因素。

图 7-13. 一个看涨的障碍

图 7-14 展示了一个看跌的障碍模式。前两根蜡烛必须是看涨的,而最后一根蜡烛必须是看跌的。同时,这三根蜡烛的最高点必须相同,这暗示着阻力区域。最后一根看跌蜡烛确认了看跌反转。

图 7-14. 一个看跌的障碍
注意

在可选情况下,还可以施加额外条件。在看涨的障碍模式中,最后一根看涨蜡烛的收盘价必须高于中间蜡烛的最高价。同样地,在看跌的障碍模式中,最后一根看跌蜡烛的收盘价必须低于中间蜡烛的最低价。

下面的代码片段展示了如何为障碍模式编写信号函数。请注意,我添加了rounding()函数来最大化信号的获取。例如,如果欧元/美元的报价是五位小数(例如 1.05623),那么找到三根具有相同最低/最高值的蜡烛比四位小数的报价(例如 1.0562)更难:

def signal(data, open_column, high_column, low_column, close_column, 
           buy_column, sell_column):

    data = add_column(data, 5)  

    data = rounding(data, 4) `# Put 0 instead of 4 as of pair 4`

    for i in range(len(data)):  

       try:

           `# Bullish pattern`
           if data[i, close_column] > data[i, open_column] and \               data[i - 1, close_column] < data[i - 1, open_column] and \               data[i - 2, close_column] < data[i - 2, open_column] and \               data[i, low_column] == data[i - 1, low_column] and \               data[i, low_column] == data[i - 2, low_column]:

                    data[i + 1, buy_column] = 1 

    `# Bearish pattern`
           elif data[i, close_column] < data[i, open_column] and \                 data[i - 1, close_column] > data[i - 1, open_column] and \                 data[i - 2, close_column] > data[i - 2, open_column] and \                 data[i, high_column] == data[i - 1, high_column] and \                 data[i, high_column] == data[i - 2, high_column]:

                    data[i + 1, sell_column] = -1 

       except IndexError:

            pass

    return data

图 7-15 展示了美元/瑞士法郎的信号图表。信号的频率似乎是可以接受的。这可以从性能汇总表中看出。

图 7-15. 美元/瑞士法郎的信号图表

图 7-16 展示了 AUDNZD 的信号图表。在某些市场中,信号可能比其他市场更少见。这是大多数蜡烛图模式所见的现象,了解信号频率使你能够知道在哪个市场使用哪些模式。

图 7-16. AUDNZD 的信号图表

表 7-4 总结了障碍模式的表现。

表 7-4. 障碍模式:表现摘要表

资产命中率盈利因子风险-收益比信号数
EURUSD46.78%1.051.19109
USDCHF54.67%2.261.87139
GBPUSD43.24%0.851.1174
USDCAD52.74%1.131.0191
BTCUSD34.61%0.591.1226
ETHUSD50.92%1.111.07163
GOLD48.39%1.061.13405
S&P50053.57%0.90.7828
FTSE10037.50%0.380.638

总结一下,障碍模式是一个简单的三蜡烛配置,通过舍入增加其信号频率,由于一种严峻条件,迫使低点或高点相等。

镜像模式

如其名,镜像 模式是过去价格行动的反映,具有灵活的条件。其理念是市场正在形成一个 U 形转弯,并且应该改变方向。

图 7-17 描绘了一个牛市镜像。第一个蜡烛必须是熊市的,后面跟着两个具有相同高低的蜡烛。最后,最后一个蜡烛必须是牛市的,并且其高价等于第一个蜡烛的高价。在编码部分,你会看到有一些灵活性,因为理论条件难以找到。

图 7-17. 一个牛市镜像
注意

之所以蜡烛图模式的理论与实际应用之间存在差异,是因为理论处理直觉,但不能保证检测到模式所需的最低频率。在现实生活中,你必须调整一些条件,同时保留模式的直觉。

图 7-18 描述了一个熊市镜像。第一个蜡烛必须是牛市的,后面跟着两个具有相同高低的蜡烛。最后,最后一个蜡烛必须是熊市的,并且其低价等于第一个蜡烛的低价。

图 7-18. 一个熊市镜像

下面的代码片段展示了如何为镜像模式编写信号函数的代码。代码假设对中间蜡烛的高低灵活,并创建了这样一个条件:相等的收盘价格足以验证该模式(如果两个中间蜡烛的收盘价格相等,则不会使该模式失效)。

def signal(data, open_column, high_column, low_column, close_column, 
           buy_column, sell_column):

    data = add_column(data, 5)  

    data = rounding(data, 0) # Put 0 instead of 4 as of pair 4

    for i in range(len(data)):  

       try:

           `# Bullish pattern`
           if data[i, close_column] > data[i, open_column] and \               data[i, high_column] == data[i - 3, high_column] and \               data[i, close_column] > data[i - 1, close_column] and \               data[i, close_column] > data[i - 2, close_column] and \               data[i, close_column] > data[i - 3, close_column] and \               data[i - 3, close_column] < data[i - 3, open_column] and \               data[i - 1, close_column] == data[i - 2, close_column]:

                    data[i + 1, buy_column] = 1 

      `# Bearish pattern`
           elif data[i, close_column] < data[i, open_column] and \                 data[i, low_column] == data[i - 3, low_column] and \                 data[i, close_column] < data[i - 1, close_column] and \                 data[i, close_column] < data[i - 2, close_column] and \                 data[i, close_column] < data[i - 3, close_column] and \                 data[i - 3, close_column] > data[i - 3, open_column] and \                 data[i - 1, close_column] == data[i - 2, close_column]:

                    data[i + 1, sell_column] = -1 

       except IndexError:

            pass

    return data

图 7-19 展示了 EURCHF 的信号图表。

图 7-19. EURCHF 的信号图表

图 7-20 展示了 USDCHF 的信号图。即使在灵活的条件下,找到镜像模式可能也会很困难。

图 7-20. USDCHF 的信号图

表 7-5 总结了镜像模式的表现。

表 7-5. 镜像模式:绩效汇总表

Asset命中率盈利因子风险-收益比信号数
EURUSD45.23%1.021.2342
USDCHF41.37%0.690.9858
GBPUSD37.50%0.781.332
USDCAD34.21%0.781.538
BTCUSD70.00%3.021.2910
ETHUSD44.30%0.831.04237
GOLD49.00%1.141.18500
S&P50080.00%5.381.3415

总结一下,镜像模式假设市场参与者逐渐改变方向,形成一个 U 形转折运动。这是一种罕见的模式,因为实现它的条件可能比较繁琐,但模式的直觉非常清晰。镜像模式也可以被视为“双胞胎”模式的延续。

收缩模式

收缩模式基于拥挤期后的突破概念。它是一个多蜡烛配置,最后一根蜡烛确认了这一动作。

图 7-21 展示了一个看涨的收缩模式。第一根蜡烛必须是看跌的,以反映看跌压力的代理,接下来的三根蜡烛可以是任何颜色,但每次必须缩小。最后(第五根)蜡烛必须是看涨的,并且必须超过第二根蜡烛的高点。

图 7-21. 一个看涨的收缩模式

图 7-22 展示了一个熊市的收缩模式。第一根蜡烛必须是看涨的,以反映看涨压力的代理,接下来的三根蜡烛可以是任何颜色,但每次必须缩小。最后(第五根)蜡烛必须是看跌的,并且必须突破第二根蜡烛的低点。

图 7-22. 一个熊市的收缩模式

下面的代码片段展示了如何编写收缩模式的信号函数。我添加了一些灵活性,省略了理论条件,假设三个中间蜡烛具有类似的低点(看涨配置)和类似的高点(看跌配置),如图 7-21 和 7-22 中的虚线水平线所示。

def signal(data, open_column, high_column, low_column, close_column, 
           buy_column, sell_column):

    data = add_column(data, 5)  

    data = rounding(data, 4)

    for i in range(len(data)):  

       try:

           `# Bullish pattern`
           if data[i - 4, close_column] < data[i - 4, open_column] and \               data[i, close_column] > data[i, open_column] and \               data[i, close_column] > data[i - 3, high_column] and \               abs(data[i - 3, close_column] - data[i - 3, open_column]) < \               abs(data[i - 4, close_column] - data[i - 4, open_column]) \               and abs(data[i - 2, close_column] - data[i - 2, open_column])\               < abs(data[i - 3, close_column] - data[i - 3, open_column]) \               and abs(data[i - 1, close_column] - data[i - 1, \               open_column]) < abs(data[i - 2, close_column] - data[i - 2, \               open_column]) and data[i - 1, high_column] < data[i - 2, \               high_column] and data[i - 2, high_column] < data[i - 3, \               high_column]:

                    data[i + 1, buy_column] = 1 

        `# Bearish pattern`
           elif data[i - 4, close_column] > data[i - 4, open_column] and \                 data[i, close_column] < data[i, open_column] and \                 data[i, close_column] < data[i - 3, low_column] and \                 abs(data[i - 3, close_column] - data[i - 3, open_column]) \                 < abs(data[i - 4, close_column] - data[i - 4, \                 open_column]) and abs(data[i - 2, close_column] - \                 data[i - 2, open_column]) < abs(data[i - 3, close_column] \                 - data[i - 3, open_column]) and abs(data[i - 1, \                 close_column] - data[i - 1, open_column]) < abs(data[i - \                 2, close_column] - data[i - 2, open_column]) and \                 data[i - 1, low_column] > data[i - 2, low_column] and \                 data[i - 2, low_column] > data[i - 3, low_column]:             

                    data[i + 1, sell_column] = -1 

       except IndexError:

            pass

    return data

图 7-23 展示了 GBPAUD 的信号图。

图 7-23. GBPAUD 的信号图

表 7-6 总结了收缩模式的表现。

表 7-6. 收缩模式:绩效汇总表

Asset命中率盈利因子风险-收益比信号数
EURUSD37.77%0.520.8645
USDCHF37.14%0.390.6635
GBPUSD41.37%0.660.9429
USDCAD43.47%1.441.8746
比特币对美元58.62%1.240.8829
以太坊对美元55.55%2.161.7327
金价61.53%0.730.4626

总结一下,收缩模式是直观的,并依赖于谨慎的概念,这通过在大蜡烛突破拥挤区之前的收缩蜡烛图形来体现,并确认了新的方向。

现在您已经学习完了不同蜡烛图形及其在 Python 中的编码方法。接下来的章节将讲解如何使用这些蜡烛图形,并将它们结合成更复杂的策略。