跳到正文

流动性调整 VaR:买卖价差、市场冲击、平仓时间

标准 VaR 假设你能按中间价、瞬间、零成本地平仓。三个假设全错。把价差、市场冲击和平仓时间加回风险数字里,就是 L-VaR。

第 4 篇 · 共 12 篇 约 11 分钟

标准 VaR 悄悄做了三个假设:你能按中间价成交,你的单子不会推动价格,平仓不花时间。真实市场里三个都不成立。买价和卖价之间隔着一个价差;你想卖一个大头寸,“卖”这个动作本身会把价格压下去;把一亿美元的小盘头寸清出来,要几天到几周。

这三个假设值多少钱,取决于你持有的是什么。大银行日频交易账簿的 VaR 里,1% 的价格变动远大于 0.05% 的买卖价差,流动性成本可以不管。但换成一个有压力的公司债基金,或者一笔要清好几天的集中头寸,流动性成本就占了主导。忽略它们会系统性低估真实平仓成本,幅度从几个百分点到与价格风险本身同量级都有可能(Bangia, Diebold, Schuermann & Viswanath, 1999)。

这篇文章就按这三个假设崩塌的顺序走:先算价差的账,再算冲击的账,再算时间的账,最后拼出流动性调整 VaR(L-VaR),并且说清楚为什么这套数字在压力下还得再打折扣。

标准 VaR 在哪里骗你

回忆标准 VaR 的定义:

VaRα(h)=FL−1(α),L=−ΔP, over horizon h\text{VaR}^\alpha(h) = F_L^{-1}(\alpha), \quad L = -\Delta P, \text{ over horizon } h

对中间价 MtM_t、持仓 qq 的组合,盯市 P&L 的变化是

ΔPt=q⋅(Mt+h−Mt)\Delta P_t = q \cdot (M_{t+h} - M_t)

标准 VaR 估计的是 ΔPt\Delta P_t 的 α\alpha 分位数,假设仓位可以按中间价平掉。多头实际得在 bid 卖出,空头得在 ask 买入,跨越半个价差的成本被这个定义直接吃掉了。

这笔被吃掉的成本有多大,量一下就知道。买卖价差 5 个基点的流动股票,平仓付半价差约 2.5 个基点;对 1% 的日 VaR,这是 VaR 的 2.5%,可以忽略。但一只买卖价差 1% 的非流动公司债,半价差成本是仓位的 0.5%;对 5% 的月 VaR,这已经是 VaR 的 10%。同一个”忽略价差”的近似,在流动股票上是圆整误差,在非流动信用上是一成的风险没算。

顺着这个逻辑往下推,标准 VaR 失效最严重的头寸也就清楚了:小盘股、公司债(尤其困境信用)、需要大额清仓的衍生品、一天清不掉的单只集中头寸、正在退出的封闭式基金。共同点是价差宽、成交量薄、仓位相对市场深度大。对这类头寸,标准 VaR 低估平仓成本可以到一个数量级。

第一笔账:半价差

最简单的流动性调整就是把上面那笔被吃掉的成本加回去。对规模 qq 的仓位、买卖价差 ss(十进制,比如 s=0.001s = 0.001 表示 10 bps 价差),期望价差成本大约是 q⋅s/2q \cdot s / 2。Bangia、Diebold、Schuermann & Viswanath (1999) 的流动性调整 VaR 是

L-VaRα=VaRα+q⋅s/2\text{L-VaR}^\alpha = \text{VaR}^\alpha + q \cdot s / 2

对美元计价的多资产组合:

L-VaRα=VaRα+12∑i∣qi∣⋅si⋅Pi\text{L-VaR}^\alpha = \text{VaR}^\alpha + \frac{1}{2} \sum_i |q_i| \cdot s_i \cdot P_i

其中 sis_i 是资产 ii 的价差,PiP_i 是价格,qiq_i 是持仓。

注意半价差是未受信息驱动的交易者在正常市场下的期望成本。压力市场里实际成本可以高 2–5 倍,平静市场里更低。Bangia 等人自己也把这个 L-VaR 称为该置信水平下流动性成本的下界——它是起点,不是终点。

拿数字过一遍。100 万美元、5 bps 价差的股票头寸:半价差成本 1{,}000{,}000 \times 0.0005 / 2 = \250$。99% 日 VaR 是 $30,000(3%)。L-VaR 是 $30,250,调整不到 VaR 的 1%。换成 100 万美元、100 bps 价差的公司债:半价差成本 $5,000。月 VaR 是 $50,000(5%)。L-VaR 是 $55,000——流动性一下占了总风险的 10%。同一个公式,资产换一换,从”可以忽略”变成”必须上报”。

