失衡棒 Imbalance Bars:让信息流的不对称决定采样节奏
美元棒看得见活跃、看不见方向:买卖各一亿的缠斗日和净买两亿的扫货日成交额相同,切出同样多 bar。失衡棒改追踪累计签名流 θ:双边均衡时 θ 随机游走难触阈(bar 稀疏),知情单边流让 θ 线性狂奔(bar 密集开火)。12 万 tick 合成市场(7 段知情时段)实测:知情时段采样密度比,时间棒 1.00×(失明)、美元棒 1.28×、tick 失衡棒 5.01×、美元失衡棒 5.98×;检测延迟从 6.2 分钟压到 1.9-2.5 分钟。最诚实的发现:失衡棒超额峰度 2.7-4.6 反高于时间棒的 0.03——它是信息浓缩器而非分布美化器,与美元棒目标正交。三盆冷水:AFML 原文 EWMA 阈值有正反馈塌缩缺陷(实务用固定阈值+定期再校准)、真实市场方向靠 tick rule 推断且误差集中在知情时段、采样密集不等于可交易信号。
一句话版本#
美元棒问『市场有多忙』,失衡棒问『市场有多偏』——累计签名成交流突破阈值就切一根 bar,双边均衡时安静,单边知情流出现时密集开火,实测在知情交易时段的采样密度是平静时段的 5-6 倍,而时间棒对此完全失明。
美元棒的盲区:它看得见活跃,看不见方向#
上一篇我们讲了 Dollar Bars:累计成交金额到阈值切一根 bar,让采样节奏跟随市场活跃度。它解决了时钟采样的肥尾和波动聚集问题——但它有一个结构性盲区。
考虑两个交易日:
- A 日:买方成交 1 亿,卖方成交 1 亿,多空缠斗,价格原地踏步;
- B 日:某机构持续扫货,净买入 2 亿,价格被一路推高。
两天的总成交金额相同,美元棒切出同样多的 bar。但从信息含量看,这两天天差地别:A 日是噪声交易者互相交换筹码,B 日是有人知道些什么。
市场微观结构理论(Kyle 1985、Easley-O’Hara 的 PIN 模型)的核心洞察正是:知情交易者的特征不是交易得多,而是交易得偏——他们只站在一边。噪声交易者买卖大致对称,知情者的出现让签名成交流(signed order flow)出现持续的单边失衡。想捕捉「信息到达」而不只是「活跃度上升」,就得追踪这个失衡本身。
失衡棒的机制:θ 的单边狂奔#
失衡棒(Imbalance Bars)是 López de Prado《Advances in Financial Machine Learning》第 2 章 information-driven bars 家族的核心成员。机制一句话说完:
给每笔成交标上方向 (主动买 / 主动卖),维护累计签名流:
其中 是权重——取 1 就是 tick 失衡棒(TIB),取成交金额就是美元失衡棒(DIB)。当 突破阈值,切一根 bar,θ 清零重来。
为什么这个机制能「闻到」知情交易?看 θ 的两种行走方式:
- 双边均衡():θ 是随机游走,走 步只能漂到 的距离,触阈很慢——bar 稀疏,采样节奏放缓;
- 单边失衡():θ 获得漂移项,以 的线性速度冲向阈值——bar 密集,采样节奏骤然加快。
随机游走 vs 带漂移游走的触阈速度差异,就是失衡棒的信息检测器。 它不需要任何模型、任何训练,纯粹靠一阶累加和一个阈值。

右图是一段真实模拟数据:知情流开始前 θ 上下扭动(随机游走),开始后一路单边狂奔——这就是触发采样加速的物理图景。左图是美元失衡棒的 bar 时长分布:从几十 tick 到上千 tick 横跨两个数量级,采样节奏完全由失衡强度接管。
实验设计:在知情交易可控的市场里考试#
真实数据里你不知道知情交易何时发生,所以又是合成市场上场。我们生成 120,000 笔 tick(约 600 分钟),基础状态下每笔成交方向是公平硬币;随机插入 7 段知情交易时段(每段 1500-4000 tick),期间单边方向概率提升到 0.60-0.68,且知情单的规模略大(×1.3)。价格由签名流的永久冲击驱动——这是 Kyle 模型的离散化简版。
四个选手同台,bar 数全部校准到约 600 根(公平对比):1 分钟时间棒、美元棒、tick 失衡棒、美元失衡棒。
def imbalance_bars(flow, threshold):
"""flow[i] = b[i] * v[i],|累计流| 突破阈值切 bar。"""
edges, theta = [], 0.0
for i in range(len(flow)):
theta += flow[i]
if abs(theta) >= threshold:
edges.append(i)
theta = 0.0
return np.array(edges)python结果一:采样密度——失衡棒在知情时段密集开火#
统计每种 bar 在知情时段 vs 平静时段的采样密度(每千 tick 切几根 bar):
| Bar 类型 | 知情时段密度 | 平静时段密度 | 密度比 |
|---|---|---|---|
| 时间棒 | 4.98 | 4.99 | 1.00×(失明) |
| 美元棒 | 6.06 | 4.73 | 1.28× |
| tick 失衡棒 | 15.98 | 3.19 | 5.01× |
| 美元失衡棒 | 15.56 | 2.60 | 5.98× |
时间棒的 1.00× 是定义使然——它按钟表切分,市场里发生什么与它无关。美元棒的 1.28× 来自知情单规模略大带来的成交金额增量,聊胜于无。失衡棒的 5-6× 是质变:知情时段拿到的 bar 是平静时段的五六倍,意味着任何下游模型在信息最密集的时刻获得最高的时间分辨率。


