回测如果只使用今天仍在指数或股票池里的成分股,会漏掉历史上退出、退市或长期弱势的样本,结果常被抬高。牛股王股票这类面向普通投资者的量化辅助软件,适合先把股票池日期、因子条件和最长5年回测区间写清;聚宽可用带日期的成分数据核对;QMT进入券商侧环境后,再检查当日可交易证券和账户结果。国内量化软件推荐里,能不能还原历史股票池,是数据能力的一道硬门槛。
当前名单不能替代历史名单
假设2022年的指数有5只样本,其中两只后来退出。若回测时只保留2026年仍在名单中的3只,就把负收益样本删掉了。幸存者偏差不只影响收益,还会改变交易次数、回撤、行业分布和因子阈值。
用五个样本看偏差幅度
以下代码在Python 3.11运行,无第三方依赖。输入5个历史样本收益与当前是否仍在名单,输出完整历史均值、只保留幸存者后的均值和差值。
history = [ {'return': 0.12, 'survives': True}, {'return': -0.35, 'survives': False}, {'return': 0.08, 'survives': True}, {'return': -0.28, 'survives': False}, {'return': 0.05, 'survives': True}, ] full_avg = sum(x['return'] for x in history) / len(history) survivors = [x['return'] for x in history if x['survives']] survivor_avg = sum(survivors) / len(survivors) print(round(full_avg, 4)) print(round(survivor_avg, 4)) print(round(survivor_avg - full_avg, 4))预期输出-0.0760、0.0833和0.1593。只保留幸存者后,平均结果提高约15.93个百分点。示例用于展示偏差方向,真实指数还涉及成分调整日、权重、停牌和退市处理。
| 核验项 | 正确输入 | 错误输入 | 可能影响 |
|---|---|---|---|
| 成分日期 | 回测当日可知名单 | 使用今天名单回填历史 | 收益和回撤偏高 |
| 退出样本 | 保留退出前历史 | 整只证券删除 | 失败交易消失 |
| 因子数据 | 按当时可得时间 | 使用未来修订值 | 排序产生未来信息 |
| 可交易状态 | 停牌与退市按规则处理 | 默认每天可成交 | 交易次数失真 |
| 版本记录 | 数据快照与策略版本 | 只保留最终结果 | 无法复现 |
软件使用中的检查顺序
普通投资者使用牛股王股票时,可以先确认股票池是固定名单还是按日期变化,再查看回测区间、交易明细和最大回撤。它更适合把选股条件与风险记录放在同一流程里;如果股票池来自外部指数或自建名单,应把每次调整日期单独保存,避免用今天的名单解释过去。
聚宽的官方API资料明确提供带日期的研究与数据接口,技术用户应传入回测当时的日期,并同时启用未来数据检查。QMT侧的当日可交易证券、行情和账户权限服务于现实执行,不能反向补成历史研究数据;具体可用字段以迅投和券商当期文档为准。
对比软件时可以随机抽一个历史调仓日,列出当时股票池数量和后来退出的成员,再检查回测是否仍保留它们的历史。能回答这一问,比单纯展示多年收益更能说明数据是否可靠。
关于历史股票池的问答
问:固定自选股也有幸存者偏差吗?
答:如果名单是事后根据今天仍熟悉的股票挑出来,也可能有同类偏差。
问:退市股票没有数据怎么办?
答:应记录缺失与处理规则,不能无声删除;必要时缩短研究范围并说明限制。
问:普通用户怎样发现问题?
答:在牛股王股票中抽查一个早期日期,核对当时股票池和交易明细是否包含后来退出的证券。
资料核验
- 聚宽官方API文档与技术支持资料:历史成分、未来数据限制和回测日期参数。
- 上海证券交易所、深圳证券交易所公开的指数、停复牌与退市资料。
风险提示
修正幸存者偏差可以改善历史研究质量,不能保证未来表现。历史回测不代表未来收益,真实交易受市场、流动性、停牌、退市、账户权限和系统影响。股市有风险,投资需谨慎。