← 返回模块
F1.1.1.4beta 可读 · 未来付费内容校验中内容版本 2026-05-25

流动性与市场冲击

1.1.1 · 市场与微观结构 · 金融与量化投资

13:15:08,上海。一家私募基金的执行交易员收到指令:在今天收盘前清仓 5,000 万元的沪深300 中盘成分股 ETF——招商银行 300ETF 增强(一只跟踪沪深300 的策略 ETF)。她打开盘口:买一 1.218 / 卖一 1.219,盘口报价价差只有 1 tick,看上去「很有流动性」。但她真正要算的不是价差,是另一个问题:把 5,000 万元的卖单整笔砸进去,订单簿能不能吃下?吃完之后市场会反弹回原价,还是永远低半个 tick?答案藏在两个量里——​​深度​​(depth,订单簿现在的承接能力)和​​冲击​​(impact,订单本身改变价格的程度)。

上一节我们把买卖价差拆成三种经济成本——订单处理、存货、逆向选择。这一节回答下一个量级的问题:当你的单子超过最优档的承接能力时,会发生什么?把「这只标的有没有流动性」从感觉转化成可计算的数字。

1. 流动性的三个维度

「流动性」不是一个数字,是三件相互独立的事。SSE 招商银行 300ETF 增强可能在第一个维度上表现极佳,在第三个维度上一塌糊涂。一定要把它们拆开看:

  • ​紧度(tightness)​​:盘口报价价差 Squoted=ABS_{\text{quoted}} = A - B。这是单笔小订单跨过买卖价差的成本。上一节的全部内容都在度量这个维度。经验代理量:日均盘口报价价差 / 日均中间价(单位 bp)。
  • ​深度(depth)​​:在最优档及附近的 N 档上挂着多少量。深度告诉你「不移动价格的前提下,你能成交多少」。经验代理量:买卖五档总量、中间价 ± 10 bp 内的累计量。
  • ​韧性(resilience)​​:被市价单吃光一档后,订单簿多久能补回去?韧性高的标的,吃一档后 1 秒内有新挂单填回;韧性低的标的,吃一档后市场要 30 秒-数分钟才能恢复深度。经验代理量:消耗最优档后到该档恢复一半深度的时间间隔。

一只 ETF 可能:紧度极好(1 tick 价差)、深度中等(最优档 30 万股)、韧性极好(被吃光 50 毫秒后就被做市商补回);一只小盘股可能:紧度差(5 tick)、深度低(最优档 1,000 股)、韧性也差(吃光后 2 分钟没人补)。同一个「成交 5,000 万」的指令,在两只标的上面对的成本完全不同。

2. 走盘口:滑点的逐档计算

回到那位交易员。她的 5,000 万指令对应的标的 ETF 单价 1.219,所以名义上要卖 5,000万 / 1.219 ≈ 41,000,000 股——这个数字对一只中盘 ETF 来说远超最优档深度。她先看一下当前买方深度:

买一  1.218  ×  3,800,000  (3.8M)
买二  1.217  ×  6,500,000
买三  1.216  ×  9,000,000
买四  1.215  × 12,000,000
买五  1.214  × 15,000,000
深度合计买五档以上 = 46.3M 股

「滑点」(slippage)的定义:成交价相对到达时刻中间价的偏差。中间价 M0=(1.218+1.219)/2=1.2185M_0 = (1.218 + 1.219)/2 = 1.2185。假设她一次性发 1,000 万股市价卖单(约 1,220 万元名义,远小于深度合计 46.3M),逐档成交过程:

  1. 买一 3.8M @ 1.218
  2. 买二 5.0M @ 1.217(吃光买二的 5.0M,剩余 1.5M 未消耗)
  3. 总成交 8.8M = 3.8M + 5.0M ❌——不对,待卖 10M,所以继续到买二的全部 6.5M,再到买三的 0.5M。重算:3.8M + 6.5M = 10.3M ✗ 仍超。
    • 实际:买一 3.8M @ 1.218,买二 6.5M @ 1.217(吃光),余 10M - 3.8M - 6.5M = -0.3M ⇒ 不需吃买三。
    • 修正:3.8M (买一) + 6.2M (买二的前 6.2M) = 10.0M ✓

VWAP 执行价:

PVWAP=3.8×1.218+6.2×1.21710.0=4.6284+7.545410.0=1.21738P_{\text{VWAP}} = \frac{3.8 \times 1.218 + 6.2 \times 1.217}{10.0} = \frac{4.6284 + 7.5454}{10.0} = 1.21738

