第 18 课:交易成本建模与可交易性

Alpha 是否存在 = (Gross Alpha − Cost) > 0


一个典型场景(示意)

注:以下为合成示例,用于说明常见现象;数字为示意,不对应任何具体团队/账户。

2019 年,一个量化团队向我展示了他们的机器学习策略:

回测结果(2015-2019):
- 年化收益: 45%
- 夏普比率: 2.3
- 最大回撤: 8%
- 月胜率: 78%

"这是我们见过最好的策略!"他们兴奋地说。

我问了一个问题:"你们的日均换手率是多少?"

答案:300%

这意味着每天要买卖相当于 3 倍本金的股票。

我让他们重新计算,加入以下现实成本:

  • 交易佣金:0.03%(双边)
  • 市场冲击:0.1%(保守估计)
  • 滑点:0.05%
成本计算:
- 每日成本 = 300% × (0.03% + 0.1% + 0.05%) = 0.54%
- 年化成本 = 0.54% × 252 = 136%

调整后回测:
- 毛收益: 45%
- 成本: -136%
- 净收益: -91%

他们的"印钞机"变成了"碎钞机"。

这就是为什么交易成本建模如此重要——它决定了你的 Alpha 是真的还是幻觉。


18.1 成本的真实构成

18.1.1 显性成本 vs 隐性成本

交易成本金字塔

18.1.2 显性成本详解

成本类型美股A股加密货币
佣金0-0.005%0.03%0.02-0.1%
印花税0.1%(卖出)
交易所费用0.001%含在佣金含在佣金
SEC 费用0.00008%
过户费0.001%

美股显性成本示例

买入 $100,000  AAPL:
- 佣金: $0-5(取决于券商)
- 交易所费用: ~$1
- 总计: ~$5 = 0.005%

卖出时相同,双边约 0.01%

18.1.3 隐性成本:看不见的杀手

滑点 (Slippage)

定义:你期望的成交价与实际成交价的差异

期望以 $100.00 买入 AAPL
实际成交价 $100.05
滑点 = $0.05 = 0.05%

滑点来源

来源解释影响因素
买卖价差Bid-Ask Spread流动性、波动率
价格移动下单到成交的时间差市场波动、网络延迟
部分成交订单被拆分成交订单大小、盘口深度

市场冲击 (Market Impact)

定义:你的交易本身推动价格向不利方向移动

场景: 你要买入 10,000  AAPL

盘口:
  卖一: $100.00 × 2,000 
  卖二: $100.02 × 3,000 
  卖三: $100.05 × 5,000 

如果用市价单一次买入:
   2,000 : $100.00
  接下来 3,000 : $100.02
  最后 5,000 : $100.05

加权平均价: $100.029
理想价格: $100.00
市场冲击: 0.029%

而且: 你把买二、买三的单子都吃掉了
      下一个买家只能以更高价格买入
      这就是"永久冲击"

机会成本

定义:因为无法成交或延迟成交而损失的潜在收益

场景:
  信号发出时价格: $100
  你下限价单: $99.50
  价格直接涨到 $105
  你的单子永远不会成交

机会成本 = $105 - $100 = 5%

18.2 滑点建模

18.2.1 线性模型

最简单的模型假设滑点与订单大小成正比:

Slippage = k × OrderSize / ADV

其中:
- k = 经验系数(通常 0.1-0.5)
- OrderSize = 订单金额
- ADV = 日均成交量(Average Daily Volume)

纸上练习

你要买入 $500,000 的股票,假设 k = 0.3

股票ADV订单占比预期滑点
AAPL$10B0.005%0.3 × 0.005% = 0.0015%
TSLA$3B0.017%0.3 × 0.017% = 0.005%
小盘股 X$10M5%0.3 × 5% = 1.5%

发现:在小盘股上,$50 万的订单可能产生 $7,500 的滑点!

18.2.2 根号模型(Square-Root Model)

更精确的模型考虑非线性关系:

Slippage = k × σ × (OrderSize / ADV)

其中:
- σ = 日波动率
- k = 经验系数(通常 0.5-1.5)

纸上练习

股票波动率 σADV订单滑点(k=1)
AAPL1.5%$10B$1M1.5% × √(1M/10B) = 0.015%
AAPL1.5%$10B$100M1.5% × √(100M/10B) = 0.15%
小盘股3%$10M$1M3% × √(1M/10M) = 0.95%

关键发现

  • 滑点随订单大小次线性增长(根号关系)
  • 波动率高的股票滑点更大
  • 小盘股的滑点可能是大盘股的 60 倍

