FEEREVO · 币安成本账本 数据来自 Binance 公共接口

费率参数 · No.036

回测里手续费和滑点填多少才不骗自己

回测的成本参数怎么填:先说清单边还是往返这一处,再按标的流动性分档给滑点的填法,补上永续资金费、限价单默认成交、单笔最低收费三个常漏项,最后用翻倍测试自检。

谭算 · FeeRevo 编辑部· 发布 2026-09-02· 更新 2026-09-02· 约 8 分钟 已核 · 2026-08
账页风格封面:No.036 · 费率 · 回测里手续费和滑点填多少才不骗自己

同一条策略,同一段数据,只改成本参数:

下面这组数字全部是为了演示随手取的假设值——策略毛年化 30%、一年 200 次往返、每次动用全部资金,都是为了让算术能一眼看懂而设的,不代表任何真实策略、任何平台的费率,也不是对任何收益的预期。

参数组单边手续费单边滑点往返合计年成本净年化
乐观0.02%不填0.04%8%+22%
中性0.05%0.02%0.14%28%+2%
保守0.05%0.05%0.20%40%−10%

三行用的是同一条策略。参数选得乐观一点,它是个能拿去实盘的东西;参数选得保守一点,它是个亏钱机器。成本参数在这里的分量,已经超过策略本身。

三组参数,三个结论

放大差距的是频率。往返成本每高出 0.01 个百分点,乘 200 就是 2 个百分点的年化。所以交易越密的策略,对成本参数越敏感——高频策略的回测曲线,本质上是一条被成本参数决定的曲线。频率和成本怎么相乘,单独算在一年交易多少次那篇。

还有一个中文资料特有的麻烦。搜到的滑点参考值,不少精确到小数点后三位,来源多半是十几二十年前的 A 股或商品期货研究。那些数字在它们的原始语境里可能是对的,搬到这边不行:这边 7×24 连续交易、没有涨跌停、没有集合竞价、不同标的的盘口厚度能差几个数量级,还多了一项永续合约的资金费。能搬的是方法,不是数值。

单边还是往返,先说清这一处

这是最常出错、也最容易查的一处。回测框架的成本参数,有的按单边收(开仓扣一次、平仓再扣一次),有的要你直接填一次完整往返的合计。填反了,结果差一倍。

查法不用读文档:跑一个只做一次开平仓的最小样本,手算这一笔该扣多少,和框架输出的数对一下。差一倍就是填反了。这件事花五分钟,能省掉后面全部的自我怀疑。

另外,别把手续费和滑点填进同一个参数里。它们的走向不一样——手续费按你的费率档走,滑点按标的深度走,合并之后再想调其中一个就分不开了。

手续费填哪一档

三条规则,按顺序用:

  • 默认填吃单档。除非你的策略明确用只做挂单的方式下单并且接受不成交,否则按吃单填。市价单、止损单、追价单,全都落在吃单那一侧。两档的区别见挂单和吃单到底差在哪
  • 填你现在这一档,不填你将来可能到的那一档。成交量上去费率确实会降,可那是策略先跑出来之后的结果。拿一个还没拿到的档位,去论证一条还没跑起来的策略,这是循环论证。
  • 抵扣类折扣先别填。它依赖你持有某种资产、依赖开关处于打开状态、依赖活动还在。先把最坏情况跑通,折扣当安全垫。

再补一个小额策略专属的坑:某些交易对存在单笔最低收费。单笔金额小的时候,实际费率会明显高过费率表上写的百分比。回测里按固定百分比算,这一块整片消失。判断方法是拿计划中的最小单笔金额去乘费率,看结果是不是低于那个最低值;低于就说明你的实际成本更高,得单独把这一项建成固定费用。

滑点按流动性分档

滑点没有通用数值,只有通用方法。决定它大小的是一个比值:你的订单金额相对该标的的盘口厚度。同一笔钱换个标的,这个比值就换了,填法也得跟着换。所以要先分档,再定填法。