滑点(卖方角度,越低越差):

Slippagebp=M0PVWAPM0×10000=1.21851.217381.2185×100009.2 bp\text{Slippage}_{\text{bp}} = \frac{M_0 - P_{\text{VWAP}}}{M_0} \times 10000 = \frac{1.2185 - 1.21738}{1.2185} \times 10000 \approx 9.2\ \text{bp}

深度消耗率:吃光买一(3.8M)+ 部分买二(6.2M / 6.5M = 95.4%),相当于把订单簿前两档的「皮肉」啃掉。这是单次执行后剩下的事情:买一变成 1.217 ×(6.5 - 6.2 = 0.3M),市场看到深度被消耗,做市商和挂限价单的参与者会立刻重新评估。

3. 平方根冲击:把订单规模转换成 bp

走盘口能告诉你这一笔的精确滑点。但策略层面经常面对的是另一个问题:「这个名字上我可以一天交易多大单不显著抬价?」业内的经验法则是平方根冲击模型(square-root impact rule):

ImpactbpcσQV\text{Impact}_{\text{bp}} \approx c \cdot \sigma \cdot \sqrt{\frac{Q}{V}}

各符号:

  • Impactbp\text{Impact}_{\text{bp}}:相对到达时刻中间价的执行成本,单位 bp(1 bp = 0.01%)。
  • cc:经验常数,跨标的、跨市场拟合得到。境内 A 股的标定值通常落在 c[40,60]c \in [40, 60],美股 c[30,50]c \in [30, 50]。本节计算用 c=50c = 50
  • σ\sigma:标的的日收益率波动率(年化波动率 / 252\sqrt{252}),以小数形式(不是 bp)。
  • QQ:父订单规模,以股数或名义价计。
  • VV:日均成交量(ADV,average daily volume),与 QQ 同单位。

这个公式不是从一阶原理推出来的,是从大量执行数据拟合出来的。它告诉你的不是某一笔订单的精确滑点,而是「订单占 ADV 一定比例时的期望冲击」量级。

工作例子。招商银行 300ETF 增强(沪深300 中盘策略 ETF):

  • ADV:VV ≈ ¥3B = ¥3,000,000,000
  • 日波动率:σ0.015\sigma \approx 0.015(A 股大盘 ETF 年化 24% ⇒ 日 1.5%)
  • 父订单:QQ = ¥5,000万 = ¥50,000,000

订单占 ADV:Q/V=50,000,000/3,000,000,0000.0167=1.67%Q/V = 50,000,000 / 3,000,000,000 ≈ 0.0167 = 1.67\%

代入:

Impact50×0.015×0.016750×0.015×0.1290.097\text{Impact} ≈ 50 \times 0.015 \times \sqrt{0.0167} ≈ 50 \times 0.015 \times 0.129 ≈ 0.097

单位:上式中 σ\sigma 是小数,所以输出也是小数 = 9.7 bp。

把这个数和上一节走盘口算出来的 9.2 bp 对比——量级一致。这是平方根公式作为「热身估算」的价值:在做单子之前,30 秒就能算出量级,决定要不要切片、要不要拖时间。

4. 临时冲击 vs 永久冲击

冲击有两段。一笔大单成交后第二天再看价格:有的回弹了(市场吸收了流动性,但没相信你的方向),有的没回弹(市场相信你的卖出反映了真实价值)。区别如下:

维度临时冲击(temporary)永久冲击(permanent)
定义成交瞬间的偏移,几分钟到几小时内回归原均衡价永久改变市场对真实价值的估计,不回归
经济含义流动性 / 库存补偿;你付钱让做市商接你的单信息泄露;市场把你的成交解读为有信息含量
谁付钱主动跨价差的一方付给做市商;可回收一部分通过被动挂单整体市场重新定价;卖出后真实价格永久下移
经验特征大单后 30 分钟内的价格反弹 = 临时部分的镜像大单后第二天开盘价 vs 前日 VWAP 的差异 = 永久部分
实务策略切片、TWAP、被动挂单可压缩临时成本永久成本只能通过隐藏意图(暗池、冰山)减少

一笔 5,000 万的 300ETF 卖单的典型分布:总冲击 9 bp 里大约 6 bp 是临时(盘后 30 分钟内回归),3 bp 是永久(次日开盘价偏低)。这个比例对单只股票(信息不对称大)会偏向更高的永久占比。

