← 返回博客列表

量化投资从入门到精通

【量化投资从入门到精通 #31】交易成本是回测杀手手续费滑点与换手率

2026年08月22日 17:01 · 麦蕊智数 MyData

大多数人的回测代码里,交易是免费的。这一条假设,足以让一个亏钱策略在回测里看起来赚钱。

一、这个方法解决什么投资问题

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:实盘与回测的鸿沟——除了成本,还有哪些东西在偷偷拿走你的收益,哪些其实只是噪声。

免责声明

本文为量化方法教学,标的为示例,费率为通用估算(以你的券商实际费率为准),不构成投资建议,不承诺收益。投资有风险,入市需谨慎。

标签: 量化交易
QQ 客服 3826425416 咨询时请提供证书号或订单号,便于快速处理
咨询