失衡与吸收:识别订单流中的供需失衡与吸收模式
做订单流交易这些年,我越来越觉得,市场本质上就是个「供需博弈」的战场。价格为什么涨?因为买的人多,卖的人少。为什么跌?反过来。但问题在于——你怎么在盘面上实时看到这种供需变化?
嗯,这就是我们今天要聊的核心:失衡(Imbalance)和吸收(Absorption)。这两个概念,说白了就是订单流里的「供需信号灯」。我个人习惯把它们当作趋势判断的「第一道过滤器」。
1. 失衡(Imbalance):供需的瞬间断裂
先讲失衡。这个概念其实很直观:某一价位上,买单和卖单的数量严重不对等。
举个例子,假设在某个价位上,出现了500手的主动买单,但只有50手的主动卖单。那说明什么?说明买方在疯狂抢筹,卖方根本不够卖。这种时候,价格大概率会继续往上冲。
我在项目中遇到过好几次这样的情况:某只股票突然出现大额失衡,我当时没反应过来,结果价格直接拉了两个点。嗯,从那以后,我再也不敢忽视这种信号了。
失衡的量化定义
在订单流分析中,我们通常用Delta来衡量失衡。Delta = 主动买单量 - 主动卖单量。当Delta的绝对值超过某个阈值时,就认为出现了失衡。
我个人习惯用以下标准:
| 失衡类型 | Delta阈值 | 含义 |
|---|---|---|
| 轻度失衡 | Delta > 3倍平均Delta | 短期动能较强,可能延续 |
| 中度失衡 | Delta > 5倍平均Delta | 趋势大概率延续,可加仓 |
| 重度失衡 | Delta > 10倍平均Delta | 极端情绪,注意反转风险 |
你可能会问:为什么重度失衡反而要注意反转?因为物极必反。当失衡过于极端时,往往意味着情绪已经宣泄到极致,接下来可能就是衰竭。
2. 吸收(Absorption):大资金的「暗度陈仓」
吸收这个概念,比失衡要隐蔽得多。它指的是:在某个价位区间,虽然出现了大量的主动卖单,但价格就是不跌。
为什么会这样?因为有人在下面「接盘」。说白了,就是大资金在悄悄吸筹。他们故意挂出大量卖单,制造抛压假象,吓走散户,然后自己偷偷吃掉所有卖单。
我曾经吃过一次亏。当时看到某只股票连续出现大额卖单,Delta持续为负,我以为要跌了,赶紧做空。结果价格纹丝不动,最后反而拉了上去。后来复盘才发现,那就是典型的吸收模式——大资金在底部疯狂吃货。
吸收的识别方法
识别吸收,不能只看Delta,还要结合价格行为。我总结了三个关键点:
- Delta持续为负:主动卖单明显多于主动买单
- 价格不跌:价格在某个区间内横盘,甚至微涨
- 成交量放大:说明有人在大量交易
当这三个条件同时满足时,基本可以判定为吸收。这时候,你应该考虑做多,而不是做空。
核心要点:失衡是「明牌」,吸收是「暗牌」。失衡告诉你趋势可能延续,吸收告诉你趋势可能反转。两者结合使用,效果最佳。
3. 实战中的组合应用
光讲理论没意思,我们来看看实战中怎么用。我个人习惯把失衡和吸收放在一起分析,形成一套完整的判断流程。
场景一:趋势延续
假设价格处于上升趋势中,突然出现一个重度失衡(Delta > 10倍均值)。这时候,我会怎么做?
- 先确认趋势方向:均线多头排列,高点低点不断抬高
- 再看失衡位置:是否在关键支撑位附近
- 最后看成交量:是否配合放大
如果都符合,我会选择加仓。但注意,仓位要控制好,因为重度失衡后往往会有回调。
场景二:趋势反转
如果价格在下跌趋势中,突然出现吸收模式(Delta为负但价格不跌),那就要警惕了。这可能是底部信号。
我记得有一次做期货,连续三天出现吸收,价格一直在低位横盘。我当时觉得不对劲,就平掉了空单。结果第二天,价格直接跳空高开,拉了一根大阳线。嗯,那次经历让我深刻理解了「吸收是反转的前奏」这句话。
4. 代码实现:自动识别失衡与吸收
理论讲完了,我们来点实际的。下面是我写的一个Python函数,用于自动识别失衡和吸收模式。
import pandas as pd
import numpy as np
def detect_imbalance_absorption(df, delta_col='delta', volume_col='volume',
price_col='close', window=20, threshold=3):
"""
识别失衡与吸收模式
参数:
df: DataFrame,包含Delta、成交量、价格数据
delta_col: Delta列名
volume_col: 成交量列名
price_col: 价格列名
window: 计算均值的窗口大小
threshold: 失衡阈值倍数
返回:
df: 添加了信号列的DataFrame
"""
# 计算Delta的移动平均和标准差
df['delta_ma'] = df[delta_col].rolling(window).mean()
df['delta_std'] = df[delta_col].rolling(window).std()
# 识别失衡
df['imbalance'] = np.where(
abs(df[delta_col]) > threshold * df['delta_std'],
np.sign(df[delta_col]), # 1表示多头失衡,-1表示空头失衡
0
)
# 识别吸收
# 条件1: Delta为负(主动卖单多)
# 条件2: 价格不跌(价格变化小于0.1%)
# 条件3: 成交量放大(大于均值1.5倍)
df['price_change'] = df[price_col].pct_change()
df['volume_ma'] = df[volume_col].rolling(window).mean()
df['absorption'] = np.where(
(df[delta_col] < 0) &
(df['price_change'] > -0.001) &
(df[volume_col] > 1.5 * df['volume_ma']),
1, # 1表示吸收(看涨信号)
0
)
return df
# 使用示例
# df = pd.read_csv('orderflow_data.csv')
# result = detect_imbalance_absorption(df)
# print(result[['close', 'delta', 'imbalance', 'absorption']].tail(10))
小技巧:在实际使用中,阈值不要设得太死。不同品种、不同时间周期,阈值可能需要调整。我一般先用默认参数跑一遍,然后根据回测结果微调。
5. 避坑指南
最后,分享几个我踩过的坑,希望能帮你少走弯路。
避坑一:我曾经以为失衡越大越好,结果在重度失衡时追高,直接被套。后来才明白,失衡要结合位置看。在阻力位附近的失衡,往往是陷阱。
避坑二:吸收模式不是100%准确。有时候,价格不跌只是因为流动性好,而不是有人在吸筹。所以,一定要结合其他指标(如支撑阻力、均线)来确认。
避坑三:别只看单根K线的失衡或吸收。我习惯看连续3-5根K线的模式,这样信号更可靠。单根K线的信号,噪音太大。
6. 知识体系框架
为了让你更直观地理解失衡与吸收的关系,我画了一张流程图。这张图展示了我个人交易决策的核心逻辑。
这张图的核心逻辑很简单:先看失衡,再看吸收。失衡告诉你趋势是否强劲,吸收告诉你趋势是否可能反转。两者结合,基本能覆盖大部分交易场景。
好了,关于失衡与吸收的内容就讲到这里。记住,这些工具不是万能的,但它们能帮你更好地理解市场的「语言」。多复盘、多练习,慢慢你就能形成自己的感觉。
总结一句话:失衡是「势」,吸收是「局」。看懂势,能赚钱;看懂局,能赚大钱。