4、失衡与吸收:订单流中的失衡与吸收形态识别
各位同学,今天我们来聊聊订单流里两个最核心的形态——失衡(Imbalance)和吸收(Absorption)。
说实话,这两个概念我刚开始接触时也绕了不少弯路。那时候我盯着逐笔成交数据,总觉得价格涨跌就是买卖单的简单比拼。后来才发现,真正的门道藏在「不平衡」和「被消化」这两个动作里。
你想想看,市场为什么会有趋势?说白了,就是买卖力量失衡了。但失衡之后呢?是继续失衡,还是被对手盘吸收掉?这决定了你是追进去,还是该离场。
一、失衡(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 附近。这说明什么?说明有人在暗中吸筹。这就是吸收。
吸收的核心特征有三个:
- 价格停滞:价格在一个窄幅区间内反复震荡,不突破
- 成交量放大:相比前几根 K 线,成交量明显增加
- 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