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

显性交易成本:价差、佣金、税费

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

周一上午,上海陆家嘴一家头部量化私募的策略评审会。一位研究员把回测包递给基金经理:沪深300 成份股大盘股动量策略,年化换手 200%,2014-2023 期间纸面 Sharpe 1.5。撮合模拟器沿用 4.5.1 留下的占位成本「~10 bp 双边」——一个没有拆解的总数。基金经理问:「把成本栈讲给我听。买卖价差、佣金、印花税、过户费、经手费、融资融券利率,每一项是多少?规模从 1 亿涨到 10 亿,账单怎么变?」研究员答不上来。1.5 的纸面 Sharpe 留在会议室——它拿不到资金。本课就是让研究员能回答这个问题的分项层。显性成本是成本感知回测的底线:交易回单上的确定性条目,交易前已知,可从公开费率表计算得到。

框架:显性 vs 隐性

explicit transaction cost (显性 交易 成本) 是交易回单上出现的成本条目——交易前已知,按名义金额或按股数线性计费,多笔可加总。implicit cost (隐性 成本;L2 主题:超过报价半价差的实际成交、临时冲击、永久冲击、滑点) 是规模相关且随机的。只建模显性成本的策略在流动性好的大盘股上低估总成本 50-90%,在流动性差的小盘股上低估 200-1000%。但显性底线是任何执行算法都无法消除的确定性下限。

Inline-code 列表:四个标准显性成本桶

明汯、幻方、灵均、衍复等头部量化私募,以及天弘、富国、华夏、嘉实等公募量化部门,每一份可信的成本感知回测都按完全相同的顺序拆解四个桶。

1. bid-ask spread                      — 报价 半 价差 单次 穿越
2. commission                          — 佣金;买方 1-3 bp,零售 2019 年 后 0
3. exchange / regulatory fees + taxes  — Section 31, FINRA TAF, 印花税, 经手费, 过户费
4. borrow / financing                  — locate; 融资融券 利率 6-8%

法则:显性成本是确定性条目,交易前已知,可从公开费率表计算。不需要参数拟合——一旦交易场所、产品、订单方向确定,账单就是算术题。

(1) 买卖价差

报价 价差 (quoted spread) 是交易瞬间最优卖价减最优买价;标准 bid-ask spread 词是报价输出。半 价差 (half-spread) 是从中价单次穿越的每股成本。有效 价差 (effective spread) 是实际成交的每股成本,通常因为存在隐性 / 中价流动性而比报价价差窄。A 股因为 RMB 0.01 的最小报价单位 (tick size),最小价差是 1 个 tick:30 元股票最小价差 = 0.01 / 30 = 3.3 bp;300 元股票如 600519 贵州茅台 1 tick = 0.33 bp;3 元小盘股最小价差 33 bp——A 股小盘股因为固定 tick 规则在价差上承受不成比例的损失。

(2) 佣金

券商手续费。CN:佣金 监管 最高 0.3% (= 30 bp),买方典型协议价 0.025-0.05% = 2.5-5 bp;零售自 2018 年券商价格战后降至 ~0.025% (2.5 bp)。明汯、幻方、灵均、衍复一类的头部私募通常拿到 ~0.02-0.025% (2.0-2.5 bp);公募量化在 ~0.04% (4 bp) 上下。佣金按名义金额线性计费,与订单规模相对 ADV 无关——交易 1 千元和交易 1 亿元的每元费率是同一个。

(3) 交易所 / 监管 费用 + 税

Inline-code 列表:Three (三个) 2023 年后 CN 监管费率调整。

- `印花税` cut from 0.10% to 0.05% sell-side only on `2023-08-28`
- `经手费` cut from 万分之 0.487 to 万分之 0.341 on `2023-08-28`
- `过户费` cut from 万分之 2 to 万分之 0.5 SSE-only in `2022-04`

法则 ETFs and futures are exempt from 印花税 是 CN 市场的关键结构特征:交易 510300 沪深300 ETF 完全规避印花税;交易沪深300 成份股篮子要付足 0.05% 的卖方印花税。

海外端 Section 31 fee 和 FINRA TAF 是结构平行的卖方单边监管费——CN 端 印花税 + 经手费 + 过户费 round-trip 合计 ~0.55-1.05 bp 与之量级相当。法则 commission is zero for US retail post-2019——零佣金转型让买方 1-3 bp 佣金成为零售-机构 显性 差距 的主项。

(4) 融资 / 融券

融资融券 (margin financing and securities lending) 利率 由 中证金融 监管 设为 6-8% 年化,标的受限名单适用。多头策略借券成本为零;除非显式演示借券,本课的算例都用多头 round-trip。

交易回单成本方程

