第四章:价差形态识别——双底/双顶、头肩顶/底、三角形、旗形与楔形

做跨期套利这么多年,我越来越觉得:价差图表的形态分析,其实比单品种的K线形态更可靠。为什么?因为价差剔除了很多市场噪音,它反映的是两个合约之间相对力量的博弈。说白了,形态就是市场情绪的“心电图”。

今天咱们就聊聊几种最常见的价差形态。我个人习惯是把它们分成两类:反转形态和持续形态。双底双顶、头肩顶底属于前者,三角形、旗形、楔形属于后者。嗯,咱们一个一个来。

核心观点:形态识别不是为了预测,而是为了制定交易计划。看到形态,你要问自己三个问题——止损设在哪?目标看多少?如果形态失败怎么办?

4.1 双底与双顶形态

双底和双顶,是价差分析里最基础的反转形态。我在项目中遇到过好几次,价差在某个区间来回震荡两次,然后突然突破——嗯,机会就来了。

双底形态(W底):

  • 价差两次下探到相近的低点,然后反弹
  • 第二次低点的成交量通常比第一次小(说明抛压衰竭)
  • 突破颈线(两个高点之间的水平线)是入场信号
  • 目标涨幅 ≈ 颈线到最低点的垂直距离

双顶形态(M顶):

  • 价差两次上冲到相近的高点,然后回落
  • 第二次高点的成交量通常小于第一次
  • 跌破颈线是做空信号
  • 目标跌幅 ≈ 颈线到最高点的垂直距离

实战技巧:我一般不会在第一次触碰颈线时就入场。等价格突破颈线后,回踩确认再进场,成功率会高很多。曾经有一次我太着急,在双底刚突破颈线时就追进去,结果被假突破打止损——从那以后,我就养成了等回踩的习惯。

4.2 头肩顶与头肩底形态

头肩形态是反转信号里最可靠的之一。你想想看,三个波峰/波谷,中间那个最高/最低,左右两个差不多高——这不就是市场从趋势到反转的完整过程吗?

头肩顶:

  1. 左肩:价差上涨后回落,形成第一个高点
  2. 头部:价差继续上涨创出新高,然后回落
  3. 右肩:价差再次反弹,但无法突破头部高点
  4. 跌破颈线(连接左肩和头部之间的回调低点)→ 确认反转

头肩底(倒头肩):

  1. 左肩:价差下跌后反弹,形成第一个低点
  2. 头部:价差继续下跌创出新低,然后反弹
  3. 右肩:价差再次回落,但无法跌破头部低点
  4. 突破颈线 → 确认反转向上
形态 颈线方向 目标测量 常见陷阱
头肩顶 水平或略向下 头部到颈线的垂直距离 右肩成交量放大可能是假突破
头肩底 水平或略向上 头部到颈线的垂直距离 突破时量能不足容易回踩失败

避坑指南:我曾经在头肩底形态中犯过一个错误——右肩还没完全形成就提前入场。结果价差继续下跌,打穿了左肩的低点。记住:头肩形态必须等颈线被明确突破,否则都是猜测。

4.3 三角形整理形态

三角形形态在价差分析里出现频率很高。它代表市场在某个区间内收敛,多空双方暂时达成平衡。说白了,就是暴风雨前的宁静。

三种常见三角形:

  • 对称三角形:上边线向下倾斜,下边线向上倾斜。突破方向不确定,哪个方向先突破就跟哪个方向。
  • 上升三角形:上边线水平,下边线向上倾斜。通常向上突破的概率更大。
  • 下降三角形:下边线水平,上边线向下倾斜。通常向下突破的概率更大。

我个人习惯用布林带配合三角形来确认突破。当布林带收窄到极致,同时价格在三角形末端运行,这时候一旦放量突破,往往就是一波大行情。

量化小技巧:可以用ATR(平均真实波幅)来量化三角形的收敛程度。当ATR降到过去20日的最低水平时,说明三角形已经整理充分,突破在即。

4.4 旗形与楔形形态

旗形和楔形都是持续形态,意味着它们出现在趋势中间,而不是趋势末端。嗯,这里要注意区分。

旗形:

  • 形态像一面旗帜:价格快速上涨/下跌后,进入一个窄幅整理通道
  • 通道方向与主趋势相反(上升趋势中的旗形向下倾斜)
  • 突破方向与主趋势一致
  • 目标涨幅 ≈ 旗杆的长度(从突破点到整理开始的距离)

楔形:

  • 与旗形类似,但通道的两条边线是收敛的
  • 上升楔形(看跌):高点逐步降低,低点逐步抬高,最终向下突破
  • 下降楔形(看涨):高点逐步降低,低点逐步抬高,最终向上突破

我记得有一次做螺纹钢的跨期套利,价差在上升趋势中形成了一个下降楔形。当时很多人觉得价差要反转了,但我一看成交量在萎缩,就知道这是典型的持续形态。果然,突破后价差继续上涨了200多点。

4.5 形态识别的量化实现

光靠肉眼识别形态,效率太低。我一般会用代码来辅助识别。下面是一个简单的双底识别逻辑:

def detect_double_bottom(spread_series, lookback=20):
    """
    检测双底形态
    spread_series: 价差序列
    lookback: 回溯周期
    """
    # 找到局部低点
    lows = []
    for i in range(lookback, len(spread_series)-lookback):
        if spread_series[i] == min(spread_series[i-lookback:i+lookback]):
            lows.append((i, spread_series[i]))
    
    # 检查是否有两个相近的低点
    double_bottoms = []
    for i in range(len(lows)-1):
        idx1, price1 = lows[i]
        idx2, price2 = lows[i+1]
        
        # 两个低点价格相差不超过5%
        if abs(price1 - price2) / max(price1, price2) < 0.05:
            # 两个低点之间至少间隔10个周期
            if idx2 - idx1 >= 10:
                # 中间有反弹高点
                mid_high = max(spread_series[idx1:idx2])
                if mid_high > max(price1, price2) * 1.02:
                    double_bottoms.append((idx1, idx2))
    
    return double_bottoms

参数调优建议:上面代码里的5%和10个周期,是我根据螺纹钢和铁矿石的价差数据调出来的。不同品种的参数差异很大,建议你用历史数据回测一下,找到最适合的参数组合。

4.6 形态识别的核心逻辑框架

下面这张图是我自己总结的形态识别决策流程,你可以把它当作一个检查清单来用:

价差形态识别决策流程 识别到潜在形态 判断:当前处于上升趋势还是下降趋势? 反转形态 持续形态 双底/双顶 头肩顶/底 V形反转 三角形整理 旗形/楔形 矩形整理 确认:颈线突破 + 成交量验证 确认:通道突破 + 趋势方向验证

这个流程的核心逻辑很简单:先判断趋势方向,再确定形态类型,最后用突破信号来确认入场。我建议你把这张图打印出来贴在显示器旁边,每次看到疑似形态时,按流程走一遍,能过滤掉很多假信号。

最后说一句:形态识别不是万能的。我见过太多人沉迷于数浪、画线,结果忽略了最根本的东西——价差的均值回归特性和基本面驱动因素。形态只是工具,不是信仰。用得好,它是你的利器;用得不好,它就是你的枷锁。

专注资料整理