同一策略,两个平台回测对不上?排查指南
同一策略,两个平台回测对不上?排查指南

做跨平台策略移植这几年,被问得最多的一类问题就是:「同一个策略,我在A平台跑年化28%,搬到B平台只剩12%,是不是代码写错了?」
我的回答每次都一样:先别急着改代码,大概率不是策略的事。
两个平台结果对不上,原因无非两大类:数据不一样,或者算法不一样。而排查顺序是死的:
先对齐数据,再对齐算法。数据不一致时,讨论算法没有意义。
这是全文最重要的一句话。记住它,能省掉大量无效折腾。
第零步:把原始K线拉出来对一遍

在怀疑任何算法之前,先确认两个平台拿到的是不是同一份行情。
选一段确定的时间范围,同一标的、同一周期,对比五个字段:开盘价、最高价、最低价、收盘价、成交量;期货再加一个持仓量。两个平台各导出一份CSV,逐行比对。
三个细节别漏:
- 起始和结束日期是否一致——有的平台会截掉首尾不完整的K线,一来一回就少几根
- K线总数是否一致——数量不一样,说明中间有缺K或补K
- 别用复权数据对——后面会说,复权本身就是差异源
如果原始数据就不一致,恭喜,问题定位在数据层,直接看下面三个元凶,代码一行都不用查。如果数据完全一致,跳到算法部分。
元凶一:复权方式不一样

股票分红送配会让价格出现跳空,复权就是抹平这些跳空的手段。麻烦在于,各平台默认的复权方式不一样:
- 不复权:原始价格,真实但有跳空,技术指标在除权日失真
- 前复权:以最新价为基准往回调整,当前价格真实,适合看图
- 后复权:以历史某日为基准向后调整,适合算长期收益
两个平台一个默认前复权、一个默认不复权,同一段行情就是两条线,策略信号自然分道扬镳。
更隐蔽的是:即使都叫”前复权”,算法也可能不同。有的平台除权日当天一次性调整;有的把影响分摊到前后若干天;多次分红送配的累积计算还有精度差异。名字对上了,数没对上。
排查建议:先用不复权数据对比,把复权这个变量彻底排除,确认平台裸数据一致后,再逐级打开复权对比。
元凶二:期货主力合约的合成规则不一样

期货每个品种有一堆到期合约,平台提供的”主力连续”是合成的,而各家合成规则完全不同:
- 换月依据:按成交量最大换,还是持仓量最大换,还是两者结合?
- 换月时机:盘中实时切,收盘后切,还是提前N天切?
- 换月处理:保留换月跳空,还是做价差平滑、比例复权?
加权指数同理:等权还是成交量加权?新合约何时纳入?每一条都能让曲线不一样。
排查建议:别用主力连续对数据,改用具体月份合约(比如IF2412、RU2501)对比。具体合约是真实成交出来的,没有合成规则差异。具体合约一致、主力连续不一致,那就是平台合成规则的事,不是你的问题。
元凶三:分钟K线的切割规则不一样

日线以上的周期没什么争议,分钟线就不一样了。同样是3分钟K线:
平台A从09:00开始切:09:00、09:03、09:06…… 平台B从09:01开始切:09:01、09:04、09:07……
起点错一根,后面每根K线的内容都不一样,指标自然全错位。
时段处理的差异更常见:
- 夜盘归属:夜盘行情算”当天”还是”次日”?
- 集合竞价:开盘竞价单独成一根K,还是并进第一根?
- 午间休市:休市时段填空K线还是直接跳过?
排查建议:对比两个平台第一根K线的时间戳和K线总数。如果涉及分钟级,最省事的路是先用日线排查,把切割问题隔离掉。
数据一致了,再查算法

确认两边的OHLCV一根不差之后,才轮到算法。这一层的头号坑,是均线家族。
很多人以为”MA就是均线”,但叫法相近的均线,算法完全是三回事:
- MA / SMA:简单移动平均,N个周期等权重,对近期价格不敏感
- EMA:指数移动平均,越近的数据权重越大,反应快
- WMA:加权移动平均,线性递增权重,介于两者之间
- KAMA:考夫曼自适应均线,根据市场效率自动调平滑系数
在A平台写MA(CLOSE, 20),在B平台写EMA(CLOSE, 20),结果必然不同。更坑的是,即使都叫EMA,初始种子值的处理也可能不同——有的用前N个价格的均值起步,有的直接用第一个价格,开局阶段就是两条线。
排查建议:对比指标时,自己用代码实现一遍算法,两边跑同一个实现,别依赖平台内置函数。
其他几个高频算法陷阱,一并列出:
- 标准差:样本标准差(除以N-1)还是总体标准差(除以N)?布林带直接受影响
- 收益率:简单收益率还是对数收益率?累计方式完全不同
- 年化收益:A股约242个交易日,美股约252,年化系数不一样
- 夏普比率:无风险利率取多少?用总收益还是超额收益算?
- 回测引擎:撮合规则(现价成交还是下根K线开盘价成交)、滑点、手续费,任何一项不同,回测结果都会漂
六步排查流程

按顺序来,不要跳步:
- 用不复权日线对比原始OHLCV——不一致,查数据源
- 一致后,对齐复权方式,对比复权后数据
- 涉及分钟级,对比K线切割规则和时段归属
- 确认指标算法完全一致——MA ≠ EMA ≠ SMA,别混用
- 检查内置函数的参数默认值和边界处理
- 最后查回测引擎:撮合、滑点、手续费
快速自查清单
- 两个平台的标的代码指向同一个合约?
- 复权方式一致?(建议先用不复权排查)
- 期货用的是同一类合约?(具体合约 vs 主力连续)
- K线周期和切割起点一致?
- 指标名称和算法完全对应?(MA ≠ EMA ≠ SMA)
- 指标参数(周期N等)相同?
- 数据起始日期一致?
- 手续费、滑点设置一致?
八条过一遍,绝大部分”不一致”当场就能定位。
最后说句实话:跨平台结果完全一致是例外,不一致才是常态。排查的目标不是强行让两边一样,而是搞清楚差异来自哪里——是数据口径问题,就统一口径;是算法实现问题,就对齐算法。搞清楚之后,你会同时理解两个平台的脾气,这比”两边跑出同一个数”值钱得多。
碰到实在对不上、又吃不准哪层出问题的,微信找我:traderByAI,备注「公众号」,帮你把两个平台的数据和算法逐层对一遍。
💼 AI 量化培训 · 策略生成 · 代码代写 —— 微信
traderByAI联系。