4、失衡与吸收:订单流中的失衡与吸收形态识别

各位同学,今天我们来聊聊订单流里两个最核心的形态——失衡(Imbalance)吸收(Absorption)

说实话,这两个概念我刚开始接触时也绕了不少弯路。那时候我盯着逐笔成交数据,总觉得价格涨跌就是买卖单的简单比拼。后来才发现,真正的门道藏在「不平衡」和「被消化」这两个动作里。

你想想看,市场为什么会有趋势?说白了,就是买卖力量失衡了。但失衡之后呢?是继续失衡,还是被对手盘吸收掉?这决定了你是追进去,还是该离场。

订单流失衡与吸收核心知识框架 失衡与吸收形态 失衡(Imbalance) 吸收(Absorption) 实战组合 买单失衡 卖单失衡 连续失衡 价格停滞 成交量放大 Delta收敛 趋势延续信号 反转预警 多周期共振 核心:失衡是动力,吸收是阻力

一、失衡(Imbalance)—— 市场的「偏科生」

失衡,英文叫 Imbalance。什么意思呢?就是在某个价位上,主动买单和主动卖单的数量出现了严重的不对等。

我习惯用 Delta 值来衡量失衡。Delta = 主动买单量 - 主动卖单量。如果 Delta 是 +500,说明这个价位上买方比卖方多吃了 500 手。如果 Delta 是 -800,那就是卖方在疯狂砸盘。

失衡的量化标准(我个人常用的阈值):

  • 轻度失衡:Delta 绝对值 > 该周期平均 Delta 的 2 倍
  • 中度失衡:Delta 绝对值 > 平均 Delta 的 3 倍
  • 重度失衡:Delta 绝对值 > 平均 Delta 的 5 倍,且伴随成交量暴增

举个例子。假设某只股票在 50.00 元这个价位上,主动买单有 1200 手,主动卖单只有 200 手。Delta = +1000。这就是典型的买单失衡。价格大概率会往上走。

但这里有个坑——失衡不一定立刻推动价格。为什么?因为对手盘可能还没出现。我在项目中遇到过好几次,失衡信号出来了,我追进去,结果价格纹丝不动。后来才明白,失衡需要「被确认」——要么价格突破失衡价位,要么下一根 K 线继续失衡。

二、吸收(Absorption)—— 市场的「海绵」

吸收,Absorption,这个词很有意思。它描述的是:当一方力量很强时,另一方默默地把这些单子全吃掉了,价格却没怎么动。

你想想看,如果有人在 50.00 元挂了 5000 手卖单,结果被买方一点点全吃掉了,价格还稳在 50.00 附近。这说明什么?说明有人在暗中吸筹。这就是吸收。

吸收的核心特征有三个:

  1. 价格停滞:价格在一个窄幅区间内反复震荡,不突破
  2. 成交量放大:相比前几根 K 线,成交量明显增加
  3. Delta 收敛:虽然成交量很大,但 Delta 值却很小,甚至接近零

我的经验:吸收形态出现时,别急着进场。等价格突破吸收区间的上沿或下沿再动手。我曾经在吸收区间里来回止损了三次,后来学乖了——等突破,不猜方向。

三、失衡 vs 吸收 —— 怎么区分?

说实话,这两个形态有时候长得挺像。都是大成交量,都是买卖力量不均衡。但区别在于——价格反应

特征 失衡(Imbalance) 吸收(Absorption)
价格行为 快速朝失衡方向移动 价格停滞,窄幅震荡
成交量 放大,但通常不如吸收大 显著放大,常为近期最大
Delta 绝对值大,方向明确 绝对值小,正负交替
后续走势 趋势延续概率高 反转或突破概率高
交易策略 顺势追入,止损设在失衡价位下方 等待突破,或反向布局

嗯,这里要注意。吸收形态出现后,如果价格向上突破,那之前的吸收就是「吸筹」;如果向下突破,那就是「派发」。方向不同,含义天差地别。