但半价差只覆盖了小单。仓位大到一天清不掉时,真正的伤害在别处。

第二笔账:市场冲击

你卖的时候,价格会反过来压你。对这部分成本,经验文献里的标准近似是平方根冲击律:

Impact=η⋅σ⋅Q/V\text{Impact} = \eta \cdot \sigma \cdot \sqrt{Q / V}

其中 QQ 是要交易的股数,VV 是日均成交量,σ\sigma 是日波动率,η\eta 是一个常数(典型值 0.05–0.2)。这条平方根律来自对真实成交数据的大样本测量(Bouchaud et al., 2018),不是从哪个模型推出来的;它说的是冲击随交易规模次线性增长——交易量翻四倍,冲击只翻一倍。

VaR 的实务调整很直接:

MIVaRα=VaRα+η⋅σ⋅Q/V⋅q\text{MIVaR}^\alpha = \text{VaR}^\alpha + \eta \cdot \sigma \cdot \sqrt{Q/V} \cdot q

其中 qq 是美元仓位。这一项什么时候要紧,看三个规模档就明白。100 万美元仓位、$5000 万日均成交量、$\sigma = 2%、、\eta = 0.1$:冲击是 $0.1 \cdot 0.02 \cdot \sqrt{0.02} \cdot 100\text{万} = 0.1 \cdot 0.02 \cdot 0.141 \cdot 100\text{万} \approx $282$,加在 $30,000 的 VaR 上可以不看。同样 100 万仓位、日成交量只有 $50 万(非流动):冲击是 $0.1 \cdot 0.02 \cdot \sqrt{2} \cdot 100\text{万} \approx $2{,}828$,开始有感觉了。500 万仓位、$50 万日成交量——十倍日成交量:冲击是 0.1 \cdot 0.02 \cdot \sqrt{10} \cdot 500\text{万} \approx \31{,}623$,已经跟日 VaR 本身一个量级。半价差是加法项,冲击是随规模超线性增长的美元成本,仓位一大它就接管了整个数字。

第三笔账:时间

标准 VaR 把持有期 hh 定死。仓位大到 hh 内清不掉时,真正相关的量是:把仓位 qq 清完、又不让市场冲击超过阈值,需要多长时间。定义”流动性持有期”

T(q)=min⁡{t:Impact(q,t)≤threshold}T(q) = \min\{t : \text{Impact}(q, t) \le \text{threshold}\}

一种常见取法:T(q)T(q) 是按恒定速率平仓、使总冲击不超过某个阈值(通常取买卖价差的一个分数,让冲击不至于盖过往返成本)所需的时间。

要把”冲击”和”时间”接起来,得先分清文献里两个不同的冲击模型——它们对”拖时间有没有用”给出的答案不一样,不能混着用。

第一个是 Almgren & Chriss (2000) 的线性冲击模型:每股交易付一个线性的临时冲击成本,总临时冲击是

ImpactAC(q,T)=η⋅q\text{Impact}^{\text{AC}}(q, T) = \eta \cdot q

跟平仓期 TT 无关。永久冲击是每股 γq\gamma q,同样与 TT 无关。线性冲击下总成本就是 q(η+γ)q(\eta + \gamma),你怎么把交易摊到时间上都一样。这是”每笔交易的成本跟规模成正比”时的正确模型,也是最优执行理论的标准工作假设。

第二个是Bouchaud 平方根冲击,经验上观测到的那个:

ImpactBouchaud(Q)=Y⋅σ⋅(QV)β\text{Impact}^{\text{Bouchaud}}(Q) = Y \cdot \sigma \cdot \left(\frac{Q}{V}\right)^{\beta}

其中 β\beta 在流动市场约 0.5、平均约 0.6、非流动市场趋近 1(Bouchaud et al., 2018)。这里起作用的是交易量占同期市场成交量的比例。一天之内砸出一整天的成交量(Q=VQ = V),冲击约 YσY\sigma;砸出十天的量,冲击约 Yσ10Y\sigma\sqrt{10}。而如果把仓位 qq 摊到 TT 天、每天交易 q/Tq/T,每天的每股冲击约 Yσq/(TV)Y\sigma\sqrt{q/(TV)},TT 天下来平均每股付的冲击成本仍约 Yσq/(TV)Y\sigma\sqrt{q/(TV)}——对固定的 qq,它随 TT 增大而减小。把交易摊到更多天能省冲击成本,代价是暴露在价格变动下的时间更长。这正是线性模型给不出的结论:在线性世界里拖时间省不了钱,在平方根世界里能。

对 VaR 而言,要的是总平仓成本,不是某一天的冲击。两个模型答案不同,选定一个,别在同一个计算里换来换去。

