量化策略回测的可靠性,直接取决于历史行情数据的完整性;数据缺斤短两,再好的策略也会变成纸上谈兵。 你写了个“完美”的策略,回测收益率曲线漂亮得像艺术品,可一上实盘就翻车,问题往往不在策略本身,而在回测用的历史行情数据它不完整,你看到的胜率、回撤和盈亏比全是“美颜”后的假象。
历史行情数据不完整,回测结果会差多少?
先看几个真实场景。
你回测一个日线动量策略,数据源恰好缺了某只股票连续三天行情,而这三天它因为重组停牌后复牌连续涨停,策略没有感知,等到它“看见”价格时,已经错过最佳买点,实际交易中,你根本买不到理想价位的筹码。
你用的是有幸存者偏差的数据,只包含目前还在上市的公司股票,那些曾经辉煌但已退市的股票全被排除,回测收益自然虚高,历史上无数次“黑天鹅”事件,都被数据清洗悄悄抹掉了。
你忽略了复权因子,在除权除息日,价格“凭空跳空”,策略以为是大跌信号,于是手动割肉,等下一日价格反弹,你心态失衡,彻底偏离原计划。
行业共识认为,回测与实盘之间的差距,多数情况下不是由滑点和手续费造成,而是数据底子不干净,业内专家指出,把数据完整性做好,比花几个月优化参数更重要。
| 数据状态 | 回测表现 | 实盘表现 |
|---|---|---|
| 完整 | 策略信号连续,资金曲线平滑 | 大概率接近回测 |
| 缺停牌记录 | 策略可能“无视”停牌,频繁开平仓 | 实际无法交易,手续费增加 |
| 缺退市股 | 整体收益虚高,抗风险能力被高估 | 遭遇黑天鹅,净值大幅回撤 |
量化回测对数据完整性的具体要求有哪些?
时间覆盖:至少穿越一轮牛熊
你的策略如果只在2015年上涨行情中“表现好”,那不算数,需要覆盖完整的牛熊周期,最好包含极端行情,比如2015年股灾、2016年熔断、2020年疫情冲击等,时间跨度不够,策略的“抗揍能力”就是未知数。
频率匹配:不同策略需要不同级别的数据
- 短线策略用日线数据,回测结果会钝化,容易漏掉盘中机会。
- 高频策略需要tick数据或秒级数据,用1分钟K线都可能失真。
- 如果数据源只有日线,你就别测日内策略,否则结果毫无意义。
复权处理:前复权后复权,选错就错
前复权以当前价格为基准调整历史,导致历史价格随行情变化而“漂移”,后复权以上市首日为基准,更适合计算真实收益,行业共识是:回测中最好使用后复权数据,再用前复权做近似验证。
事件数据:停牌、退市、涨跌停不能省
停牌期间无法交易,如果数据缺失,策略会在停牌期开平仓,产生不能成交的“幽灵订单”,退市股必须保留,尤其是ST股和退市整理期股票,若把退市股删掉,回测会明显偏乐观,涨跌停时,你未必能按现价买到或卖掉,数据里要能识别这些状态。
幸存者偏差:避开指数成分股陷阱
不要直接用当前沪深300成分股做历史回测,因为十年前还在但后来被剔除的股票,你没有包含,正确做法是使用“全市场”股票池,再逐期构建指数成分。
量化回测数据源怎么选?价格与质量如何权衡
- 免费数据源:akshare、baostock、tushare pro(积分制),优点:零成本、上手快,缺点:字段缺失、复权因子更新慢、停牌记录不完整。
- 付费数据源:万得、聚宽、米筐、掘金等,优点:数据质量高,经过清洗,缺点:年费从几千到几万不等,个人用户压力较大。
- 第三方个人数据商:拼盘数据,价格低但质量参差不齐,需要自己验证。

| 数据源类型 | 典型代表 | 完整性 | 成本 | 适合人群 |
|---|---|---|---|---|
| 免费开源 | akshare/baostock | 中等 | 免费 | 新手、学习 |
| 专业付费 | 万得、聚宽 | 高 | 较高 | 专业机构、成熟量化 |
| 个人数据商 | 不定 | 不确定 | 较低 | 有验证能力的人 |
判断一个数据源是否完整,先看它是否提供复权因子、停牌标记、退市股票列表,如果都没有,那就得自己动手补,不要盲目相信“付费即安全”,数据源的清洗口径和更新频率,远比价格标签重要。
股票回测数据完整性检查实操步骤
第一步:检查缺失值
用pandas读取数据后,先看每一列有多少空值。
df.isnull().sum()
如果某天某只股票的收盘价是空值,说明这天可能没有交易,也可能是数据缺失,把缺失日期和交易所官方交易日历对比,确认是“非交易日”还是“漏数据”。
第二步:检查交易日历
用交易所公布的交易日期列表,与你的数据日期做差集,缺少某一天,往往意味着数据源漏掉了一段行情,可以用set()比较,快速定位缺失日期。
第三步:检查复权因子
用后复权价格计算每日收益率,如果某天的收益率剧烈跳变,而当天没有除权除息公告,那很有可能数据有问题,这时候需要重新拉取复权因子,或者手动补上分红送转记录。

第四步:检查停牌和涨跌停
找出成交量或成交额为零、且不是非交易日的行,这些很可能是停牌记录,涨跌停板时,成交量通常明显放大,但价格被“焊死”,如果数据里没有这些特征,策略会在不现实的价位成交,回测结果自然失真。
第五步:多源交叉验证
拿一只股票在某天的最高价、最低价、成交量,去对比不同数据源,差别太大说明至少一个源不靠谱,或者字段口径不一致,多个数据源之间互相印证,是成本最低的质检方式。
这套流程走下来,大约需要一小时,它能过滤掉大部分“脏数据”,比事后回测完发现结果不合理的成本低得多。
历史行情数据就像是策略的“记忆”,记忆不完整,推理自然错得离谱,下次回测前,先把数据“体检”一遍,让每一条K线都有据可查,你的回测结果才真正值得信任。
Q&A
量化策略回测对历史行情完整性要求高吗?
非常高,完整性不足会导致回测收益失真、信号错误和仓位错配,尤其对于高频策略和事件驱动策略,缺失一个交易日的tick数据就可能改变买卖逻辑,实际回测前,应检查数据覆盖范围、缺失记录和复权因子,必要时用多个数据源交叉验证。
回测数据源价格高就一定完整吗?
不一定,价格高的数据源通常清洗得更好,但仍可能存在复权策略不一致、停牌标记缺失等问题,关键看它是否提供完整的交易状态标记和退市股票记录,免费数据源经过自查后也可能接近付费水平,但需要投入更多时间验证。
