4、流动性度量指标(下):市场深度指标与价格影响模型
各位同学,咱们接着聊流动性度量。上一节讲了价差类指标,说白了那是衡量「交易成本」的。今天要聊的,是衡量「市场容量」的——也就是你扔一笔大单进去,市场能扛得住吗?
我个人做量化策略这些年,最怕的就是策略在回测里跑得漂亮,一上实盘就滑点滑到亏钱。原因往往就出在——你只看了买卖价差,没看市场深度。
一、市场深度指标
市场深度,简单说就是订单簿上各个价位的挂单量。深度越厚,大单进去越不容易把价格打飞。
1. 订单簿斜率
这个指标挺直观的。你把订单簿上的价格和累计挂单量画个曲线,斜率越大,说明价格每变动一个单位,能成交的量越大。反过来,斜率小,说明订单簿「薄」,一戳就破。
计算公式:
订单簿斜率 = Δ价格 / Δ累计挂单量
嗯,这里要注意:斜率是分方向的。买盘斜率和卖盘斜率通常不对称。我见过一些做市商策略,专门盯着这个斜率不对称性来吃价差。
2. 成交量加权价差
这个指标比简单价差更实用。它考虑了不同价位上的挂单量,算出一个「加权平均」的买卖价差。
成交量加权价差 = Σ(卖盘价×卖盘量 - 买盘价×买盘量) / 总挂单量
说白了,就是告诉你:如果你想吃掉订单簿上前N档的所有流动性,平均每单位要付出多少成本。
我在做ETF套利策略时,就经常用这个指标来估算实际交易成本。有时候买卖价差看着只有0.01,但成交量加权价差可能已经到0.05了——这就是陷阱。
二、价格影响模型
订单簿指标只能告诉你「当前」的流动性状况。但如果你要执行大单,市场会怎么反应?这就需要价格影响模型了。
1. Kyle's Lambda
这个模型是Kyle在1985年提出的,核心思想很简单:
ΔP = λ × Q
其中ΔP是价格变动,Q是交易量,λ就是Kyle's Lambda——衡量「每单位交易量对价格的冲击程度」。
λ越大,说明市场越脆弱,一点点交易量就能把价格打飞。λ越小,说明市场深度好,大单进去也不怎么影响价格。
怎么算λ? 我一般用日内高频数据做回归:
import numpy as np
import pandas as pd
# 假设有分钟级的价格和成交量数据
def calc_kyle_lambda(price, volume):
# 计算价格变化
dp = price.diff().dropna()
# 对齐成交量
vol = volume.iloc[1:]
# 回归:ΔP = λ × Q + ε
# 用最小二乘法
lambda_hat = np.sum(dp * vol) / np.sum(vol ** 2)
return lambda_hat
你想想看,这个λ其实是个动态指标。市场情绪好的时候λ小,恐慌的时候λ会突然放大。我记得2020年3月美股熔断那会儿,λ值直接翻了10倍——那时候你就算只卖100股,都能把价格砸下去一个tick。
2. Almgren-Chriss模型
这个模型更实用。它把价格影响拆成了两部分:
- 永久性冲击: 由信息不对称引起的,交易完成后价格不会恢复
- 临时性冲击: 由流动性消耗引起的,交易完成后价格会逐渐恢复
模型公式长这样:
永久冲击 = γ × σ × (Q / V)^α
临时冲击 = η × σ × (Q / V)^β
其中:
- σ:波动率
- Q:你的交易量
- V:市场总成交量
- γ、η、α、β:需要估计的参数
说实话,这个模型参数估计挺麻烦的。我一般用历史数据做非线性回归,或者直接用一些经验值:α≈0.5,β≈0.3。
为什么这个模型重要? 因为它能帮你做「最优执行」——也就是决定怎么拆单、什么速度交易,能让总成本最小。
三、知识体系总览
下面这张图,把今天讲的内容串起来了:
四、实战中的选择
讲了这么多,到底用哪个?我个人的经验是:
- 做高频做市: 盯订单簿斜率,反应快
- 做日内趋势: 用成交量加权价差估算成本
- 做大单执行: 必须上Almgren-Chriss模型
- 做风控监控: Kyle's Lambda当预警指标
嗯,最后提醒一句:这些指标都是基于历史数据的。市场结构变了,参数就得重新估计。我每季度都会做一次模型校准,别偷懒。