深度指标计算:买卖价差、深度斜率、深度比率、加权深度、流动性黑洞识别
各位同学,今天我们来聊聊市场深度。说白了,深度就是看市场能「吃下」多大的单子而不引起价格剧烈波动。我刚开始做量化那会儿,总觉得看个买卖盘口就够用了,结果有一次策略回测跑得漂亮,实盘一上去就被深度不足的市场给「教育」了。嗯,从那以后,深度指标就成了我策略里的标配。
1. 买卖价差(Bid-Ask Spread)
这是最基础的深度指标。价差越小,流动性越好。公式很简单:
Spread = Ask_Price - Bid_Price
Relative_Spread = (Ask_Price - Bid_Price) / Mid_Price
我个人习惯用相对价差,因为不同价格的股票绝对值没法比。比如茅台价差5毛和垃圾股价差5毛,意义完全不同。
2. 深度斜率(Depth Slope)
深度斜率衡量的是价格每变动一个单位,订单量变化多少。说白了,就是看订单簿的「陡峭程度」。
计算方式:
# 假设我们有买卖各5档数据
def depth_slope(bids, asks):
# bids: [(price, volume), ...]
# asks: [(price, volume), ...]
bid_prices = [p for p, v in bids]
bid_volumes = [v for p, v in bids]
ask_prices = [p for p, v in asks]
ask_volumes = [v for p, v in asks]
# 用线性回归拟合价格-成交量关系
from numpy import polyfit
bid_slope = polyfit(bid_prices, bid_volumes, 1)[0]
ask_slope = polyfit(ask_prices, ask_volumes, 1)[0]
return bid_slope, ask_slope
你想想看,如果斜率很大,说明价格稍微一变动,成交量就急剧变化——这种市场其实很脆弱。我在做股指期货的流动性分析时,发现开盘后15分钟内的深度斜率往往是最陡的,这时候做市商还没完全进场。
3. 深度比率(Depth Ratio)
深度比率是买方深度和卖方深度的比值。公式:
Depth_Ratio = Total_Bid_Volume / Total_Ask_Volume
这个指标能告诉你当前市场的买卖力量对比。如果深度比率大于1,说明买方深度更大,市场偏多头;反之则偏空头。
4. 加权深度(Weighted Depth)
加权深度考虑了价格距离的影响。离当前价格越近的订单,权重越大。计算方式:
def weighted_depth(bids, asks, decay_factor=0.9):
mid_price = (bids[0][0] + asks[0][0]) / 2
bid_weighted = 0
for price, volume in bids:
weight = decay_factor ** abs(price - mid_price)
bid_weighted += volume * weight
ask_weighted = 0
for price, volume in asks:
weight = decay_factor ** abs(price - mid_price)
ask_weighted += volume * weight
return bid_weighted, ask_weighted
为什么要加权?因为离当前价格远的订单,实际成交概率低。我记得有一次分析某只ETF的流动性,不加权时看起来深度很大,但加权后发现大部分流动性都在远离当前价的位置,实际能吃的单子很少。这就是所谓的「虚深度」。
5. 流动性黑洞识别
流动性黑洞,说白了就是市场突然「干涸」了。订单簿上的挂单瞬间消失,价差急剧扩大。识别方法:
- 价差突变检测: 价差在短时间内扩大超过3倍标准差
- 深度骤降检测: 总深度在1秒内下降超过50%
- 订单簿斜率反转: 深度斜率从正变负或从负变正
def detect_liquidity_hole(orderbook_series):
# orderbook_series: 时间序列的订单簿快照
alerts = []
for i in range(1, len(orderbook_series)):
spread_change = (orderbook_series[i].spread -
orderbook_series[i-1].spread) / orderbook_series[i-1].spread
depth_change = (orderbook_series[i].total_depth -
orderbook_series[i-1].total_depth) / orderbook_series[i-1].total_depth
if spread_change > 3.0 and depth_change < -0.5:
alerts.append({
'time': orderbook_series[i].timestamp,
'type': '流动性黑洞',
'severity': '高'
})
return alerts
知识体系总览
下面这张图展示了深度指标之间的逻辑关系,我画了很久才理清楚:
这些指标单独看都有局限性,但组合起来就能构建一个完整的流动性监控体系。我个人习惯把深度比率和加权深度结合起来用,前者看方向,后者看真实可用的流动性。
- 买卖价差:流动性最直接的度量,越小越好
- 深度斜率:订单簿的陡峭程度,斜率突变是预警信号
- 深度比率:买卖力量对比,领先于价格变化
- 加权深度:剔除虚深度,反映真实可成交的流动性
- 流动性黑洞:多个指标同时恶化时的极端情况
好了,这一章的内容就到这里。这些指标在实际项目中怎么用、怎么调参,需要你在回测中慢慢摸索。记住,没有万能的指标,只有适合你策略的组合。