拼起来:L-VaR

到这里三笔账都齐了。一个完整的流动性调整 VaR 把它们叠在一起:价格变动部分用标准 VaR,价差部分用半价差成本,规模部分用市场冲击成本(比例型场景用 Almgren-Chriss,次线性场景用 Bouchaud),再选一个平仓期 TT 把时间维度定下来。常见的写法是

L-VaRα(T)=VaRpriceα(T)+q⋅s2+q⋅Impact(q,T)\text{L-VaR}^\alpha(T) = \text{VaR}^\alpha_{\text{price}}(T) + q \cdot \frac{s}{2} + q \cdot \text{Impact}(q, T)

其中 VaRpriceα(T)\text{VaR}^\alpha_{\text{price}}(T) 是平仓期 TT 内价格变动的标准 VaR,市场冲击项计为正成本。TT 取让市场冲击低于阈值(比如买卖价差的 50%)的最小值,同时权衡持有期拉长带来的价格变动 VaR 增长。

TT 也可以不拍脑袋,直接从最优化里解出来。Almgren & Chriss (2000) 在均值-方差框架下,用风险厌恶参数 λ\lambda 权衡冲击成本和持有期内的价格风险,得到的最优平仓时间尺度是

T∗=ηλσ2T^* = \sqrt{\frac{\eta}{\lambda \sigma^2}}

其中 η\eta 是临时冲击系数。永久冲击 γ\gamma 不出现在这个公式里,因为线性永久冲击的总成本与执行节奏无关,对”该快还是该慢”没有投票权。总期望成本由两部分组成:一块是不管怎么执行都要付的冲击成本,另一块是风险厌恶加权的价格变动风险,T∗T^* 就是这两块的平衡点。λ→∞\lambda \to \infty(高风险厌恶)时 T∗→0T^* \to 0,付出任何冲击代价也要立刻脱身;λ→0\lambda \to 0 时 T∗→∞T^* \to \infty,慢慢磨。注意这是 Almgren-Chriss 线性冲击区的结论,不是平方根区的。做风险管理(而不是做执行)时,通常取比执行更高的 λ\lambda,对应更短的 T∗T^*。

代码上,一个简化版 L-VaR 长这样:

import numpy as np

# 简化版 L-VaR 计算
def l_var(price_var, position_size, spread, daily_vol,
          adv, eta=0.1):
    """
    price_var: 标准 VaR,美元
    position_size: 美元仓位
    spread: 买卖价差,十进制(比如 0.001 = 10 bps)
    daily_vol: 仓位日波动率,十进制
    adv: 日均成交量(美元)
    eta: 市场冲击系数
    """
    half_spread = position_size * spread / 2
    market_impact = eta * daily_vol * np.sqrt(position_size / adv) * position_size
    # 注:冲击作为仓位的比例 ~ eta * daily_vol * sqrt(Q/ADV)
    # 美元总冲击 = position_size * eta * daily_vol * sqrt(Q/ADV)
    return price_var + half_spread + market_impact

# 例子
print("Equity (liquid):", l_var(30_000, 1_000_000, 0.0005, 0.02, 50_000_000))
print("Equity (small-cap):", l_var(30_000, 1_000_000, 0.005, 0.03, 5_000_000))
print("Corp Bond (illiquid):", l_var(50_000, 1_000_000, 0.01, 0.02, 500_000))

跑出来的数字自己会说话。流动股票:半价差 $250 加冲击约 $283,合计不到 VaR 的 2%,L-VaR 约 $30,533,跟标准 VaR 几乎没区别。小盘股:半价差 $2,500 加冲击约 $1,342,合计约 $3,800,是 VaR 的 13% 左右。非流动债券($50 万 ADV):半价差 $5,000 加冲击约 $2,828,合计约 $7,800,约是 VaR 的 16%——而这还是 100 万的仓位;按上一节的算法把仓位放大到 500 万,光冲击一项就跟 VaR 本身相当了。

ES 的版本

同样的三段加法可以搬到期望损失上:

L-ESα=ESpriceα(T)+q⋅s2+q⋅Impact(q,T)\text{L-ES}^\alpha = \text{ES}^\alpha_{\text{price}}(T) + q \cdot \frac{s}{2} + q \cdot \text{Impact}(q, T)

但加法形式是近似——严格说三个成分并不独立,真正的危机里三者一起飙。更保守的做法是乘性修正:

L-ESα=ESpriceα(T)⋅(1+liq premium)\text{L-ES}^\alpha = \text{ES}^\alpha_{\text{price}}(T) \cdot (1 + \text{liq premium})

其中流动性溢价按历史压力事件校准。2008 年信用市场的流动性溢价达到过 30–100%;把 ES 直接乘 2,往往比加个半价差更接近压力下的真相。

