市场冲击的平方根律:为什么冲击按 √Q 缩放
交易量翻倍,价格大约只多动 40%,不是 100%。这条经验规律跨资产类稳健得反常,而 Kyle 的经典模型偏偏说冲击是线性的。这篇讲数据怎么赢了理论、理论又怎么追上来,以及你怎么用它算成本。
有这么一个规律,在不同资产类、不同时期、不同执行策略下都成立:一笔交易的冲击随交易规模的平方根增长。
其中 是交易规模, 是日成交量, 是日波动率, 是系数,通常范围 0.5–2.0(流动股票上接近 1)。
这就是市场冲击的平方根律。它在美股(Keim and Madhavan, 1996; Almgren, Thum, Hauptmann, 2005)、欧股(Bouchaud and Bonart, 2014)、外汇(Mancini, Ranaldo, Wrampelmeyer, 2013)、期货(Lillo, Farmer, Mantegna, 2003)、加密(Bouchaud, Bonart, Donier, Gould, 2018)都有记录。经验金融里能跨这么多市场复现的规律屈指可数。
有意思的地方在于:微观结构最经典的理论模型跟它对不上。Kyle 模型(第 6 篇)说冲击对 是线性的——lambda 是常数。数据说是次线性的:。这篇文章就是这场”数据赢了理论”的故事:先看数据本身,再看理论怎么追上来,最后讲你在执行台上怎么用它。Harris 没专门用一章讲平方根律,但它是实战派冲击模型的骨干。
数据先行
Almgren、Thum 和 Hauptmann (2005) 用一家大型机构执行业务的海量真实订单直接拟合了幂律形式:
他们那项研究和后续文献给出的指数 大多落在 0.4 到 0.6 之间,聚在 0.5 附近。
用人话说: 不变, 翻倍,冲击增加 倍,不是 2 倍。 翻 4 倍,冲击才翻倍。 多 10 倍,冲击多 倍。这就是次线性缩放:大单每单位不如小单高效,但低效增长得慢——100 倍大的单只有大约 10 倍的冲击,不是 100 倍。对任何要执行大单的人,这是个好消息里藏着坏消息的规律:好消息是砸盘没有线性外推那么贵,坏消息是它意味着连很小的单也有可观的冲击。
理论怎么追上数据
线性的 Kyle 和平方根的数据之间的缺口,理论上有三条路去补。三条路都对了一部分,也都各自缺一角。
第一条路:给 Kyle 加上信息衰减。 单期 Kyle 给 。但把知情交易者放进多期模型——他跨 期慢慢建仓,信息每期衰减——总流量 的累积冲击就变成大约:
在固定的噪声交易方差 下对 是次线性的。直觉:你成交越多,做市商的信念更新越多,后续成交的边际冲击就越小。订单的前 10% 边际冲击最大,后 10% 最小。这条路的贡献是说明平方根跟理性定价不矛盾;缺的一角是它对”为什么指数恰好是 0.5”的解释依赖具体设定。
第二条路:流动性的扩散图景。 Bouchaud 和合作者(2009、2010、2014)认为平方根律来自订单流在一群参与方之间的传播:每个参与方交易能力有限、吸收流量需要时间,大量参与方的聚合行为像一个扩散过程,冲击随累计成交量的平方根增长。一个最简化的玩具方程是把冲击 写成被订单流 驱动、同时自我衰减的量:
这是一个一阶弛豫过程,稳态解是
——注意这个玩具本身给出的是指数饱和,还不是平方根;要得到 行为,得把瞬时衰减换成缓慢衰减的记忆核,这正是 Bouchaud 一系传播子模型做的事。这条路的贡献是把”短水平期近似平方根、水平期拉长后趋向线性”这个经验形态自然地生出来;代价是模型离第一性原理更远。
第三条路:订单簿的形状。 订单簿的深度随离中间价的距离增长。如果价格 处的深度大约是
( 是某个尺度),那么一笔规模 的市价单会把簿一路吃到
其中 是 touch 上的深度。 小时近似线性(), 大时是对数。也是次线性——但注意是对数,不是平方根。所以可见的簿形状本身解释不了整条规律;平方根行为来自订单类型和交易者行为的混合,尤其是没挂在簿上的潜在流动性。这条路的教训反而最有用:别指望从快照上的订单簿读出大单的真实成本。
实战形式与量级感
实战派把这条律用成一个参数化公式:
其中 是日波动率(年化除以 ,或日已实现波动率), 是日成交额, 是资产类特定的系数(通常 0.5–2.0), 是水平期调整项——各家约定不一,常见写法是 一类的幂函数,也有把整个式子改写成参与率 的函数的。公式单位是(波动率)×(无量纲比率),返回百分比冲击。
为什么 和 出现在这里?因为它们是两个天然的归一化因子。高波动环境下价格本来就在动,1% 波动日里的 10 bp 冲击相对自然幅度是”小”的,同样 10 bp 在 0.1% 波动日就是”很大”——用波动率归一化后跨情景才可比。成交量则直接就是流动性:同样美元规模在高成交量名字上冲击小,因为市场在主动吸收流量。 这个组合本质上是对自然波动归一化之后的每单位流量价格冲击,把”显然”的缩放去掉,剩下的才是结构性的东西。
建立量级感:一只 日波动、V = \50M$ 日成交、$Y = 1$的股票上成交$1M:
一笔 $1M 的成交推动价格 28 bp——对 $100 的股票是 $0.28 的变动,机构大单的合理量级。
Python 实现
import numpy as np
def sqrt_impact(Q, V, sigma, Y=1.0):
"""
平方根市场冲击预测。
Q: 成交规模(美元)
V: 日成交额(美元)
sigma: 日波动率(小数)
Y: 冲击系数(默认 1.0)
返回:预期价格冲击(小数,比如 0.002 = 20 bp)。
"""
if V <= 0:
return np.nan
return Y * sigma * np.sqrt(Q / V)
# 示例
print(f"$100k 流动股票: {sqrt_impact(1e5, 5e8, 0.015)*1e4:.1f} bp")
print(f"$1M 流动股票: {sqrt_impact(1e6, 5e8, 0.015)*1e4:.1f} bp")
print(f"$10M 流动股票: {sqrt_impact(1e7, 5e8, 0.015)*1e4:.1f} bp")
print(f"$1M 小盘股: {sqrt_impact(1e6, 5e6, 0.025)*1e4:.1f} bp")
成交规模每翻一倍,输出大致乘 ——凹性直接可见。
它在哪些地方失效
平方根律稳健,但不普适,用之前要知道它的边界在哪。规模轴的两端各有一个失效区:超小单(,不到日成交量的 0.1%)上冲击通常对 更接近线性,平方根行为要到更大规模才浮现;超大单(,超过日成交量的 10%)上冲击可能比 增长更快——你在耗尽当日的流动性,冲击加速。中间那两个数量级才是平方根律的主场,多数机构流量恰好落在这里。Almgren 系的估计跟这个图景一致: 在 0.001 到 0.1 之间时流动美股上 ,出了这个区间 在低端变小、高端变大,波动情景下整体更高。
规模之外还有情景。趋势市里价格本来就顺着走,相对趋势调整价度量出的冲击可能是次平方根甚至负的。集合竞价(开盘、收盘)的冲击动态完全是另一套,平方根律不适用。危机期——崩盘或闪崩——每美元冲击可以是正常水平的 10–100 倍;方向上平方根律还成立,但 显著更大。最后,极不流动的加密山寨币上这条律经常干脆失效:簿太薄,装不下任何连续函数。一句话总结边界:平方根律是有用的默认,不寻常的情况下按本地数据重新标定。
跟 Almgren-Chriss 的关系
一个容易把人绕晕的问题:执行最优的规范模型 Almgren-Chriss(第 9 篇)假设的是线性冲击,这跟平方根律矛盾吗?
Almgren-Chriss 假设瞬时的暂时冲击和永久冲击都对成交速率 线性:
一条轨迹的总冲击是积分,对 期内均匀成交总量 :
合计 ,对 线性,不是平方根。所以两者度量的不是同一个东西:Almgren-Chriss 抓的是每一瞬间的冲击,平方根律抓的是跨更长水平期、把信息扩散算进去之后的积分效果。实践里两个都用,分工按水平期切:Almgren-Chriss 做短水平期(分钟到小时)的轨迹优化,平方根律做长水平期(小时到天)的成本估计。
顺带补一个平方根律自己的时间维度。一个更精细的版本把执行过程内的冲击累积写出来:
(执行结束)时你付满全额平方根冲击, 时付一半——一个好用的插值。轨迹形状因此有讲究:均匀成交是平滑累积,前端偏置把冲击大头付在开头,后端偏置押在结尾。
用它做交易决策
这条律在执行台上的核心用途是事前把成本和 alpha 摆在同一张纸上。你要执行 $10M 的父单,选项从快到慢排开。一笔成交:付 $\sigma \cdot \sqrt{10M/V}$的冲击——对$V = $100M$ 日成交、$\sigma = 2%$,那是 $0.02 \cdot \sqrt{0.1} \approx 0.63% = 63$ bp。日内分批:每个子单冲击更小,总成本看轨迹,Almgren-Chriss 给最优解。多天分批:冲击更低,但你开始暴露在 alpha 衰减和价格漂移风险里——水平期越长,市场风险越多。
然后算账。$10M 的成交、63 bp 的预期冲击,就是 $63{,}000 的预期成本。如果你指望这笔交易抓住的 alpha 只有 50 bp,净收益为负——别成交。alpha 有 100 bp,净收益为正——成交。规则冷冰冰:alpha 大于冲击才动手。这个纪律听起来平凡,但它把”我有个信号”和”这个信号在我的规模上还赚钱吗”分开了——很多策略死在第二问上。
这里还藏着一个战略含义:最优执行速度取决于你的 alpha 会不会衰减。alpha 稳定不衰减,就把成交拉到尽量长的水平期,用时间换冲击;alpha 会随时间蒸发,就快速成交、接受更高冲击,赶在它消失前抓住。最优水平期就是这两股力的平衡点,Almgren-Chriss 用均值-方差框架把它严格化了。Harris 第 13 章讲 dealer 行为时隐式用的就是同一个逻辑:dealer 在持有库存的成本和要求即时性的成本之间找平衡。
Y 不是常数:标定
公式里最不老实的是 。它随资产类变(股票 ,外汇更低,加密山寨币可以到 2–5)、随市场情景变(压力市更高)、随订单类型变(要即时性的市价单比限价单高)、随时段变(开盘收盘更高)、也随流量身份变(机构元订单测出来的 比散户流量高)。所以不能拿 当普适真理,要为自己的环境估。
文献里的量级汇总如下——注意这张表是粗略的方向参考,不是标定值,具体到你的情景和执行方法数字会不同:
| 资产类 | 估计 | 来源 |
|---|---|---|
| 美股大盘 | 0.8 – 1.2 | Almgren-Thum-Hauptmann 2005 |
| 美股小盘 | 1.2 – 1.8 | Keim-Madhavan 1996 |
| 欧股 | 1.0 – 1.5 | Bouchaud et al. 2014 |
| 外汇主要 | 0.4 – 0.8 | Mancini et al. 2013 |
| 加密主流 | 0.8 – 1.5 | Brauneis et al. 2021 |
| 加密山寨 | 2.0 – 5.0 | 多个,很嘈杂 |
| 美债 | 0.6 – 1.0 | Pasquariello-Vega 2007 |
| 期货(ES) | 0.7 – 1.0 | Lillo-Farmer-Mantegna 2003 |
好在从自己的数据估 不难。收集执行数据——每笔成交的名义 、时段、资产、相对到达价或 VWAP 的实现冲击——然后对
跑 OLS。心理预期要摆正:实现冲击噪音很大, 通常只有零点几,要几千笔成交才能把 估得像样。有了基础估计再做精细化——按时段、市场情景、成交类型分开估,因为 在这些维度上都不是常数。
把整篇压缩成执行台上的三句话:冲击按 走,翻倍规模只翻 1.41 倍冲击;用 事前算成本、跟 alpha 对账,赚才动手; 按自己的数据标,别信默认值。
参考文献
- Harris, L. Trading and Exchanges: Market Microstructure for Practitioners. Oxford University Press, 2003. 第 13 章(dealers),第 19 章(流动性)。ISBN: 978-0-19-514470-3.
- Almgren, R., Thum, C., Hauptmann, E. “Direct Estimation of Equity Market Impact.” Risk, 2005.
- Keim, D., Madhavan, A. “The Upstairs Market for Large-Block Transactions: Analysis and Measurement of Price Effects.” Review of Financial Studies, 1996.
- Bouchaud, J.-P. “Price Impact.” Encyclopedia of Quantitative Finance, 2010.
- Bouchaud, J.-P., Bonart, J., Donier, J., Gould, M. Trades, Quotes and Prices: Financial Markets Under the Microscope. Cambridge University Press, 2018.
- Lillo, F., Farmer, J., Mantegna, R. “Master Curve for Price-Impact Function.” Nature, 2003.