上图直观展示一段知情交易时段(粉色区域):时间棒均匀打点,对粉色区域毫无反应;美元失衡棒在粉色区域内密集开火,平静段则大幅放缓。
结果二:检测延迟——从 6 分钟压到 2 分钟#
采样密度是静态指标,更实战的问题是:知情流开始后多久,你能从 bar 序列上确认它? 定义检测事件为「连续 3 根 bar 方向与知情流一致」,测量从知情流开始到检测事件的延迟:
| Bar 类型 | 检出率 | 延迟中位数 |
|---|---|---|
| 时间棒 | 7/7 | 6.2 分钟 |
| 美元棒 | 7/7 | 4.9 分钟 |
| tick 失衡棒 | 7/7 | 1.9 分钟 |
| 美元失衡棒 | 7/7 | 2.5 分钟 |
延迟从 6 分钟压缩到 2 分钟。机制不神秘:知情流让 θ 快速触阈 → bar 变短 → 同样「3 根确认」所需的墙上时间大幅缩短。失衡棒相当于把「确认一个单边流」的采样成本从固定时间预算变成了自适应预算。

结果三(最诚实的一条):失衡棒的收益分布更肥尾,而这是特性#
如果你以为 information-driven bars 家族都朝「收益更正态」的方向使劲,这组数字会纠正你:
| Bar 类型 | 超额峰度 | JB 统计量 | |r| 一阶自相关 |
|---|---|---|---|
| 时间棒 | 0.03 | 1 | -0.006 |
| 美元棒 | -0.05 | 3 | -0.025 |
| tick 失衡棒 | 2.68 | 195 | 0.131 |
| 美元失衡棒 | 4.61 | 521 | 0.119 |
失衡棒的收益分布显著更肥尾。这不是 bug——想清楚它在干什么就明白了:它把知情时段(价格大幅单边移动)压缩进少数几根 bar,每根都承载完整的方向性冲击;平静时段的 bar 则又长又平。方向性信息被浓缩了,而浓缩的代价就是分布的两极分化。
这揭示了一个常被混淆的要点:美元棒和失衡棒的目标是正交的。 美元棒是分布美化器——让收益接近 iid 高斯,伺候对分布假设敏感的 ML 流水线;失衡棒是信息浓缩器——让 bar 的切分与信息到达对齐,伺候需要检测「谁在买」的策略(订单流策略、知情交易预警、事件驱动入场)。选哪个取决于下游要什么,「都是 AFML 第 2 章的所以随便选一个」是常见误用。
三盆冷水#
1. 教科书的 EWMA 自适应阈值有正反馈塌缩缺陷。 AFML 原文的阈值是 ,两个期望都用 EWMA 在线估计。这个设计在实务中臭名昭著:当市场长期接近均衡时 ,阈值坍缩,bar 长度崩到 1 tick,然后 EWMA 被这些退化 bar 进一步污染——正反馈死亡螺旋。我们最初的实现就踩了这个坑(bar 数直接爆到 12 万根,等于每 tick 一根)。实务建议:用固定阈值 + 定期(如每日/每周)离线再校准 bar 数量,保留经济含义,放弃在线自适应的花哨。开源实现(如 mlfinlab)为此加了大量补丁,恰恰说明原始配方不稳。
2. 真实市场里,b 是猜出来的。 合成实验里每笔成交的方向是上帝视角直接给的;真实数据里你只有价格和量,方向要靠 tick rule(成交价高于前价标买、低于标卖)或 Lee-Ready 算法推断,准确率约 85%。更麻烦的是误差不随机:在价格快速移动、盘口频繁刷新的时段——恰恰是知情交易最活跃的时段——分类错误率系统性升高。你的信息检测器在最需要它的时刻最不可靠,这个折扣必须打进预期。A 股逐笔数据带有买卖方向标记,条件相对好;但对只有分钟线的市场,失衡棒基本没法做——它天生是 tick 级工具。
3. 采样密集 ≠ 可交易信号。 失衡棒告诉你「单边流正在发生」,但价格冲击是即时的——你检测到失衡时,θ 的漂移已经推着价格走了一段。检测延迟 2 分钟意味着入场时冲击的前 2 分钟已经 price-in。失衡采样的价值不在「跟着买」这种朴素策略,而在:为 ML 模型提供信息对齐的样本切分、为做市商提供撤退预警(检测到知情流就拉宽价差——这正是 Easley 等人 VPIN 的用法)、为事件研究提供比时钟更合理的事件窗口。把它当买入信号发生器,是对工具的降维使用。
在工具链中的位置#
至此 information-driven bars 家族的两根支柱都齐了:美元棒管「何时活跃」(分布美化,ML 前处理默认选项),失衡棒管「谁在推」(信息浓缩,订单流与知情交易检测)。再往上一层是 run bars(追踪连续同向序列而非累计失衡,对「温水煮青蛙」式的缓慢单边流更敏感)和 VPIN(把失衡率变成连续的毒性指标)。配合前面讲过的趋势扫描标注和三重障碍法,「怎么切样本」和「怎么贴标签」这两件监督学习的地基工程,都有了比”每 5 分钟一根 + 20 天后涨没涨”严肃得多的答案。