持有期 TT 怎么选

前面几处都出现了 TT,它的选择本身是一个政策决定,不是数学定理。实务上有三条路。

最省事的是让 TT 等于标准 VaR 的持有期:日 VaR 就设 T=1T = 1,假设一天能清完。这个假设给仓位规模画了一条隐含的线——一天日均成交量。仓位超过 1 天 ADV,一天清仓必然砸出可观冲击,这条路就不通了,得拉长持有期。

第二条路是反过来,从价格风险的增长找 TT:1 周(5 天)VaR 在 iid 假设下约是日 VaR 的 5\sqrt{5} 倍,有自相关时更大;1 月 VaR 大得多。取让价格变动 VaR 与实际平仓成本相称的那个持有期。

第三条路就是上面推过的最优平仓期 T∗=η/(λσ2)T^* = \sqrt{\eta/(\lambda\sigma^2)}:风险厌恶或波动率越高,T∗T^* 越短;反之越长。大多数银行和资产管理人走这条路,配一个适中的 λ\lambda,校准到既不落进”太快、冲击主导”也不落进”太慢、价格变动主导”的两个极端。

输入从哪里来

L-VaR 的每个输入都是市场微观结构数据,来源各不相同。买卖价差:上市品种看交易所数据流,OTC 品种看交易商报价;公司债有 FINRA TRACE 的事后成交数据,事前价差可以从交易商报价推断。日均成交量:上市品种看交易所数据,OTC 债券可以用 DTCC 的成交汇总。日波动率:从历史价格序列来,常用 60 或 120 天滚动估计。冲击系数 η\eta:从执行成本研究校准,不少 broker-dealer 会公开自己的估计。

真正的麻烦是没有近期成交的非流动品种——价差和成交量都无从谈起。这时候保守做法是取合理范围内最大的价差和最小的成交量,算一个最坏情况的流动性成本。宁可数字难看,不要数字缺席。

压力之下,这些输入全会变

以上整套计算有一个共同的软肋:价差、成交量、冲击系数全是从历史数据估的,而流动性恰恰在你最需要它的时候消失。三个经典案例都是同一个剧本。

1998 年的 LTCM 持有大量非流动品种。俄罗斯危机期间,抵押贷款支持证券的买卖价差从 25 bps 涨到 200 bps 以上——单价差一项就是 8 倍。按平静期价差算的 VaR,对这些头寸错得离谱。2008 年信用危机里,现金投资级债券的价差从 2007 年初的 50–100 bps 走到 2008 年末的 200–500 bps,而很多 VaR 模型还假设 50 bps;用时变价差估计的流动性调整 VaR 明显表现更好。闪崩(2010、2015 等)期间,多只标的的市场冲击可以是正常水平的 5–10 倍,基于长期历史校准的模型完全接不住这种尖峰。

教训只有一条:流动性成本是时变的,而且变化方向在压力下几乎总是对你不利。把价差当常数的模型在尾部系统性出错——恰好尾部才是 VaR 存在的意义。

所以稳健的做法是给流动性本身做压力:价差翻倍或翻三倍(L-VaR 随之线性放大);成交量跌到正常的 10–25%(冲击按 V\sqrt{V} 反向放大);再叠加同时压力——价差 3 倍、成交量 1/4、价格变动 VaR 从 99% 提到 99.9%,组合效果可以是平静期 L-VaR 的 5–10 倍。大多数银行有类似 stressed VaR 的”stressed L-VaR”要求:在历史最差的价差和成交量下重算一遍。

如果你跑 L-VaR,用压力输入跑。如果你只跑标准 VaR,至少要知道:你的数字假设了一个无摩擦的市场,而那个市场不存在。

参考文献

Almgren, R., & Chriss, N. (2000). Optimal execution of portfolio transactions. Journal of Risk, 3(2), 5-39.

Bangia, A., Diebold, F. X., Schuermann, T., & Viswanath, P. L. (1999). Modeling liquidity risk, with implications for traditional market risk measurement and management. Working paper, Wharton.

Bouchaud, J.-P., Bonart, J., Donier, J., & Gould, M. (2018). Trades, Quotes and Prices: Financial Markets Under the Microscope. Cambridge University Press.

Gârleanu, N., & Pedersen, L. H. (2013). Dynamic trading with predictable returns and transaction costs. Journal of Finance, 68(6), 2309-2340.

McNeil, A. J., Frey, R., & Embrechts, P. (2005). Quantitative Risk Management. Princeton University Press.

Pastor, L., & Stambaugh, R. F. (2003). Liquidity risk and expected stock returns. Journal of Political Economy, 111(3), 642-685.