本节摘要:滑点与手续费在回测参数表里只是两行小字,却常常是策略生死的最终裁决者。本节把上一节的排错经验反转成主动实验:系统性地扫描成本参数,观察策略的过审判定在哪个区间翻转,并据此定义"成本安全边际"。看完这节,你会给每个候选策略都画一张成本地形图,再决定要不要让它出门。
单点成本假设有一个致命弱点:它给的是一个数字,而策略的判定需要一条线。假设滑点按万分之一建模、策略过审,真正的问题从来不是"万分之一下行不行",而是"万分之一点五呢、万分之二呢"——如果多算半个基点策略就从盈利转亏,那它根本不是策略,只是一次踩在成本线上的走钢丝。敏感性实验把成本从"参数"升格为"维度":在滑点与手续费构成的平面上扫描,画出策略表现的等高线,让"这个策略能不能活"变成一个区间判断而非赌注。这正是第四章 4.4 案件给我们的教训的前置化——与其等实盘教我们成本的真实值,不如先问策略对成本的容忍区间有多宽。
实验设计有四个要点。参数网格:手续费按真实账单取上下浮动若干档(比如从基准到两倍),滑点按基点梯度扫描(从零到日均波动的一定比例);网格覆盖范围要包含"故意悲观"的档位——实验的目的是找到悬崖,不是确认安全。单一变量原则:扫描成本时冻结策略全部其他参数,否则你测的是"参数组合"而不是成本敏感度。分层报告:总表现之外,按市场状态(高波动与低波动时段)、按时段(开盘、午间、尾盘)、按订单规模分层统计成本损耗——成本敏感度在不同分层里差异极大,总量会掩盖结构。判定指标:除了净值,同时跟踪"成本后收益为正的参数区域面积",这个面积就是策略的成本安全边际。
扫描框架的骨架代码如下:
import itertools def cost_sensitivity(run_backtest, fees, slips): """成本敏感性扫描: run_backtest(fee, slip) 返回该成本假设下的年化净收益 fees: 手续费档位序列; slips: 滑点档位序列(基点)""" grid = {} for fee, slip in itertools.product(fees, slips): stats = run_backtest(fee=fee, slip_bps=slip) grid[(fee, slip)] = stats["annual_return"] # 找到收益转负的临界线, 输出安全边际 safe = [k for k, v in grid.items() if v > 0] margin = max(s[1] for s in safe) if safe else 0 return grid, {"可容忍最大滑点基点": margin}
把几十个候选策略的扫描结果摊开看,成本地形大体分三类。平原型:收益对成本变化迟钝,滑点翻倍后依然为正——通常意味着策略单笔预期收益厚、换手低,这类策略对执行质量不挑剔,是组合里的"好脾气"成员。坡地型:收益随成本线性下滑,临界点在合理假设区间之内——最常见的一类,结论不是拒绝而是附条件通过:执行方案必须保证滑点压在某条线以下,并持续监控。悬崖型:临界点就在基准假设附近,再多半个基点就翻负——这类策略本质上赚的就是"成本假设与真实成本之间的缝隙",哪怕过审也建议直接否决,因为缝隙的存在本身不可控。

敏感性实验的产出不是一纸判决,而是一份执行合同的输入。对坡地型策略,实验给出的是滑点预算上限——执行算法(4.2 节)与延迟方案(4.3 节)的选型都要在这个预算内比价;实验同时给出监控阈值:实盘滚动滑点超过预算的某个比例(如七成)即告警,触发执行方案复查或降仓位。对手续费,实验揭示的是换手率的真实代价——很多策略的费率敏感性曲线陡峭得惊人,把换手率降一半比优化任何信号都更提升净收益,这是低频化改造最硬的理由。对平原型策略,实验的价值是授权:它让团队敢于把资源花在别处,不必为不敏感的成本维度过度建设。
把实验压成一行可执行的结论。假设某周频调仓的截面策略,基准成本假设为双边万分之八,扫描结果显示:成本升到万分之十二时净收益减半,万分之十六时转负。这三组数字可以翻译成一句"边际陈述":本策略的成本安全边际为双边万分之八,即基准假设向上浮五成以内,判定不变。有了这句陈述,三件事立刻有了依据:执行团队拿到滑点预算上限——实盘执行损耗必须压在预算内,超预算即触发处置;立项评审拿到否决标准——任何让预期成本上浮超过边际的改动(换标的池、提调仓频率、换市场)都要重跑实验;监控拿到告警线——实盘滚动成本越过基准的七成,提前预警而非等到转负。成本敏感性实验的价值因此不在那张图,而在图里读出的这句话:离悬崖还有多远,以及谁在盯着这条路。
问:滑点模型应该多复杂? 以"能被实盘数据检验"为上限。固定滑点是最粗的近似;线性冲击模型(滑点与下单量占成交量比例成正比)覆盖了多数中低频场景的需求;再往上的非线性与临时永久冲击分解,只在执行敏感度极高的策略上有必要。复杂度的每一步升级都要用实盘成交数据验证其预测力,验证不过的复杂模型不如简单的可信。
问:手续费应该按什么口径进回测? 按账单口径而非公告口径——佣金有最低收费与阶梯,印花税与过户费只在卖出或特定方向收取,融资利息按占用天数计算。把最近一个季度的真实账单总额与回测成本参数算出的总额对账,误差超过一成就说明口径有遗漏。成本参数的校准频率与账单同步即可。
问:敏感性实验跑一次就够了吗? 市场状态变了要重跑。波动率中枢、盘口深度、费率结构任一变化,成本地形就会重新塑形——建议把实验挂进例行流程:季度重跑一次全量,市场大波动后追加一次。地形图与地图一样,是有年份的。
💡 关键直觉:成本敏感性实验本质上是在问"这个策略的利润,是真实的市场现象,还是成本假设没算够的会计幻觉"——悬崖型的曲线就是幻觉被戳穿的形状。
成本的地形摸清了,下一章切换到生存议题:收益还没落袋之前,风险、仓位与合规才是主角。