A 股有一个独特的永久冲击「天花板」叫​​涨跌停​​(limit-up / limit-down):主板 ±10%、科创板 / 创业板 ±20%、ST 股 ±5%。当价格接近涨跌停板,需求侧(涨停)或供给侧(跌停)一侧的深度会瞬间消失——所有买单挂涨停价等不到成交(涨停),所有卖单挂跌停价吃不到(跌停)。这是一种二元流动性事件:要么你能成交,要么冲击成本变成无穷大。详细机制在第 5 节讲。另一个 A 股专属变量是​​融资融券​​(margin financing and securities lending):只有「标的证券」名单内的股票才能融券做空。不在名单内的股票,自然「卖压自然供给」缺一条腿,冲击的对称性差。

5. 流动性的「盘中分布」

A 股的盘中流动性不是均匀的:

  • 09:30–10:00 集合竞价后第一段:成交量大、深度厚、价差紧。机构集中开盘委托。
  • 10:00–11:30 上午中段:成交量回落到日均的 50–60%,深度回落。
  • 11:30–13:00 午休:订单可以挂,但​​不撮合​​。流动性事实上为零。
  • 13:00–14:30 下午前段:成交量恢复到日均的 60–70%。
  • 14:30–14:57 收盘前:成交量加速到日均的 1.5–2 倍。
  • 14:57–15:00 SSE 收盘集合竞价:单次撮合,承接收盘指令。SSE 收盘集合竞价的成交可以占当天 3–7% 的成交量。

如果你在 11:25 发一笔大单 vs 在 14:50 发同样规模——后者的冲击成本通常显著低于前者,因为后者的 VintradayV_{\text{intraday}} 远高于前者。平方根公式的 ADV 通常按全日累计,但实战中要根据剩余时段的预期 VV 调整。

6. 练习

Exercise

你管理一只沪深300 增强策略,今天的指令是买入 300ETF 头寸价值 ¥80,000,000。已知:

  • 300ETF(510300.SH)日均成交量 VV = ¥40 billion = ¥40,000,000,000
  • 日波动率 σ\sigma = 0.012(年化约 19%)
  • 经验常数 cc = 50
  1. 用平方根公式 Impactbp=cσQ/V\text{Impact}_{\text{bp}} = c \cdot \sigma \cdot \sqrt{Q/V} 估算总冲击(bp)。
  2. 同样的指令在一只日均成交量只有 ¥400 million 的沪深300 中盘成分股 ETF 上执行,其他参数不变(σ\sigma = 0.018,因为中盘波动率更高)。计算冲击。
  3. 用一句话解释为什么第 2 个标的的冲击不是第 1 个的 100 倍,而是大约 14 倍。
提示

Q/VQ/V 是订单占 ADV 的比例。对题 1,Q/V=80M/40000M=0.002=0.2%Q/V = 80M/40000M = 0.002 = 0.2\%;对题 2,Q/V=80M/400M=0.2=20%Q/V = 80M/400M = 0.2 = 20\%,差 100 倍。但公式里取平方根,所以 Q/V\sqrt{Q/V} 只差 10 倍;再乘上 σ\sigma 的 1.5 倍差距,总差距大约 15 倍。

提示

单位检查:σ\sigma 用小数(0.012 表示 1.2% 日波动率,不是 12%)。最终 Impact\text{Impact} 是小数,乘以 10000 转成 bp。题 1 的答案应该在个位数 bp,题 2 的答案应该在 100 bp 量级——如果你的结果差几个数量级,先检查单位是否一致。

7. 下一节:交易摩擦与微观结构效应

到这里你能区分流动性的三个维度、走盘口算单笔滑点、用平方根公式做量级估算、把冲击拆成临时和永久两部分。但有几个我们一直在「预告」但没展开的东西——涨跌停、最小变动单位的下界、T+1 的卖出限制、印花税、暗池的非显示性——它们不是市场的「主菜单」,但是任何一只活的策略都必须把它们算进总成本。下一节把这些​​摩擦​​全列出来,给你一张涵盖显性成本(手续费、印花税)、机械约束(tick、lot)、清算规则(T+1)、市场状态(涨跌停、停牌)、场所碎片化(暗池)的完整地图,再做一个把所有摩擦折算成「年化拖累」的迷你案例。