2、失衡信号定义:订单簿失衡的数学定义、计算公式、阈值设定

好,咱们直接进入正题。

订单簿失衡,英文叫 Order Book Imbalance,简称 OBI。这玩意儿说白了,就是看买单和卖单谁更「猛」。如果买单堆得又厚又高,卖单稀稀拉拉,那价格大概率要往上走。反过来,卖单压顶,买单疲软,那价格就得往下掉。

听起来很简单对吧?但实际落地的时候,坑不少。我刚开始做高频策略那会儿,就吃过亏——以为失衡就是简单的「买一量减卖一量」,结果回测曲线漂亮得不行,实盘一跑就亏。为什么?因为定义太粗糙了。

2.1 数学定义:从直觉到公式

我们先给失衡信号一个严谨的数学定义。我个人习惯用这个公式:

OBI = (V_bid - V_ask) / (V_bid + V_ask)

其中:

  • V_bid:买方挂单的总量(可以是某一档,也可以是前几档的加权和)
  • V_ask:卖方挂单的总量(同理)

这个公式的值域在 [-1, 1] 之间。正数表示买方占优,负数表示卖方占优。0 表示均衡。

你可能会问:为什么不用简单的减法?比如 V_bid - V_ask?

嗯,这里要注意。减法的问题是——它没有归一化。比如某只股票买一挂了 1000 手,卖一挂了 800 手,差值是 200。另一只股票买一挂了 100 手,卖一挂了 80 手,差值只有 20。但这两者的「失衡程度」其实是一样的,都是 20% 的优势。用除法归一化之后,两者都是 0.111,这才有可比性。

核心要点:OBI 是一个归一化的比值,不是绝对差值。这样才能跨品种、跨时间对比。

2.2 计算公式的变种:深度加权

上面那个公式用的是「第一档」的挂单量。但实际交易中,大资金往往不会只盯着第一档。我记得有一次做 BTC 的订单簿策略,发现第一档经常被「钓鱼单」刷来刷去,信号噪音特别大。

后来我改用深度加权公式:

OBI_weighted = (Σ w_i * V_bid_i - Σ w_i * V_ask_i) / (Σ w_i * V_bid_i + Σ w_i * V_ask_i)

其中 w_i 是第 i 档的权重,通常按距离递减。比如:

档位 权重(示例) 说明
第1档 1.0 最靠近成交价,最重要
第2档 0.8 次重要
第3档 0.6 逐渐衰减
第4档 0.4 远距离,影响力弱
第5档 0.2 边缘信号

这样算出来的 OBI 更平滑,也更真实。我曾经对比过两种公式在 A 股 300 只股票上的表现,加权版的夏普比率平均高出 0.3 左右。当然,这跟品种也有关系,你自己可以试试。

2.3 阈值设定:多少才算「失衡」?

公式有了,下一个问题:OBI 算出来是 0.3,这算失衡吗?0.5 呢?0.8 呢?

阈值设定没有标准答案。我个人的经验是分三步走:

  1. 统计历史分布:把过去 30 天的 OBI 数据拉出来,画个直方图。看看 90% 分位数在哪,95% 在哪。
  2. 设定基础阈值:一般取 90% 分位数作为「轻度失衡」,95% 作为「重度失衡」。比如某只股票,90% 分位数是 0.4,那 OBI > 0.4 就算失衡。
  3. 动态调整:市场波动率变化时,阈值也要跟着变。我习惯用滚动窗口,比如过去 20 个交易日的滚动分位数。

小技巧:不要用固定阈值。比如你设 OBI > 0.5 就算失衡,结果某天市场突然放量,所有股票的 OBI 都飙到 0.7 以上,那你的信号就全废了。用动态分位数,自适应能力强很多。

2.4 避坑指南:我曾经踩过的三个坑

讲到这里,我得说说我当年踩过的坑,希望能帮你省点时间。

坑一:只看第一档。 我之前说过,第一档容易被操纵。有些做市商会故意在买一挂大单,然后撤单,制造虚假的买方强势。如果你只看第一档,很容易被耍。建议至少看前三档,或者用加权版本。

坑二:忽略时间衰减。 订单簿是动态的。一个挂单如果挂了 10 分钟还没成交,它的「诚意」就值得怀疑。我后来在公式里加了一个时间衰减因子——挂单时间越长,权重越低。效果立竿见影,假信号少了很多。

坑三:阈值设得太死。 我记得有一次做回测,把阈值设在 0.6,结果整个回测期只触发了 3 次信号。样本太少,统计意义都不大。后来我把阈值降到 0.3,信号数量多了 10 倍,虽然胜率降了一点,但总收益反而更高。阈值这东西,要在灵敏度和特异性之间找平衡。

警告:阈值设定不要过度优化。用历史数据调出来的最优阈值,到了未来可能完全失效。建议留一部分样本做「样本外验证」,别全信回测结果。

2.5 核心逻辑框架图

下面这张图,我把整个失衡信号的定义、计算、阈值设定串起来了。你可以保存下来,写代码的时候对照着看。

订单簿失衡信号核心逻辑 原始订单簿数据 计算 OBI = (V_bid - V_ask) / (V_bid + V_ask) 可选:深度加权 / 时间衰减 阈值判断 动态分位数 vs 固定阈值 未触发 无信号 触发 生成信号 买入/卖出指令 反馈:更新阈值参数

这张图里,我特意加了一条反馈回路——阈值不是一成不变的。每次信号生成之后,都要根据实际成交情况去调整阈值参数。说白了,这是一个自适应系统。

2.6 实战中的注意事项

最后,再啰嗦几句实战中的细节:

  • 数据频率:订单簿数据通常是毫秒级的。如果你做的是 tick 级策略,OBI 可以每笔 tick 都算一次。如果是分钟级策略,建议用快照数据,比如每秒拍一张订单簿快照。
  • 品种差异:股票和加密货币的订单簿行为完全不同。股票市场有涨跌停板,加密货币没有。我建议你针对不同品种单独调参。
  • 滑点影响:失衡信号越强,说明市场越「拥挤」。这时候你进场,滑点可能很大。我一般会在信号触发后,用限价单而不是市价单,减少冲击成本。

一句话总结:OBI 的核心是「归一化比值 + 动态阈值 + 深度加权」。别搞复杂了,先把这三样做对,再谈优化。


公众号:蓝海资料掘金营,微信deep3321