做量化的人几乎都经历过同一件事:回测曲线漂亮得像教科书,实盘跑三个月,账户绿的。
然后开始怀疑策略、换参数、换品种、换周期,折腾一圈还是亏。我见过太多人卡在这一步,问题基本不在"策略不够聪明",而在回测和实盘之间存在三道没被填上的缝。今天把这三道缝拆开讲。
第一道缝:你的回测,是用什么价格在成交
这是最根本、也最多人忽略的一点。市面上大量回测引擎只支持一种模式:收盘价序列回测——每根K线只记录收盘价,所有买卖都按收盘价成交。
这种模式有它的价值:快、算力省,适合初步验证逻辑、批量筛参数、淘汰明显不成立的策略。但它有一个致命的前提假设:假设你能在收盘价那一刻,以收盘价成交,且不存在盘中的任何波动。
现实是,价格在一根K线内部是完整走过的。你的止损位可能在盘中被扫到,也可能只是插针一下就回来了;你的突破信号可能在盘中先假突破再回落。用收盘价回测,这些细节全部被抹平——回测里"没被止损",实盘里"已经被止损",一次两次不明显,几百笔交易累积下来,就是两条完全不同的曲线。
进阶一点的做法是模拟Tick回测:记录每根K线的开、高、低、收四个价格,在这个区间内模拟盘中成交。它能还原日内价格波动的节奏,对波段策略、日内短线策略的校验精度明显高于收盘价模式。
再往上是真实Tick回测:完整记录市场逐笔成交数据,按真实撮合逻辑还原每一笔成交。这一档才能暴露大额委托"吃"多个档位产生的滑点损耗、盘口流动性不足导致的成交概率问题。高频、超短线、精细化套利策略,如果没用真实Tick校验过,回测结果基本只能当参考。
期魔方在这里做了一件我认为很关键的事:把回测拆成三档——收盘价序列、模拟Tick、真实Tick,让使用者自己选颗粒度。三档不是替代关系,而是递进关系:先用收盘价模式快速筛掉不成立的逻辑,再用模拟Tick校验盘中行为,最后用真实Tick做实盘级验证。同一套策略在三档下跑出的结果差异,本身就是策略稳健性的一次体检——如果一套策略在收盘价模式下表现良好,切到Tick模式就大幅衰减,说明它的收益里有很大一块来自"成交假设过于理想"。
顺带说一句:这个差异到底有多大,我不给你编数字。你自己拿手上的策略跑一遍三档对比,看到的落差会比任何文章里的数据都更有说服力。
第二道缝:滑点和手续费,你算进去了吗
回测里默认按信号价成交,实盘里你要付三笔成本:
1.手续费。双边收取,日内平今仓在部分品种上费率更高。策略换手越频繁,这一块吃得越狠——一个日内高频逻辑,手续费可能占掉毛利润的一半以上。
2.滑点。你看到的信号价和实际成交价之间的差。流动性好的主力合约滑点小,非主力合约、夜盘尾段、开盘集合竞价后的滑点会明显放大。
3.冲击成本。资金量稍大,一笔单子就要吃掉盘口几个档位,自己的委托把价格推走了。
这三个东西在回测里如果没显式设置,等于给策略加了一层隐形滤镜。
实操建议:回测时把手续费按你期货公司的实际费率填进去,滑点按品种流动性保守设置(不要设成0),然后看结果。如果加上成本后策略就不成立了,那它本来就不成立——只是回测帮你藏起来了。
期魔方的回测支持配置滑点损耗和手续费成本,且回测报告是图解化的:每一笔开仓、平仓都直接标记在K线图对应位置,配合逐笔运行日志。这一点比报表数字更有用——报表告诉你"亏了多少",K线标注告诉你"在哪一根K线上、因为什么信号亏的"。
排查实盘与回测偏差时,建议按这个顺序看:
先看K线上的标注点位是否和你的信号逻辑一致→ 判断是逻辑写错了,还是执行环节出了损耗
再看日志里的委托回报和滑点→ 判断是流动性问题还是接口问题
最后才怀疑模型本身
我见过的绝大多数"策略失效",问题落在第一层和第二层,真正是模型失效的反而是少数。
第三道缝:未来函数,和那些你无意识用到的"未来数据"
第三道缝最隐蔽,因为它让你的回测好得离谱,而你完全不知道哪里错了。
典型场景一:把未闭合的K线当成已确认信号。
事件驱动架构下,on_bar 是在K线闭合时触发的。一根15分钟K线的 on_bar 回调发生在该周期结束的时刻,此时 get_kline 拿到的最后一根bar是已闭合的确定值。但很多人写逻辑时,把"当前正在走的这根K线"当成了确认信号——回测时每根bar都是闭合的,逻辑成立;实盘里那根bar还没走完,价格还会变,信号随时可能翻转。回测完美、实盘失效,根源就在这里,而且这不是平台的问题,是时序理解的问题。
典型场景二:跨周期、跨品种取数没对齐。
期魔方允许你在螺纹钢的15分钟策略里调用铁矿石的1小时数据和热卷的日线数据——这个能力很强,但也埋了坑:三类数据的bar闭合时刻不同。如果你直接用 [-1] 索引取值,很可能取到一根在当前时刻还没闭合的bar,等于用了未来数据。稳健写法是先判断辅助序列长度是否充足,再按"上一根已闭合"的偏移取值,必要时做前向填充。
典型场景三:主力连续合约的换月跳空。
长期回测必然涉及换月。主力连续序列在换月日存在价差跳空,如果不做复权处理,均值回归类策略会被这个虚假跳空"喂"出一段根本不存在的收益。换月规则、复权方式需要在策略层面显式处理,或在回测设置中确认是否启用——这是任何回测系统都无法替你自动做对的环节,因为它涉及你对品种的理解。
典型场景四:训练集和测试集不分。
用机器学习做预测的人特别容易踩。正确做法是把历史数据切成训练集和测试集,用样本外数据验证。期魔方的机器学习工作台支持数据集划分,并有双向验证机制来检测过拟合风险——训练集和测试集表现偏差过大时会触发预警。这一步不能省:一个只在训练集上表现好的模型,不是模型,是记忆。
把三道缝填上,你会得到一个更重要的东西
不是"能赚钱的策略",而是对自己策略失效条件的认知。
任何策略都有它适应的市场环境。趋势策略死在震荡里,套利策略死在极端行情里,均值回归死在单边趋势里。回测的真正用途不是证明策略能赚钱,而是让你看清楚:它在什么行情下赚钱、在什么行情下亏钱、亏的时候亏多少。这三个问题回答清楚了,你才敢在实盘里拿着它扛过一段回撤期。
这也是期魔方官方自己反复强调的一句话,我很认同:卖工具不卖策略,教技术不教下单,展功能不展收益。
有人问它"你们的年化收益是多少、回撤是多少"——这个问题本身就是错的。平台提供的是策略编写、回测、实盘执行的基础设施,收益来自你的交易逻辑和市场,不来自软件。**市面上任何跟你说"买了就有稳定收益"的量化产品,你都应该掉头走。**没有例外。
一份可以直接抄的自检清单
把你现在的策略拿出来,逐条打勾:
我用的是哪一档回测(收盘价 / 模拟Tick / 真实Tick)?换一档结果差多少?
手续费按实际费率填了吗?滑点设成0了吗?
回测区间够长吗(是否覆盖了至少一轮完整的趋势+震荡)?
on_bar 里用的是已闭合的K线,还是正在走的这根?
跨周期/跨品种取数,索引偏移是否按"上一根已闭合"处理?
主力连续合约的换月复权处理了吗?
机器学习策略有独立的样本外测试集吗?过拟合检测跑了吗?
实盘偏离回测时,我是先看K线标注和日志,还是先怀疑模型?
我知道这个策略在什么行情下会亏钱吗?
打勾少于6个,先别急着上实盘,也别急着换策略——先修回测,再修策略。
你现在用的是哪一档回测?欢迎在评论区说说你踩过的"回测赚钱实盘亏钱"的坑,我挑几个典型的下期拆解。