18.2.3 用 Tick 数据估算滑点

如果有 Level-2 数据,可以更精确地估算:

方法: 模拟订单穿透盘口

1. 获取历史盘口快照
2. 模拟市价单逐档成交
3. 计算加权平均价 vs 中间价
4. 统计不同订单大小的滑点分布
💻 代码框架(工程师参考)
def estimate_slippage(order_size: float,
                     order_book: dict,
                     side: str = 'buy') -> float:
    """
    基于盘口数据估算滑点

    order_book = {
        'bids': [(price1, size1), (price2, size2), ...],
        'asks': [(price1, size1), (price2, size2), ...]
    }
    """
    if side == 'buy':
        levels = order_book['asks']  # 买入吃 ask
    else:
        levels = order_book['bids']  # 卖出吃 bid

    mid_price = (order_book['bids'][0][0] + order_book['asks'][0][0]) / 2
    filled = 0
    cost = 0

    for price, size in levels:
        if filled >= order_size:
            break
        fill_amount = min(size, order_size - filled)
        cost += fill_amount * price
        filled += fill_amount

    if filled < order_size:
        # 盘口深度不够,无法完全成交
        return float('inf')

    avg_price = cost / order_size
    slippage = (avg_price - mid_price) / mid_price

    return slippage if side == 'buy' else -slippage

18.3 市场冲击建模

18.3.1 临时冲击 vs 永久冲击

市场冲击的两个成分

18.3.2 Almgren-Chriss 模型

这是最著名的市场冲击模型:

总成本 = 临时冲击 + 永久冲击 + 波动风险

其中:
  临时冲击  交易速度(单位时间交易量)
  永久冲击  总交易量
  波动风险  执行时间 × 波动率

权衡:
  交易快  临时冲击大,但波动风险小
  交易慢  临时冲击小,但波动风险大

直觉解释

想象你要把一桶水倒进池塘。 倒得快(一次倒完)→ 水花大(临时冲击),但水面很快平静 倒得慢(一滴一滴)→ 水花小,但期间可能刮风下雨(波动风险)

18.3.3 纸上练习:执行策略选择

你要买入 $10M 的 AAPL(ADV = $10B),波动率 = 1.5%/天

执行策略执行时间临时冲击波动风险总成本
一次市价单瞬间
分 10 笔(1天)1 天1.5%
分 50 笔(5天)5 天极低3.4%可能更高

最优解:根据紧急程度和风险偏好权衡


18.4 可交易性评估

18.4.1 成交概率建模

限价单的问题:你挂的单不一定能成交

成交概率 P(fill) 取决于:
1. 限价 vs 当前价的距离
2. 盘口排队深度
3. 价格波动幅度
4. 等待时间

估算公式(简化):
P(fill)  1 - exp(-λ × 时间)

其中 λ 与价格距离、波动率相关

纸上练习

你在 $100 的股票上挂 $99 的限价买单(低于市价 1%)

场景日波动率预期成交概率
低波动0.5%~20%(很难触达 -1%)
中波动1.5%~60%(经常触达)
高波动3%~85%(几乎肯定触达)

问题:高成交概率意味着价格经常下跌,可能不是好信号

18.4.2 流动性成本指标

指标公式含义
订单占比Order / ADV越小越好
流动性消耗Order / 盘口深度越小越好
等待成本信号衰减 × 等待时间越小越好
综合成本滑点 + 冲击 + 机会成本总成本

18.4.3 Alpha 净化:从 Gross 到 Net

Gross Alpha: 预测收益(回测得到)

减去:
  - 显性成本(佣金、税)
  - 滑点(Bid-Ask + 延迟)
  - 市场冲击
  - 机会成本

等于:
  Net Alpha: 实际可获得收益

关键公式:
  策略可行  Net Alpha > 0
  策略可行  Gross Alpha > Total Cost

纸上练习

策略毛 Alpha换手率单次成本年化成本净 Alpha
A15%50%0.2%2%13% ✓
B20%200%0.2%8%12% ✓
C30%500%0.2%20%10% ✓
D40%1000%0.2%40%0% ✗
E50%2000%0.2%80%-30% ✗

发现

  • 策略 E 毛 Alpha 最高,但净收益最低
  • 策略 A 毛 Alpha 最低,但净收益最高
  • 高换手率是收益的杀手

18.5 策略同质化:当所有人交易同一信号

当所有人持有相同头寸,退出通道只有一个。