四、实战代码:如何用 Python 识别失衡与吸收

光说不练假把式。我写了一个简单的识别函数,你们可以直接拿去用。

import pandas as pd
import numpy as np

def identify_imbalance_absorption(df, delta_col='delta', volume_col='volume', 
                                  price_col='close', window=20, threshold=2.5):
    """
    识别失衡与吸收形态
    
    参数:
        df: DataFrame,包含delta、volume、close列
        window: 滚动窗口大小
        threshold: 失衡阈值倍数
    
    返回:
        df: 添加了形态标记的DataFrame
    """
    df = df.copy()
    
    # 计算滚动均值和标准差
    df['delta_ma'] = df[delta_col].rolling(window).mean()
    df['delta_std'] = df[delta_col].rolling(window).std()
    df['volume_ma'] = df[volume_col].rolling(window).mean()
    
    # 失衡识别:Delta 偏离均值超过 threshold 倍标准差
    df['is_imbalance'] = (
        (np.abs(df[delta_col]) > df['delta_ma'] + threshold * df['delta_std']) &
        (df[volume_col] > df['volume_ma'] * 1.5)
    )
    
    # 吸收识别:成交量放大 + Delta 收敛 + 价格窄幅震荡
    df['price_range'] = df[price_col].rolling(5).max() - df[price_col].rolling(5).min()
    df['price_range_pct'] = df['price_range'] / df[price_col] * 100
    
    df['is_absorption'] = (
        (df[volume_col] > df['volume_ma'] * 2.0) &  # 成交量显著放大
        (np.abs(df[delta_col]) < df['delta_std']) &   # Delta 收敛到1倍标准差以内
        (df['price_range_pct'] < 0.5)                  # 价格波动小于0.5%
    )
    
    # 标记方向
    df['imbalance_direction'] = np.where(
        df['is_imbalance'],
        np.where(df[delta_col] > 0, '买单失衡', '卖单失衡'),
        ''
    )
    
    return df

# 使用示例
# df = identify_imbalance_absorption(your_data)
# imbalance_signals = df[df['is_imbalance'] == True]
# absorption_signals = df[df['is_absorption'] == True]

避坑指南:我曾经在 1 分钟周期上直接用这个函数,结果全是信号,根本没法用。后来我加了一个条件——必须结合多周期确认。比如 1 分钟图上出现失衡,我会切到 5 分钟图看看有没有共振。没有共振的信号,我一般直接过滤掉。

五、多周期共振下的失衡与吸收

这才是今天的重点。单周期上的失衡或吸收,可能是噪音。但如果在多个周期上同时出现,那胜率会大幅提升。

我常用的多周期组合是:

  • 大周期(15分钟/30分钟):判断方向。如果大周期是买单失衡,我只做多
  • 中周期(5分钟):找入场点。等中周期出现吸收后的突破
  • 小周期(1分钟):精确执行。用小周期的失衡信号来确认入场时机

举个例子。15 分钟图上出现了买单失衡,说明大方向向上。然后 5 分钟图上出现了吸收形态,价格在一个小区间里震荡,成交量放大但 Delta 很小。这时候我会盯着 1 分钟图,一旦 1 分钟图上出现买单失衡并突破吸收区间的上沿,我就进场做多。

这个流程我跑了两年,胜率大概在 65% 左右。当然,没有完美的策略,该止损的时候一定要止损。

核心总结:

  • 失衡是动力,吸收是阻力
  • 失衡看 Delta 的绝对值,吸收看 Delta 的收敛
  • 单周期信号不可靠,多周期共振才是王道
  • 吸收形态出现后,等突破,不猜方向

好了,这一章的内容就到这里。失衡和吸收是订单流分析的基础,也是最重要的两个形态。你们回去可以把代码跑一跑,看看自己交易品种上这些形态长什么样。下一章我们会聊「Delta 背离与价格拐点」,到时候见。


公众号:蓝海数据掘金营,微信deep3321