【量化投资从入门到精通 #31】交易成本是回测杀手:手续费、滑点与换手率
大多数人的回测代码里交易是免费的。这一条假设足以让一个亏钱策略在回测里看起来赚钱。一、这个方法解决什么投资问题A 股买卖一次的真实成本大约包括项目费率方向券商佣金万 1.5 ~ 万 3有最低 5 元双向印花税千 1仅卖出过户费十万分之一双向滑点万 2 ~ 万 10视流动性双向合计单边万 3 ~ 万 10是合理估计。听起来很小——万 3 就是 0.03%。但如果你一年换手 100 次就是3%被吃掉。对一个年化 8% 的策略这是三分之一的利润。二、核心思想成本 单边费率 × 换手次数这是全篇唯一的公式但它决定了一件事你的策略频率越高对成本越敏感。所以评价一个策略光看收益不够必须同时看换手次数。两个收益一样的策略换手 10 次的那个远优于换手 100 次的。三、实操演示new1ifmf[i]ms[i]else0ifnew!pos:turns1eq[-1]*(1-cost_bp/10000.0)# 每次换仓扣一次单边成本posnew真实输出2026-08-06000001 平安银行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实盘与回测的鸿沟——除了成本还有哪些东西在偷偷拿走你的收益哪些其实只是噪声。免责声明本文为量化方法教学标的为示例费率为通用估算以你的券商实际费率为准不构成投资建议不承诺收益。投资有风险入市需谨慎。