2024 年 2 月,中国 A 股市场上演了一场典型的策略同质化危机。大量量化私募超配小微盘股,使用相似的因子暴露(小市值 + 动量),导致信号高度相关。当市场下行叠加监管收紧时,集体止损引发正反馈螺旋:下跌触发止损,止损加剧下跌,流动性迅速枯竭。

头部机构年内回撤(截至 2024 年 6 月):

机构产品年内收益
九坤投资500 指增-13.67%
灵均投资500 指增-12.64%
幻方量化500 指增-8.96%

这些都是管理数百亿的头部机构。它们的策略在正常市场中表现优异,但同质化暴露让它们在危机中同时失血。

对交易成本的启示:策略同质化不仅是 Alpha 衰减问题,更是成本放大器——当所有人同时卖出,你的市场冲击和滑点会成倍增加。成本建模必须包含"拥挤度"这个维度。

更多细节参见背景知识:策略同质化与容量瓶颈


18.6 为什么很多 ML Alpha 不可交易

18.6.1 信号衰减速度 vs 执行延迟

信号衰减曲线

18.6.2 高频 Alpha 的容量约束

Alpha 类型典型衰减容量可行性
做市价差毫秒$1-10M需要 HFT 基础设施
统计套利秒-分钟$10-100M需要低延迟
技术动量分钟-小时$100M-1B散户可能可行
基本面因子天-周$1B+容量充足

关键洞察

ML 模型很容易发现短期 Alpha(因为信号噪音比高) 但这些 Alpha 往往衰减太快,散户根本来不及执行

18.6.3 案例:高胜率策略的实盘崩溃

回测结果

  • 日胜率 65%
  • 日均收益 0.3%
  • 夏普 3.0

策略特征

  • 信号衰减半衰期:2 分钟
  • 平均执行延迟:5 分钟

问题

信号发出时: 预期收益 +0.5%
2 分钟后: 预期收益 +0.25%(衰减 50%
5 分钟后(实际执行): 预期收益 +0.06%

减去成本 0.1%: 净收益 -0.04%

65% 胜率 × (-0.04%) = 持续亏损

18.7 多智能体视角

18.7.1 Cost Estimator Agent

Cost Estimator Agent

18.7.2 成本意识的策略设计

设计原则实现方式
降低换手率延长持仓周期、提高信号阈值
选择高流动性标的过滤 ADV < 阈值的股票
避开高波动时段不在开盘/收盘/事件期交易
使用智能订单TWAP、VWAP、算法交易
容量管理策略容量 = f(流动性, 冲击)

✅ 验收标准

完成本课后,用以下标准检验学习效果:

验收项达标标准自测方法
理解成本构成能列举显性和隐性成本画出成本金字塔
估算滑点能用根号模型计算滑点完成纸上练习
理解市场冲击能解释临时和永久冲击给出例子
评估可交易性能计算 Net Alpha评估一个策略
理解 ML Alpha 陷阱能解释信号衰减问题分析高频策略

本课交付物

完成本课后,你将获得:

  1. 成本分类框架 - 显性、隐性、机会成本
  2. 滑点估算模型 - 线性和根号模型
  3. 可交易性评估方法 - Gross Alpha → Net Alpha
  4. Cost Estimator Agent 设计 - 成本预估和决策协作

本课要点回顾

  • 交易成本 = 显性成本 + 滑点 + 市场冲击 + 机会成本
  • 滑点与订单大小/ADV 呈根号关系
  • 策略可行性 = Net Alpha > 0 = Gross Alpha > Total Cost
  • 高换手率是 Alpha 的杀手
  • ML Alpha 容易发现短期信号,但执行延迟可能导致无法捕获

延伸阅读


下一课预告

第 19 课:执行系统 - 从信号到真实成交

成本建模告诉我们"交易有多贵",下一课我们深入执行层面:如何设计订单?如何处理滑点?如何在真实市场中把信号变成成交?

Cite this chapter
Zhang, Wayland (2026). 第18课:交易成本建模与可交易性. In AI Quantitative Trading: From Zero to One. https://waylandz.com/quant-book/第18课:交易成本建模与可交易性
@incollection{zhang2026quant_第18课:交易成本建模与可交易性,
  author = {Zhang, Wayland},
  title = {第18课:交易成本建模与可交易性},
  booktitle = {AI Quantitative Trading: From Zero to One},
  year = {2026},
  url = {https://waylandz.com/quant-book/第18课:交易成本建模与可交易性}
}