1861 字
9 分钟
《量化交易入门》第 9 章:交易成本——被忽略的利润杀手

《量化交易入门》第 9 章:交易成本——被忽略的利润杀手#

上一章结尾我们留了个问题:为什么有些策略回测曲线漂亮得像印钞机,一上实盘就平庸甚至亏钱?最大的嫌疑人,就是交易成本。

它不像跌停那样惊心动魄,而是像鞋底的沙子——每一步只磨掉一点,走得越远,磨得越狠。高频交易的人对它敬畏如神,新手却常常假装它不存在。这一章,我们把这笔账算清楚。

9.1 成本三件套:佣金、税费、滑点#

交易一次,钱被三层抽走:

  1. 佣金(手续费):券商收的服务费。现在 A 股普遍万 2.5 左右(成交 1 万元收 2.5 元),且大多有最低 5 元的门槛——注意这条门槛对小资金极不友好:你只买 5000 元,按费率算只有 1.25 元,实际仍要交 5 元,真实费率瞬间变成千 1。本金越小、单笔越碎,越容易被最低收费割肉;
  2. 税费:A 股卖出时收千分之 0.5 的印花税(买入不收),这是国家收的,没有议价空间;场内基金、可转债等品种免征印花税,所以做量化的人偏爱这些品种,不是没有原因的;
  3. 滑点:你看到的价格和实际成交价格之间的差。这是最隐蔽、也最容易被低估的一项。

举个例子。你看到某股票卖一价 10.00 元,下单买入,等指令穿过网络、排到交易所撮合队列,价格可能已经变成 10.02 元。这 2 分钱,就是滑点。行情剧烈波动或单子较大时,滑点会更夸张。

9.2 冲击成本:你的单子本身在推动价格#

如果你的资金量大到一定程度,还会遇到第三个对手——冲击成本。

挂单簿上 10.00 元只有 1000 股,你想买 10000 股,吃完 10.00 的单子,只能去吃 10.01、10.02……你的买入行为本身把价格推高了。等你买完,平均成本可能已经是 10.03 元,比你看到的价格贵了 0.3%。散户资金量小,冲击成本几乎可以忽略;但当你管理几百万、上千万时,它会成为和佣金同等重要的开销。量化基金里有一个专门岗位叫交易执行,研究的就是”怎么把大单子切碎了悄悄买进去”——拆成几百笔、挑成交量大的时段、用算法单伪装成普通散户流量,都是为了让市场别发现有个大买家进场。

9.3 动手算:成本如何吃掉一个策略#

先算一笔小账:10 万元做一次完整的买卖,按万 2.5 佣金、卖出千 0.5 印花税、千 1 滑点估算,成本是——

  • 佣金:10 万 × 万 2.5 × 2(双边)= 50 元
  • 印花税:10 万 × 千 0.5(仅卖出)= 50 元
  • 滑点:10 万 × 千 1 × 2(双边)= 200 元

合计 300 元,占本金的 0.3%。注意,滑点反而是大头,这在小盘股、低流动性品种上非常真实。

下面用 Python 对比同一个小信号(每次交易毛赚 0.2%)在三种换手频率下,“假装没有成本的回测”和”老实扣费的实盘”分别是什么结果:

# 一次完整买卖(买入+卖出)的交易成本
def round_trip_cost(amount, commission_rate=0.00025,
stamp_tax=0.0005, slippage=0.001):
"""佣金双边都收;印花税只在卖出收;滑点买卖各吃一次"""
commission = amount * commission_rate * 2
tax = amount * stamp_tax
slip = amount * slippage * 2
return commission + tax + slip
amount = 100000 # 10 万本金
cost = round_trip_cost(amount)
print(f"每次完整买卖成本:{cost:.0f} 元(占本金 {cost/amount*100:.2f}%)")
gross_rate = 0.002 # 每次交易的毛收益 0.2%
for n, tag in [(12, "月调仓"), (120, "周调仓"), (1200, "高频")]:
gross = amount * gross_rate * n # 零成本回测的全年收益
net = gross - cost * n # 老实扣费后的全年收益
print(f"{tag} {n:>4} 次:零成本回测 {gross/amount*100:>7.1f}% "
f"扣费后 {net/amount*100:>8.1f}%")

运行结果:

每次完整买卖成本:300 元(占本金 0.30%)
月调仓 12 次:零成本回测 2.4% 扣费后 -1.2%
周调仓 120 次:零成本回测 24.0% 扣费后 -12.0%
高频 1200 次:零成本回测 240.0% 扣费后 -120.0%

这组数字值得盯着看一分钟。每次只赚 0.2%,却要付 0.3% 的过路费——单次交易就亏 0.1%。在不记成本的回测里,交易越频繁越像股神,高频版一年 240%;而计入成本后,真相完全反过来:越勤奋亏得越狠,高频版一年亏掉 120%,本金清零还倒欠。

成本率是一条生死线:策略每次交易的边际收益必须盖过单次成本,否则换手率越高,死得越快。 这也是为什么专业机构评估一个高频策略,第一句话永远是问:“它每次交易平均赚几个 tick?够不够交费?“

9.4 回测里如何正确模拟成本#

做回测时,请遵守三条纪律:

  1. 佣金按真实费率双边计入,别忘了最低 5 元的门槛——小资金频繁交易时,最低收费会让实际费率远高于万 2.5;
  2. 滑点至少设千分之一,流动性差的品种设到千分之三甚至更高,不要用零滑点自欺欺人;
  3. 成交价不要用收盘价直接成交,更真实的做法是以下一根 K 线的开盘价成交,因为你看到收盘信号时,已经不可能按收盘价买到了。

一个经验法则:回测里把成本翻倍再跑一遍,如果策略依然赚钱,它才比较可能在实盘活下来。

9.5 降低成本的四个实战方法#

  • 减少无效交易:给信号加过滤条件,宁可错过也不滥做,这是降成本最狠的一招;
  • 选流动性好的标的:大盘股、主力合约盘口厚,滑点天然小;
  • 用限价单挂单:耐心挂在买一卖一上等成交,可以把滑点从”成本”变成”收益”,代价是可能成交不了;
  • 避开开盘和尾盘的拥挤时段,以及重大消息公布前后,那是滑点最肥的时候。

9.6 这一章你该记住的#

  1. 成本三件套:佣金、税费、滑点;资金大了再加冲击成本;
  2. 滑点往往比佣金更贵,且无法通过调低费率消除;
  3. 换手率是成本的放大器:高频策略必须先证明它赚得回成本;
  4. 回测如实计费、成本翻倍仍盈利,策略才算过关。

账算清了,策略也验证过了,下一步就是真刀真枪。可直接拿真钱上吗?强烈不建议。下一章:实盘落地:模拟盘、API 与自动化下单,我们讲从回测到实盘之间那段最容易翻车的路怎么走,包括怎么用模拟盘练手、券商的交易接口长什么样、程序下单会遇到哪些坑。


📚 《量化交易入门》系列:零基础小白向量化交易,每章一个主题 + 可运行 Python 示例。第 9 章已读,下一章《实盘落地:模拟盘、API 与自动化下单》明天见。

《量化交易入门》第 9 章:交易成本——被忽略的利润杀手
https://021028.xyz/posts/default/139/
作者
021028
发布于
2026-10-13
许可协议
CC BY-NC-SA 4.0