流动性档判断依据单边滑点怎么填
充裕你的单量小于盘口第一档挂单量下限取半个最小价位跳动,再往上留一档余量
一般单量约等于前几档累计量按订单簿实算加权成交价,取几个时段的中位数
单量超过前十档累计量别用固定百分比,只能按订单簿逐档模拟
极端时段剧烈波动、数据发布、深夜低量单独跑一组压力参数,不要和常态混在一起平均

三个执行细节:

  • 中位数而不是均值。滑点分布是长尾的,均值会被少数极端值拉高,中位数更能代表常态;长尾那部分留给压力参数那一组。
  • 盘口厚度分时段。同一个标的在活跃时段和清淡时段是两个东西,如果你的策略集中在某个时段触发,就用那个时段的数据估。
  • 止损单要单独给一组更差的参数。它触发的时刻通常正是盘口最薄、价格最急的时刻,用常态滑点估它会系统性偏乐观。

想快速估一笔单子的量级,可以先用滑点估算工具跑一遍;市价和限价之间的差距怎么拆,见市价单比限价单贵多少

永续回测漏掉的那一项

做永续合约的回测,除了手续费和滑点,还有一项按周期结算的持仓费用。它和成交没有关系,只看你在结算时刻手里有没有仓、仓有多大、方向是哪边。

三个特点决定了它不能忽略:它按固定时点收,不管你在不在看;它有方向性,同一时刻多头空头一收一付;它的费率每一期都会变,不能当常数用。持仓时间越长的策略,这一项占比越大;隔夜或跨周持仓的策略,它可能比手续费还重。

回测里的正确做法是把结算时刻当成独立事件建模,按当时的费率和你的持仓名义价值计算,而不是折成一个日均百分比摊掉——摊掉之后,「专挑结算前平仓」这类策略的收益会被凭空造出来。结算机制见按周期结算的持仓费用

限价单在回测里必成交,实盘不一定

多数回测框架的默认假设是:价格触碰到你的限价,这笔就成交了。实盘不是这样——同一价位上有排队,先挂的先成交,价格擦一下就走,排在后面的人什么也没拿到。

这个差异对不同策略的杀伤力差别很大。趋势策略往往在价格穿过之后才成交,影响有限;而专门在极值位置挂单的策略,回测里那些漂亮的成交,恰恰是实盘中最不可能成交的那一批。

保守的处理办法有两个,选一个用:要求价格穿过你的限价而不只是触碰,才判定成交;或者干脆把限价单按吃单费率计费,当成市价单来跑。两种都会让回测变难看,而难看的那一版更接近实盘。

把参数翻倍,看曲线还站不站得住

参数填完之后跑一次翻倍测试:所有成本参数乘 2,别的不动,再跑一遍。

翻倍后的表现说明下一步
几乎没有变化成本参数很可能根本没生效先去查参数有没有被读到
形状不变,收益小幅下降成本不是主要驱动可以进入下一阶段验证
收益大幅缩水但仍为正对成本高度敏感降低频率或换更厚的标的再测
由正转负原来的收益主要来自成本假设这条策略不成立

第一行是最值得先查的一行。参数没生效、单位填错(把 0.05% 填成了 0.05)、参数被后面的配置覆盖,这几种情况都会表现为「改了没反应」,而它们看起来和「策略很稳健」一模一样。

翻倍测试只是一把粗筛,别把它当成精确的风险度量。它要回答的问题只有一个:这条曲线的存在,依不依赖你把成本填得足够客气。依赖,就说明你在回测里赚的是参数的钱。

本文所列费率与规则为编辑部按币安公开页面核对后的记录,平台可能随时调整,以你操作时页面显示为准。文中不构成投资建议。本站与 Binance(币安)没有隶属关系;通过本站邀请码注册不会让你多付费,详见商业披露