3、订单簿特征工程:盘口不平衡指标、订单簿斜率、价格冲击模型、流动性度量指标、订单簿熵
做量化交易这些年,我越来越觉得——订单簿就是市场的脉搏。你盯着K线看,看到的是结果;你盯着订单簿看,看到的是过程。这一章,咱们就来聊聊怎么从订单簿里挖出那些真正有用的特征。
说白了,特征工程就是把原始数据变成能喂给模型的“养料”。订单簿数据量大、噪声多,直接扔进去肯定不行。我个人的习惯是,先构建几个核心指标,再逐步组合。下面这五个方向,是我在实战中反复打磨过的。
3.1 盘口不平衡指标
这个指标,我愿称之为“订单簿的晴雨表”。它衡量的是买盘和卖盘的力量对比。公式很简单:
盘口不平衡 = (买一量 - 卖一量) / (买一量 + 卖一量)
取值范围在 -1 到 1 之间。正值表示买方强势,负值表示卖方强势。嗯,这里要注意——只看买一卖一是不够的。
我曾经在回测一个高频策略时,发现盘口不平衡指标经常出现“假信号”。后来我深入排查,发现是因为大单挂在买二买三位置,买一只是小单。所以后来我改用了加权版本:
加权不平衡 = Σ(买i量 * 权重i) - Σ(卖i量 * 权重i) / 总深度
权重可以用价格距离的倒数,或者直接用指数衰减。我个人习惯用前5档,权重设为 [1, 0.8, 0.6, 0.4, 0.2]。
3.2 订单簿斜率
斜率这个概念,其实是从限价订单的“价格-累积量”曲线里来的。你想想看,如果买盘在靠近最优价的位置堆积了大量订单,那曲线就会很陡;如果订单分散在各个价位,曲线就会很平缓。
我一般这样计算:
斜率 = (累积量_远端 - 累积量_近端) / (价格_远端 - 价格_近端)
具体来说,我会取买一到买五的累积量,拟合一条直线,斜率就是这条线的陡峭程度。斜率越大,说明订单越集中在近端,市场“护盘”意愿强;斜率越小,说明订单稀疏,价格容易滑点。
我记得有一次做股指期货的订单簿分析,发现斜率指标在趋势行情中会突然变平——这说明大资金在撤单,准备发动一波行情。这个发现后来成了我们策略的一个重要预警信号。
3.3 价格冲击模型
价格冲击模型,说白了就是回答一个问题:我吃多少量,价格会动多少?这个在实盘交易中太重要了。
最经典的模型是Kyle的λ模型:
ΔP = λ * Q
其中ΔP是价格变化,Q是成交量,λ就是市场深度系数。λ越小,说明市场越深,吃单对价格影响小。
但在实际应用中,我更喜欢用瞬时冲击模型。它考虑的是订单簿的实时状态:
冲击成本 = Σ(价格i * 量i) / 总成交量 - 当前最优价
举个例子,你想买100手,但买一只有20手,买二有30手,买三有50手。那你的实际成交均价就会高于买一价。这个差值,就是冲击成本。
我建议在策略中把这个指标做成实时监控。当冲击成本突然变大时,说明流动性在枯竭,这时候最好暂停交易。
3.4 流动性度量指标
流动性这个词,大家天天挂在嘴边,但怎么量化?我常用的有三个维度:
| 指标 | 计算公式 | 含义 |
|---|---|---|
| 买卖价差 | 卖一价 - 买一价 | 最直接的流动性度量,越小越好 |
| 市场深度 | 买一到买五的总量 + 卖一到卖五的总量 | 衡量市场能承接多少订单 |
| Amihud非流动性指标 | |收益率| / 成交量 | 单位成交量引起的价格波动 |
我个人最常用的是深度加权价差:
深度加权价差 = (卖一价 * 卖一量 + 买一价 * 买一量) / (卖一量 + 买一量)
这个指标比单纯的价差更稳定。为什么?因为它把量也考虑进去了。有时候价差虽然小,但量也小,这种流动性其实是“虚”的。
3.5 订单簿熵
熵这个概念,是从信息论里借来的。它衡量的是订单簿的“混乱程度”。公式如下:
熵 = - Σ(pi * log(pi))
其中pi是第i档订单量占总订单量的比例。熵值越大,说明订单分布越均匀,市场越“无序”;熵值越小,说明订单集中在少数价位,市场有明确的“共识”。
我刚开始接触这个指标时,觉得它有点玄乎。直到有一次在分析一个闪崩事件时,发现订单簿熵在崩盘前突然飙升——这说明市场参与者意见分歧巨大,流动性在快速分散。嗯,从那以后,我就把熵作为风险监控的必备指标了。
实际计算时,我一般取前10档数据。代码实现也很简单:
import numpy as np
def order_book_entropy(bids, asks, levels=10):
# bids和asks是二维数组,每行是[价格, 量]
all_volumes = np.concatenate([bids[:levels, 1], asks[:levels, 1]])
total_volume = np.sum(all_volumes)
if total_volume == 0:
return 0
probs = all_volumes / total_volume
entropy = -np.sum(probs * np.log(probs + 1e-10))
return entropy
知识体系总览
下面这张图,是我自己梳理的订单簿特征工程框架。你可以把它当作一个“检查清单”,每次做特征时对照一下:
这五个特征,每一个单独拿出来都能写一篇论文。但在实战中,我更建议你组合使用。比如盘口不平衡+斜率,可以判断趋势的持续性;流动性+熵,可以识别市场异常状态。
最后说一句:特征工程没有银弹。同样的指标,在股票、期货、加密货币上的表现可能天差地别。我的建议是——先跑一遍回测,看看哪些特征对你的策略有稳定的贡献,然后再深入优化。
公众号:蓝海资料掘金营,微信deep3321