← 返回模块
4.5.2.2beta 可读 · 未来付费校验通过内容版本 2026-05-28

隐性成本与市场冲击模型

4.5.2 · 交易成本与市场冲击 · 量化全流程

上海陆家嘴一家头部量化私募的执行部门,资深交易员主持晨会。策略:中证500 + 中证1000 小盘股统计套利,纸面 Sharpe 2.2,毛 AUM RMB 20 亿,年化换手 1000%。L1 显性成本建模规范:ETF 端 ~8 bp round-trip,单只小盘股端 ~12 bp。投资经理推动上线。交易员调出昨日 TCA 报告。中证1000 单只股票 fills 的实施差额 (IS) 平均值:​​47 bp​​。交易员立即把上线暂停,问一个问题:「你用的冲击模型是什么?平方根还是线性?Y 取多少?前置 Q/V 估算用什么模型?」投资经理答不上来——回测用的是「不论订单大小,平均 5 bp」这种平铺式滑点假设。假设滑点 5 bp 与实际 IS 47 bp 之间的 42 bp 差距——这就是 L1 条目漏掉的隐性成本。本课教成本建模的概念核心:实施差额作为综合结果指标、临时-加-永久 冲击拆解、平方根 (经验) 和线性 (分析) 两种函数形式构成的实务工具包。

经验对照

L1 的条目成本与订单规模相对 ADV 的比例无关。在大盘股 ETF 上 1 千元和 1 亿元每元监管费、每元佣金、每股 TAF 都相同。市场冲击恰恰相反——交易 0.01% ADV 冲击成本几乎为零,10% ADV 50-200 bp,30% ADV 200-500 bp。隐性 成本 (implicit transaction cost)——不出现在交易回单上、但出现在到达价与实际成交均价之差里的成本部分——对任何超过 ~0.5% ADV 的订单都是机构交易的主导。L1 的 bid-ask spread (买卖价差) 仍然贡献——它现在是下面四向 IS 拆解的一项。

实施差额框架

Perold 1988("The Implementation Shortfall: Paper Versus Reality",Journal of Portfolio Management 14(3))把 IS 定义为纸面组合收益与实际组合收益的差。买入 QQ 股的单笔交易:

ISbp=sign×PˉfillParrivalParrival×10000IS_{bp} = \text{sign} \times \frac{\bar{P}_{fill} - P_{arrival}}{P_{arrival}} \times 10000

其中 Pˉfill\bar{P}_{fill} 是成交量加权平均成交价,ParrivalP_{arrival} 是交易决策到达瞬间的价(通常是决策时点的中价)。正 bp = 买方成本;负 = 改善。卖单翻号。标准引用:Perold 1988 'The Implementation Shortfall: Paper Versus Reality'

IS 是每一个可信 TCA 系统的标准结果指标。Inline-code 列表:拆解为四个可加分量——按此严格顺序:

1. spread cost                          — 半 价差 每笔 穿越 (来自 L1)
2. temporary impact                     — 价格 反向 移动;停止 交易 后 反转
3. permanent impact                     — 价格 反向 移动;不 反转
4. opportunity cost / timing risk       — 订单 执行 期间 价格 漂移

法则:临时 = 反转部分;永久 = 非反转部分;反转在交易后 5min / 30min / 1day 横向上测量。订单完成后 T 分钟 / 小时 / 天,测量价格。冲击的反转部分是临时分量;非反转部分是永久分量。标准实务横向:5min30min1day。典型大盘股订单显示 ~2/3 冲击在 30 分钟内反转、~1/3 在 1 天后仍存。临时冲击付给订单簿;永久冲击付给从你的流推断信息的其他知情交易者;机会成本以肥尾形式出现,不在均值里。

平方根法则

经验主力公式。来自几十年买方 TCA 数据加上学术研究(Almgren et al 2005、Lillo-Farmer-Mantegna 2003、Bouchaud-Farmer-Lillo 2018)收敛到一个经验规律。对于 0.01% 到 ~30% ADV 范围内的订单,bp 计冲击随订单规模相对 ADV 的平方根线性变化。

impactbpY×σ×Q/V\text{impact}_{bp} \approx Y \times \sigma \times \sqrt{Q / V}

其中 σ\sigma 是日收益波动率 (bp 计),QQ 是订单规模 (股数),VV 是 ADV (股数),YY 是股票特定常数,典型范围 0.3-1.5。有效范围:0.01% ≤ Q/V ≤ 30%YY 依赖板块、方向、时段、流动性 regime。多数实务者每股每季度用一个 YY

经验依据:(i) Donier-Bonart-Bouchaud 的潜在订单簿模型;(ii) Bouchaud-Gefen-Potters 的传播子模型;(iii) Kyle 1985 信息不对称扩展。

有效范围限制。低于 0.01% 价差和噪声底主导。高于 30% 冲击变线性。Q/V > 100% 模型不适用,需要 multi-day 切单。

线性冲击替代

Almgren-Chriss 2000 成本模型推导 (L3) 用线性拆解:

impactbp=η×(Q/V)×(1/T)+γ×(Q/V)\text{impact}_{bp} = \eta \times (Q / V) \times (1 / T) + \gamma \times (Q / V)

其中 η\eta 是临时冲击系数 (单位:bps × time),γ\gamma 是永久冲击系数 (单位:bps),TT 是总执行时长。η×(Q/V)×(1/T)\eta \times (Q/V) \times (1/T) 项是临时冲击;γ×(Q/V)\gamma \times (Q/V) 项是永久冲击。

线性的用处:让 Almgren-Chriss 分析上可解——闭式解。线性模型经验上是错的(真实冲击次线性)。实务调和法则:​​在回测和 TCA 里用平方根做成本估计;只在优化推导里用线性​​。线性 AC 模型的定性结论——前置加权计划——在冲击函数形式变化下稳健;精确计划不稳健。

Fenced Python 代码

4.5.1 撮合模拟器暴露 compute_impact(order, bar, params)

import numpy as np

# implicit-cost decomposition — square-root model headline; linear for AC compatibility
def compute_impact(order, bar, params):
    """L2 冲击:平方根 主力 + 线性 AC 兼容"""
    Q = order["shares"]
    V = bar["adv"]
    sigma = bar["daily_sigma_bp"]
    Y = params["Y"]
    qv = Q / V
    impact_sqrt = Y * sigma * np.sqrt(qv)
    temporary_impact_bp = (2.0 / 3.0) * impact_sqrt
    permanent_impact_bp = (1.0 / 3.0) * impact_sqrt
    T = params.get("T", 1.0)
    opportunity_cost_bp = sigma * np.sqrt(T) * params.get("timing_risk_mult", 0.1)
    total_impact_bp_linear = params["eta"] * qv / T + params["gamma"] * qv
    return {
        "temporary_impact_bp": temporary_impact_bp,
        "permanent_impact_bp": permanent_impact_bp,
        "opportunity_cost_bp": opportunity_cost_bp,
        "total_impact_bp": impact_sqrt,
        "total_impact_bp_linear": total_impact_bp_linear,
    }

Two (两个) 冲击计算算例(Markdown 表)

把平方根法则套到两个基准情形:

casetickershares QADV VQ/Vσpredicted impactdecision
(a)600519 贵州茅台 single-name200,000500,00040%250 bp0.8 × 250 × sqrt(0.4) ≈ 126 bpmust slice across days
(b)510300 沪深300 ETF200,00010M2%150 bp0.6 × 150 × sqrt(0.02) ≈ 13 bpone-bar OK with VWAP

情形 (a):CN A 股买入 200,000 股 600519 贵州茅台,当日 ADV 500,000 股 (Q/V = 40%),日波动 σ\sigma = 250 bp,Y=0.8Y = 0.8。平方根预测:0.8×250×0.41260.8 \times 250 \times \sqrt{0.4} \approx 126 bp。订单必须切到多天——按 5 天每天 8% 参与,每日 Q/V = 8%,每日冲击 ~57 bp。

情形 (b):买入 200,000 股 510300 沪深300 ETF,ADV ~10M (Q/V ~2%),σ\sigma = 150 bp,Y=0.6Y = 0.6。平方根预测 ~13 bp。可用 VWAP 在单日完成。

Inline-code 列表:参与率决策规则

生产端执行台用的 Q/V 阈值桶。这些规则钉在明汯、幻方、灵均、衍复的每个交易员屏幕上。

1. Q/V ≤ 0.5%       — trade aggressively in one bar; impact ≤ 5 bp
2. 0.5% < Q/V ≤ 5%  — trade across the day with VWAP / participation algorithm (4.5.3)
3. 5% < Q/V ≤ 30%   — trade across one day with explicit Almgren-Chriss schedule (4.5.3);
                      flag to risk if Q/V > 15%
4. Q/V > 30%        — trade over multiple days; flag in advance to risk; consider OTC block trade

跨引用——VWAPAlmgren-ChrissOTC block——锚定到 L3 (AC 推导) 和 4.5.3 (算法目录)。风控参与:单只股票 Q/V > 15% 的单日交易要求合规 + 风控预批。

撮合模拟器集成实务

Q/V 必须用前置日成交量估计——用 20 日中位数。日 σ\sigma 同样必须是前置估计。YY 必须每季度从 TCA 数据重新拟合——跨 regime 切换不刷新 YY 是最常见的冲击建模错误。CN 端特殊微结构:A 股单只股票通常 YY 偏高 (0.6-1.5),因为有效价差更宽 + 订单簿深度较浅 + 10% 日内涨跌停机制压缩极端波动。10% / 20% 涨跌停 (ST 5%) 作为单 session 永久冲击实现的上限——一旦名字撞到 涨停 / 跌停,订单簿锁定到下一 session;这把冲击分布从上面截断。CN T+1 结算约束意味着 session 内开仓的交易只能在下一 session 平仓。

容量预告

隐性成本是策略容量真正住的地方。AUM 翻倍冲击乘 21.41\sqrt{2} \approx 1.41 倍。中证500 指数增强类策略容量典型 RMB 50-200 亿;中证1000 单只股票统计套利容量 RMB 5-20 亿。2020-2022 年间中证500 指数增强 + 量化私募指数容量塌方就是典型 CN 容量案例。

