4、订单簿动态特征:订单到达率模型、订单撤销行为、订单簿恢复速度、微观结构噪声

订单簿不是静止的。它每时每刻都在变化。

我刚开始做高频策略时,犯过一个低级错误——把订单簿当成快照来用。结果回测曲线漂亮得像假的一样,实盘一跑就崩。后来我才明白,订单簿的动态特征才是策略能否赚钱的关键

这一节,我们聊聊订单簿的四个核心动态特征。说白了,就是搞清楚订单怎么来、怎么走、市场受伤后怎么恢复,以及那些让你头疼的噪声到底是怎么回事。

4.1 订单到达率模型

订单到达率,就是单位时间内新订单进入订单簿的数量。你想想看,如果每秒进来1000个订单,和每秒进来10个订单,策略逻辑肯定不一样。

最常见的模型是泊松过程。假设订单到达是独立的、均匀的,那么到达间隔服从指数分布。代码实现很简单:

import numpy as np

# 假设平均每秒到达 50 个订单
lambda_rate = 50.0
# 模拟 10 秒内的到达间隔
inter_arrival_times = np.random.exponential(1/lambda_rate, 10)
print(inter_arrival_times)

但现实没那么理想。我在实盘数据中发现,订单到达率有明显的日内模式。开盘和收盘前,到达率会飙升;中午时段,到达率会下降。所以,我个人习惯用自激励点过程(Hawkes过程)来建模。

核心要点:

  • 泊松过程:简单,适合低频场景
  • Hawkes过程:考虑历史事件的激励效应,适合高频场景
  • 实际应用中,建议用5分钟窗口滚动估计到达率

我的经验: 曾经有一个策略,在模拟盘上表现很好,实盘却一直亏损。排查后发现,订单到达率在实盘中比模拟盘高了3倍,导致我的限价单总是排不到前面。后来我加了一个到达率自适应模块,才把问题解决。

4.2 订单撤销行为

订单撤销,是订单簿里最容易被忽视的特征。很多人只关注成交,却忽略了那些「来了又走」的订单。

为什么会这样?因为高频做市商和套利者会频繁挂单和撤单,来探测市场深度或诱骗对手。我见过一个极端案例:某个股票在1秒内,订单簿顶部被撤销和重新挂单超过200次。

订单撤销率是一个重要指标。计算公式:

撤销率 = 撤销订单数 / (成交订单数 + 撤销订单数)

一般来说,撤销率超过60%,说明市场中有大量「虚假流动性」。这时候,你看到的深度可能只是幻象。

市场状态 典型撤销率 策略建议
正常交易 30% - 50% 正常使用限价单
高波动期 50% - 70% 减少限价单,多用市价单
异常行情 > 70% 暂停交易,等待稳定

避坑指南: 我曾经在撤单率高的时段使用冰山订单,结果被高频交易者反复「钓鱼」。后来我学乖了——撤单率高的时候,要么不做,要么用暗池。

4.3 订单簿恢复速度

订单簿恢复速度,指的是大单成交后,订单簿恢复到之前状态所需的时间。这个指标直接反映了市场的韧性和流动性质量

我习惯用恢复时间(Recovery Time)来衡量。具体做法:

  1. 记录大单成交时刻t0
  2. 记录t0时刻的买卖盘口深度D0
  3. 记录深度恢复到D0的90%所需时间

举个例子:

# 伪代码示例
def compute_recovery_time(order_book_snapshots, trade_time):
    depth_before = get_depth_at(order_book_snapshots, trade_time)
    for t in range(trade_time, trade_time + 100):
        current_depth = get_depth_at(order_book_snapshots, t)
        if current_depth >= 0.9 * depth_before:
            return t - trade_time
    return None

恢复速度快的市场(< 1秒),说明做市商活跃,流动性好。恢复速度慢(> 5秒),说明市场脆弱,大单容易造成价格滑点。

实战应用: 我做过一个统计,恢复速度快的股票,做市策略的胜率能提高15%以上。所以,我现在选标的时,一定会看这个指标。

4.4 微观结构噪声

微观结构噪声,说白了就是订单簿里那些「不干净」的信号。比如报价跳跃、买卖价差波动、订单簿深度突变等。

噪声的来源主要有三个:

  • 离散报价: 价格只能以最小变动单位跳动,导致真实价格被「量化」了
  • 订单流不均衡: 买卖订单到达的随机性
  • 信息延迟: 不同交易所之间的数据不同步

我常用的噪声度量方法是Realized Variance(已实现方差)的分解:

# 计算微观结构噪声
def microstructure_noise(prices, interval=5):
    # 计算高频已实现方差
    rv_high = np.sum(np.diff(prices)**2)
    # 计算低频已实现方差(降采样)
    low_freq_prices = prices[::interval]
    rv_low = np.sum(np.diff(low_freq_prices)**2)
    # 噪声占比
    noise_ratio = (rv_high - rv_low) / rv_high
    return noise_ratio

当噪声占比超过30%时,很多统计套利策略会失效。我记得有一次,一个基于协整关系的配对交易策略,在噪声高的时段回测表现很好,实盘却一直亏损。后来发现,噪声把协整关系给「淹没」了。

我的建议: 处理噪声,我一般用两种方法:一是用中位数滤波平滑价格序列;二是用交易量加权价格(VWAP)代替最后一笔成交价。效果都不错。

知识体系总览

下面这张图,把订单簿动态特征的四个维度串起来了。你可以看到它们之间的关联:

订单簿动态特征 订单到达率模型 • 泊松过程:独立均匀到达 • Hawkes过程:自激励效应 • 日内模式:开盘/收盘高峰 订单撤销行为 • 虚假流动性识别 • 撤销率计算与阈值 • 钓鱼订单防范 订单簿恢复速度 • 恢复时间度量方法 • 市场韧性评估 • 做市策略胜率关联 微观结构噪声 • 离散报价与量化误差 • 已实现方差分解 • 中位数滤波/VWAP 四个维度相互影响,共同决定订单簿的微观结构

嗯,这四个特征,你如果都能量化出来,那你的策略就已经超越了90%的对手。剩下的,就是实盘中的细节打磨了。


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