3. 手续费概念:手续费的构成与侵蚀效应

做量化交易,很多人只盯着策略的胜率和盈亏比。

但我跟你说,真正吃掉利润的,往往是那些不起眼的「手续费」。

我见过太多回测曲线漂亮的策略,一上实盘就亏钱。为什么?

说白了,就是没把手续费算清楚。今天咱们就把这层窗户纸捅破。

3.1 手续费的三大构成

国内股票交易的手续费,主要由三块组成:

  • 佣金:给券商的服务费。买卖双向收取。
  • 印花税:国家收的税。目前只有卖出时收,买入不收。
  • 过户费:中国结算公司收的。买卖双向收取,金额很小。

我刚开始做回测时,经常只算佣金,把印花税给漏了。结果实盘一跑,收益直接少了一截。嗯,这个坑我替你们踩过了。

关键点:印花税只在卖出时收取,佣金和过户费买卖都收。

3.2 不同品种的手续费规则

不同交易品种,手续费规则差异很大。我整理了一张表,你直接看:

品种 佣金 印花税 过户费 备注
A股 万1.5 ~ 万3 卖出收0.1% 万0.1 最低5元(部分券商可免)
ETF 万0.5 ~ 万1 无最低5元限制
期货 按手数或比例 日内平仓有优惠
可转债 万0.5 ~ 万1 沪市最低1元

你看,ETF和可转债没有印花税,交易成本天然就低。我个人习惯做ETF策略,原因之一就是手续费省心。

小技巧:在vn.py中设置手续费时,建议用「万2.5佣金 + 0.1%印花税」作为保守估计。实际成本只会更低,不会更高。

3.3 手续费对策略收益的侵蚀

手续费到底有多大的杀伤力?我给你算笔账。

假设你有一个高频策略,每天交易10次,每次买卖各一次。单边佣金万2.5,印花税0.1%。

那么一天下来,手续费成本是:

买入佣金:万2.5
卖出佣金:万2.5
卖出印花税:0.1%(即万10)
过户费:万0.1 × 2 = 万0.2

合计:万2.5 + 万2.5 + 万10 + 万0.2 = 万15.2

也就是说,你每交易1万元,就要交15.2元的手续费。一年250个交易日,就是3800元。

如果你的本金是10万,一年光手续费就吃掉3.8%的收益。

注意:高频策略对手续费极其敏感。我曾经见过一个策略,回测年化20%,加上真实手续费后只剩8%。你以为你在赚钱,其实你在给券商打工。

为什么会这样?因为回测时我们往往假设「理想状态」,但实盘中的每一笔交易都在被「抽水」。你想想看,一个年化10%的策略,如果手续费吃掉3%,那实际收益就只剩7%了。

3.4 如何在vn.py中模拟手续费

vn.py提供了非常灵活的手续费设置方式。我一般这样配置:

from vnpy.app.cta_strategy.backtesting import BacktestingEngine

engine = BacktestingEngine()
engine.set_parameters(
    rate=0.00025,      # 佣金:万2.5
    slippage=0.5,      # 滑点:0.5个tick
    size=300,          # 合约乘数
    pricetick=0.2,     # 最小价格变动
    capital=1_000_000, # 初始资金
)

# 设置印花税(卖出时收取)
engine.set_commission(
    commission_rate=0.001,  # 0.1%
    commission_type='sell'  # 仅卖出时收取
)

这里要注意,rate是佣金,commission_rate是印花税。两者是分开设置的。我建议你回测时把佣金设得比实际高一点,给自己留点安全边际。

核心结论:手续费不是小钱。一个策略能不能赚钱,很大程度上取决于它能否覆盖交易成本。回测时务必把手续费算足,否则实盘会给你「惊喜」。

3.5 知识体系图

下面这张图,帮你理清手续费的核心逻辑:

手续费知识体系 手续费构成 佣金(买卖双向) 印花税(仅卖出) 过户费(买卖双向) 侵蚀效应:高频交易年化损失3-5% 建议:回测时佣金设万3,印花税0.1%

这张图把手续费拆成了三块,你一眼就能看明白。佣金和过户费是「双向收费」,印花税是「单向收费」。高频策略最怕的就是双向收费,因为交易次数越多,成本越高。

我的经验:做回测时,我习惯把手续费设成「万3佣金 + 0.1%印花税」。虽然实际可能更低,但这样跑出来的结果更可靠。毕竟,实盘中的意外成本远比你想象的多。

好了,手续费这块就讲到这里。记住一句话:手续费是策略的隐形杀手,回测时一定要算清楚。

专注资料整理