【量化投资从入门到精通 #31】交易成本是回测杀手手续费滑点与换手率
大多数人的回测代码里,交易是免费的。这一条假设,足以让一个亏钱策略在回测里看起来赚钱。
一、这个方法解决什么投资问题
A 股买卖一次的真实成本大约包括:
| 项目 | 费率 | 方向 |
|---|---|---|
| 券商佣金 | 万 1.5 ~ 万 3(有最低 5 元) | 双向 |
| 印花税 | 千 1 | 仅卖出 |
| 过户费 | 十万分之一 | 双向 |
| 滑点 | 万 2 ~ 万 10(视流动性) | 双向 |
合计单边万 3 ~ 万 10 是合理估计。听起来很小——万 3 就是 0.03%。但如果你一年换手 100 次,就是 3% 被吃掉。对一个年化 8% 的策略,这是三分之一的利润。
二、核心思想:成本 = 单边费率 × 换手次数
这是全篇唯一的公式,但它决定了一件事:你的策略频率越高,对成本越敏感。
所以评价一个策略,光看收益不够,必须同时看换手次数。两个收益一样的策略,换手 10 次的那个远优于换手 100 次的。
三、实操演示
new = 1 if mf[i] > ms[i] else 0
if new != pos:
turns += 1
eq[-1] *= (1 - cost_bp / 10000.0) # 每次换仓扣一次单边成本
pos = new
真实输出(2026-08-06,000001 平安银行,250 根 K 线):
| 参数组 | 换手次数 | 0 费率 | 万 3(佣金+印花税) | 万 10(含滑点) |
|---|---|---|---|---|
| MA(3, 10) | 30 | −4.53% | −5.38% | −7.35% |
| MA(5, 20) | 21 | −10.46% | −11.02% | −12.32% |
| MA(10, 60) | 9 | −13.88% | −14.11% | −14.65% |
四、结果解读
先看成本吃掉了多少:
| 参数组 | 换手 | 万 10 下被吃掉 | 平均每次换手成本 |
|---|---|---|---|
| MA(3, 10) | 30 次 | 2.82 个百分点 | 0.094% |
| MA(5, 20) | 21 次 | 1.86 个百分点 | 0.089% |
| MA(10, 60) | 9 次 | 0.77 个百分点 | 0.086% |
高频参数被吃掉的绝对损耗是低频的 3.7 倍,而且这个差距完全由换手次数决定——每次换手的边际成本几乎相同(0.086%~0.094%)。
这里有个更值得警惕的现象:在零费率下,MA(3,10) 是三组里表现最好的(−4.53%);加上万 10 成本后它仍是最好的(−7.35%),但优势从 9.35 个百分点缩窄到 7.30 个百分点。如果换手再高一档(比如日内策略换手 200 次),这个排名很可能直接翻转。
这就是"回测杀手"的含义:不是成本让你从赚变亏(虽然常常如此),而是成本改变了策略之间的排名。你在零成本回测里选出的"最优策略",在真实费率下可能根本不是最优的。
换算成年化视角:本例 250 根 K 线约等于一年。MA(3,10) 一年换手 30 次,万 10 费率下年损耗 2.82%。如果你追求"每周调仓"(一年约 50 次),损耗约 4.7%;"每日调仓"(一年约 240 次),损耗超过 20%——绝大多数策略的 alpha 撑不住这个量级。
五、常见陷阱
- 回测不计成本:最常见也最致命,直接导致高频策略被系统性高估。
- 只算佣金不算滑点:滑点通常比佣金大,尤其在小盘股和大资金上。
- 忽略印花税只在卖出收:单边计费时容易漏。
- 用最低 5 元佣金坑小资金:本金 1 万、单笔 5 元佣金 = 万 5,比费率表高一倍。
- 忘了换手是策略属性:选参数时应把"换手次数"当作和收益同等重要的评价维度。
六、小结 + 下篇预告
成本 = 单边费率 × 换手次数。实测万 10 费率下,换手 30 次吃掉 2.82 个百分点,换手 9 次只吃 0.77 个。回测里必须加成本,并且必须打印换手次数。
下篇 #32:实盘与回测的鸿沟——除了成本,还有哪些东西在偷偷拿走你的收益,哪些其实只是噪声。
免责声明
本文为量化方法教学,标的为示例,费率为通用估算(以你的券商实际费率为准),不构成投资建议,不承诺收益。投资有风险,入市需谨慎。



