第四章:价格模式识别——开盘价、收盘价、最高价、最低价的关系与K线形态量化

各位同学,今天我们聊点实在的。

价格模式识别,说白了就是读懂K线背后的博弈语言。我做了这么多年量化,发现一个有意思的现象:很多人盯着各种复杂指标,却忽略了最原始、最直接的价格信息——开盘价、收盘价、最高价、最低价。这四个价格,其实藏着市场最真实的情绪。

4.1 四个价格的基本关系

先看最基础的东西。一根K线,四个价格:O(开盘)、C(收盘)、H(最高)、L(最低)。它们之间的关系,直接反映了多空力量的对比。

我个人习惯把关系分成几类:

  • 实体大小:|C - O|,代表多空谁占了上风。实体越大,力量越强。
  • 上下影线:H - max(O, C) 和 min(O, C) - L,代表被拒绝的价格区间。影线越长,说明那个方向的阻力越大。
  • 位置关系:收盘价在最高价附近,还是最低价附近?这直接告诉你收盘时的市场情绪。

我在项目中遇到过一种情况:某只股票连续三天出现长上影线,但收盘价始终没跌破前低。很多人觉得是顶部信号,我反而觉得是主力在洗盘。为什么?因为每次冲高回落,成交量都在萎缩——说明抛压其实不大。后来果然突破了。

核心要点:四个价格不是孤立存在的。它们的相对位置,比绝对值更重要。

4.2 K线形态的量化表达

K线形态,很多人觉得是玄学。其实不是。你想想看,任何形态都可以用数学表达式来描述。关键是你怎么定义它。

我常用的量化方法:

  1. 定义形态特征:比如锤子线,下影线长度是实体的2倍以上,上影线很短或没有。
  2. 设定阈值:影线/实体比例、实体/总范围比例等。
  3. 组合条件:多个条件同时满足,才判定为某种形态。

举个例子,锤子线的量化表达:

def is_hammer(open, high, low, close):
    """
    判断是否为锤子线
    条件:
    1. 下影线长度 >= 实体长度的2倍
    2. 上影线长度 <= 实体长度的0.3倍
    3. 实体不能太小(总范围的10%以上)
    """
    body = abs(close - open)
    upper_shadow = high - max(open, close)
    lower_shadow = min(open, close) - low
    total_range = high - low
    
    if total_range == 0:
        return False
    
    condition1 = lower_shadow >= 2 * body
    condition2 = upper_shadow <= 0.3 * body
    condition3 = body >= 0.1 * total_range
    
    return condition1 and condition2 and condition3

小技巧:阈值不要设得太死。我一般会留10%-20%的浮动空间,因为真实市场数据没那么完美。

4.3 常见K线形态的量化模板

下面是我整理的一些常用形态量化模板。嗯,这里要注意,这些模板不是万能的,需要根据你的交易品种和时间周期做调整。

形态名称 量化条件 信号含义
锤子线 下影线 ≥ 2×实体,上影线 ≤ 0.3×实体 底部反转(看涨)
倒锤子线 上影线 ≥ 2×实体,下影线 ≤ 0.3×实体 底部反转(看涨)
十字星 实体 ≤ 总范围的5% 多空平衡,可能变盘
吞没形态 当前实体完全覆盖前一根实体 趋势反转
孕线 当前实体完全被前一根实体包含 趋势减弱

我曾经犯过一个错误:把十字星的阈值设成了10%。结果发现很多普通K线也被识别成了十字星,信号质量很差。后来改成5%,效果好了很多。所以阈值这东西,一定要回测验证。

4.4 多K线组合的量化

单根K线信号太弱,我一般会看组合。比如三只乌鸦、红三兵、上升三法这些。

组合形态的量化思路:

  • 连续条件:连续N根K线满足某种特征
  • 相对位置:每根K线的开盘价/收盘价相对于前一根的位置
  • 形态约束:比如三只乌鸦要求每根收盘价都在前一根实体下方

举个例子,红三兵的量化:

def three_white_soldiers(df, n=3):
    """
    红三兵:连续3根阳线,每根收盘价高于前一根
    且每根开盘价在前一根实体范围内
    """
    if len(df) < n:
        return False
    
    for i in range(-n+1, 1):
        # 必须是阳线
        if df['close'].iloc[i] <= df['open'].iloc[i]:
            return False
        # 收盘价依次抬高
        if i > -n+1 and df['close'].iloc[i] <= df['close'].iloc[i-1]:
            return False
        # 开盘价在前一根实体范围内
        if i > -n+1:
            prev_open = df['open'].iloc[i-1]
            prev_close = df['close'].iloc[i-1]
            if not (min(prev_open, prev_close) <= df['open'].iloc[i] <= max(prev_open, prev_close)):
                return False
    return True

避坑指南:我曾经用这个红三兵策略做回测,发现胜率只有40%。后来仔细分析,发现很多红三兵出现在高位,其实是主力拉高出货。所以一定要结合位置判断——在低位出现的红三兵才有意义。

4.5 知识体系结构图

下面这张图,是我对本章知识体系的梳理。你可以把它当作一个思维导图来看。

价格模式识别 四个价格关系 K线形态量化 多K线组合 实体大小 上下影线 位置关系 定义特征 设定阈值 组合条件 连续条件 相对位置 形态约束 核心:用数学语言描述市场博弈行为

4.6 实战中的注意事项

最后,说几点实战经验:

  • 不要迷信形态:形态只是概率,不是确定性。我见过完美的锤子线之后继续暴跌的案例。
  • 结合成交量:形态+成交量,信号质量会提升很多。比如锤子线配合放量,反转概率更高。
  • 注意时间周期:日线级别的形态和分钟级别的形态,含义完全不同。别搞混了。
  • 回测验证:任何形态策略,一定要做回测。我习惯用过去3年的数据做样本内测试,再用1年数据做样本外验证。

总结一下:价格模式识别,本质上是把市场参与者的行为模式,用数学语言表达出来。你不需要记住所有形态,但一定要理解背后的逻辑——多空博弈、供需关系、情绪变化。把这些想明白了,形态自然就活了。

专注资料整理