Formula Explorer

\text{impact}_{bp} = Y \cdot \sigma \cdot \sqrt{Q/V}

冲击的平方根法则。YY 在 0.3-1.5 范围、σ\sigma 日 bp、Q/VQ/V 参与比例。

练习

Exercise

你在 600519 贵州茅台上做 1 日执行规划。用 square-root law impactbpY×σ×Q/Vimpact_{bp} \approx Y \times \sigma \times \sqrt{Q/V},取 Y=1.0Y = 1.0。做四个计算并报告。

(i) Q/V = 1%、σ\sigma = 200 bp 时,计算预测冲击 bp;说明落入哪个 participation-rate decision-rule 桶。

(ii) 同 (i) 但 Q/V = 10%;说明落入哪个桶;说明是否需要跨日执行。

(iii) 对 (i) 和 (ii),假设 2/3 临时 + 1/3 永久 比例,给出交易后反转拆分:分别报告临时 + 永久 bp 分量。

(iv) 对情形 (ii),假设到达价 100.00、平均成交价 100.85 (买方正号约定),计算实施差额;指出 IS 拆解里哪一项主导。

把所有四个答案放在一张表里。

提示
(i):1.0×200×0.01=201.0 \times 200 \times \sqrt{0.01} = 20 bp;桶 0.5% < Q/V ≤ 5%。(ii):1.0×200×0.1063.21.0 \times 200 \times \sqrt{0.10} \approx 63.2 bp;桶 5% < Q/V ≤ 30%
提示
(iii):平方根总值按 2/3 + 1/3 拆。(iv):IS = (100.85 − 100.00)/100 × 10000 = 85 bp;预测冲击 ~63 占 85 大部分——冲击主导。

实务对照:更深一层

CN 端 TCA 实务再看几个细节。一是 forward 估计的来源:日成交量预测在头部私募里通常用「过去 20 日中位数 + 周内日历效应调整 + 上一日实盘成交量加权」的组合特征,简单的 trailing average 在月初、节后会偏。二是 YY 的稳定性:流动性好的核心宽基 ETF (510300、510500、510050、159915 等) 的 YY 在不同 regime 下相对稳定,而中证1000、中证 全指 small-cap 的 YY 在 2020 抱团时低、2022 流动性枯竭时高,跨度可达 1.5-2 倍——这就是为什么每季度的 YY 刷新一定要走 sector 桶而不是单标的拟合。三是 临时 / 永久 比例:A 股 由于 T+1 结算 + 涨跌停 截断 + 散户 主导 的微结构,反转通常比 US 大盘股更慢更小——经验上 2/3 临时 + 1/3 永久 的 split 在 A 股 不一定 适用;高频实盘 TCA 显示某些名字的反转比例更接近 1/2 临时 + 1/2 永久。四是 隐性 成本 的 一部分 在 CN 端 来自 bid-ask spread (买卖价差) 的有效价差超出,是 L1 的延伸——把 实务 中 的 总 transaction cost (交易成本) 拆 成 显性 部分 (L1 的 报价 半 价差 + 监管 + 印花税) 和 隐性 部分 (L2 的 超额 滑点 + 临时 冲击 + 永久 冲击 + 时间 风险),会计层把两边都扣到 PnL。

衔接 L3

隐性成本规模相关且随机;你用 YYσ\sigma、ADV 参数化成本函数。L2 给了你平方根法则作为成本估计的真理,给了你线性冲击作为优化可解的形式。L3 在线性拆解上推导 ​Almgren-Chriss 最优执行计划​​——给定冲击 vs 时间风险的权衡,固定时窗内分析上最优的交易计划是什么?L3 推出的闭式 cosh 轨迹是应用 quant 金融里少见的干净分析解;它是每一个主要买方和卖方交易台执行管理系统的通用语言。定性答案:前置加权计划以平衡冲击与时间风险。精确答案来自把均值-方差目标函数对计划求偏导设为零;你会在 L3 里手算这一步,并把闭式 cosh 计划与 TWAP 的形状对比,理解为什么风险厌恶程度的提高把交易计划向时窗起点推。L3 之后到 L4,把 L1+L2+L3 的成本栈整合到 4.5.1 五层引擎里,得到 成本感知 Sharpe容量 两个上线评审的头条数字。

已涵盖组件

  • Inline-code listing of the FOUR IS 分量。
  • implementation shortfall KaTeX 块,含 Perold 1988 引用。
  • square-root law KaTeX 块,含有效范围。
  • linear impact 拆解 KaTeX 块。
  • Fenced Python compute_impact(order, bar, params)
  • Two (两个) 冲击算例 Markdown 表。
  • Inline-code listing of the FOUR 参与率决策规则。
  • FormulaExplorer——平方根法则。
  • Exercise——600519Y=1.0Y = 1.0σ=200\sigma = 200 bp 在 Q/V = 1% 和 10% 两档的四个子任务。
  • Two 递进 Hint。