total explicit cost (round-trip)=2×half_spread+2×commission+2×exchange_fee+stamp_duty_sell_only+2×transfer_fee+borrow_cost×holding_period_years\text{total explicit cost (round-trip)} = 2 \times \text{half\_spread} + 2 \times \text{commission} + 2 \times \text{exchange\_fee} + \text{stamp\_duty\_sell\_only} + 2 \times \text{transfer\_fee} + \text{borrow\_cost} \times \text{holding\_period\_years}

变量名 half_spreadcommissionexchange_feestamp_duty_sell_onlytransfer_feeborrow_costholding_period_years 与撮合模拟器成本拆解 dict 的 key 一致。对称项前的 2 × 反映每个 round-trip 在两条腿(买腿+卖腿)上各穿越一次。孤立的 stamp_duty_sell_only 项反映 CN 卖方不对称。

Fenced Python — 二十行插入 4.5.1 五层引擎的撮合模拟器层:

# explicit-cost decomposition — deterministic line items
def compute_explicit_cost(order, bar, rates):
    """L1 显性 成本:价差 + 佣金 + 交易所费 + 印花税 + 过户费 + 融资融券费"""
    notional = order["shares"] * bar["mid_price"]
    sign_sell = 1 if order["side"] == "sell" else 0
    holding_years = order.get("holding_days", 0) / 252.0
    # 1. 价差:每笔穿越收取半价差
    spread = bar["half_spread_bp"] * notional / 1e4
    # 2. 佣金:按名义金额 bp 计费
    commission = rates["commission_bp"] * notional / 1e4
    # 3. 交易所费:CN 的 经手费 + 过户费 双边
    exchange_fee = (rates["sec_fee_bp"] * sign_sell + rates["taf_bp"] * sign_sell) * notional / 1e4
    # 4. 印花税:CN 卖方单边
    stamp_duty = rates["stamp_duty_bp"] * sign_sell * notional / 1e4
    # 5. 过户费:CN 上交所 only
    transfer_fee = rates["transfer_fee_bp"] * notional / 1e4
    # 6. 融券费:仅空头;成本 × 持有期
    borrow = (rates["borrow_bp_per_year"] * holding_years * notional / 1e4
              if order.get("is_short") else 0.0)
    return {
        "spread": spread, "commission": commission, "exchange_fee": exchange_fee,
        "stamp_duty": stamp_duty, "transfer_fee": transfer_fee, "borrow": borrow,
    }

Three (三个) round-trip 成本算例(Markdown 表)

把交易回单成本方程套到三个基准情形:

casenotionalspreadcommissionexchange/regulatorystamp_dutyround-trip total
(1) US ETF 激进$1M0.26 bp (2 × 0.13)4.0 bp (2 × 2.0)0.12 bp Section 31+TAF + 1.2 bp taker fee0~5.6 bp
(2) 510300 ETFRMB 1M1.0 bp (2 × 0.5)5.0 bp (2 × 2.5)1.68 bp (1 过户费 + 0.68 经手费)0 (ETF exempt)~7.7 bp
(3) 600519 single-nameRMB 1M0.34 bp (2 × 0.17)5.0 bp (2 × 2.5)1.68 bp (1 过户费 + 0.68 经手费)5 bp sell-side~12 bp

情形 1:US ETF 100 万 USD 激进市价单。半价差 0.13 bp,doubled = 0.26 bp。佣金 2 bp,round-trip = 4 bp。监管费 0.12 bp。taker fee 两条腿 ~0.6 bp × 2 = 1.2 bp。总 ~5.6 bp。

情形 2:510300 沪深300 ETF 100 万 RMB。半价差 ~0.5 bp;佣金 2.5 bp;印花税 0 (ETF 豁免);过户费 万分之 0.5 × 2 = 1 bp;经手费 万分之 0.341 × 2 = 0.68 bp。round-trip ~7.7 bp。

情形 3:600519 贵州茅台 (上交所上市) 100 万 RMB。半价差 ~0.17 bp;佣金 2.5 bp;印花税 5 bp 卖方;过户费 1 bp round-trip;经手费 0.68 bp。总 ~12 bp。印花税 占主导——5 bp 卖方印花税比任何其他单项都多一倍以上。

200% 换手下的年化成本拖累

年化换手 200% 的策略在年化成本拖累上付 ~2 × round-trip。510300 200%:~15 bp 年化。600519 单只 200%:~24 bp。在纸面年化收益 12%、年化波动 15% 下,Sharpe 等价拖累是 2 × round_trip / 15%——510300 ~0.20、600519 单只 ~0.32。仅显性成本建模就已经从纸面 Sharpe 里削掉 0.05-0.30。

撮合模拟器集成实务

Two (两个) 代码评审最常抓研究员的工程点:

  1. 印花税只在 CN 卖方腿适用;撮合模拟器必须跟踪每笔交易的方向。同样的不对称在 US 的 Section 31 + FINRA TAF 上——两者都是卖方单边。
  2. Maker-taker 返佣要求知道订单是被动还是激进;研究员若假定全为市价单,在被动友好策略上高估成本 ~3-5 bp。

纪律法则:显性成本是一旦交易场所和产品固定,从费率表上算 5 分钟的事。它们是成本感知回测的底线。任何纸面 Sharpe 无法通过显性成本测试的策略,无法靠冲击建模 (L2) 或执行算法优化 (4.5.3) 救回。整体 transaction cost (交易成本) 拆解然后在 L2 里加上 slippage (滑点) 和市场冲击。

Formula Explorer

\text{cost}_{bp} = 2 \times \text{half\_spread} + 2 \times \text{commission} + 2 \times \text{exchange\_fee} + \text{stamp\_duty}

简化的四项形式——白板主力公式。完整方程加 CN 的 过户费 和空头的 borrow 项。

练习

Exercise

你在 510300 沪深300 ETF 上跑 200% 年化换手基准策略,本金 100 万 RMB。做四个计算并报告。

(i) 套用 trade-ticket cost equation 计算激进执行 (市价单穿越价差) 的 round-trip 显性成本 (bp):半价差 0.5 bp,佣金 2.5 bp,印花税 0 (ETF 豁免),过户费 0.5 bp × 2,经手费 0.341 bp × 2。

(ii) 同 (i) 但本金换为 100 万 RMB 的 600519 贵州茅台:半价差 0.17 bp,佣金 2.5 bp,印花税 5 bp 卖方,过户费 0.5 bp × 2,经手费 0.341 bp × 2。

(iii) 计算两个情形在 200% 换手下的年化成本拖累,并假设纸面年化收益 12%、纸面年化波动 15%,给出 Sharpe 等价扣减。

(iv) 给出 510300600519 之间最主要的成本差异项 (印花税 for 600519) 和 round-trip 成本 bp 的差距。

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

提示
(i):2 × 0.5 + 2 × 2.5 + 0 + 2 × 0.5 + 2 × 0.341 = 1 + 5 + 0 + 1 + 0.68 = ~7.7 bp。(ii):2 × 0.17 + 2 × 2.5 + 5 + 1 + 0.68 = 0.34 + 5 + 5 + 1 + 0.68 = ~12 bp。
提示
(iii):年化拖累 = 2 × round-trip。Sharpe 拖累 = 拖累 / 1500 bp。(iv):印花税 5 bp 在 600519510300 因 ETF 豁免为 0;差距 ~4.3 bp。

衔接 L2

显性成本是确定性条目——5 分钟算完。它们也是规模无关的:1 千元和 1 亿元每元监管费相同。但机构交易现实正相反——任何超过 ~0.5% ADV 的订单,隐性成本(市场冲击、超过报价价差的滑点)对显性成本栈的支配比是 2-10 倍。L2 引入经验平方根法则 impact_bp ≈ Y × σ × sqrt(Q/V)、临时-vs-永久 冲击拆解、量化全部隐性成本账单的 实施 差额 框架。

实务对照:再深一层

CN 端再看几个常被误用的点。一是 融资融券 的方向:融资是买入借钱,融券是借券卖出;本课的「借券成本」专指融券侧的借券费率,融资侧的资金利率属于杠杆成本范畴,与本课的交易成本分项不在同一层。二是 ETF vs 单只股票 印花税 豁免在 CN 端是回测代码评审最常抓的错误——510300 沪深300 ETF 没有印花税,沪深300 成份股篮子有 0.05% 卖方印花税,量级差 ~5 bp,会直接把 ETF 增强策略与篮子打散策略的可比性打偏。三是科创板、创业板、北交所的费率边界与上交所主板、深交所主板不完全相同——科创板单次涨跌幅 20%、北交所 30%、ST 5%,对应的微结构假设需要按板块写进费率表查询逻辑里。四是私募 + 公募的协议佣金谈判每年都会刷新一次到两次,监管费率每年也会被证监会、证券交易所发文调整——把费率表绑定到日期 key 而不是硬编码常量,是工程上避免历史回测与实盘交叉污染的关键设计。

已涵盖组件

  • Inline-code listing of the FOUR 显性成本桶。
  • trade-ticket cost equation KaTeX 块。
  • Fenced Python compute_explicit_cost(order, bar, rates) 返回六 key cost-decomposition dict。
  • Three (三个) round-trip 算例 Markdown 表。
  • Inline-code listing of the THREE 2023 年后 CN 监管费率调整。
  • Inline-code listing of the FOUR US 监管费率条目。
  • FormulaExplorer——四项简化形式。
  • Exercise——510300600519 在 200% 换手 + 100 万 RMB 本金下的四个子任务。
  • Two 递进 Hint。