A股因子与回测验证
工作流
- 预注册因子公式、经济机制、方向、持有期、股票池、基准、再平衡和主要指标,区分探索性与验证性研究。
- 使用
china-market-data建立严格PIT数据契约:原始价、复权因子、财务公告日、历史行业/指数成员、ST/退市/停牌状态。AKShare当前快照不得替代历史股票池。 - 画清信号、决策和成交时间线;收盘信号不得假设同收盘成交,并处理T+1、涨跌停、停牌和不可成交。
- 划分开发、验证和最终测试,或执行滚动样本外;最终测试集不能参与参数选择。
- 建立佣金、印花税、过户/经手费、点差、冲击、滑点、换手和容量模型。
- 报告IC分布、分组单调性、覆盖率、换手、行业/市值暴露、相对基准、真实交易笔数、交易胜率及区间、回撤和尾部风险。
- 记录测试数量、相关因子、参数搜索和选择过程,处理多重检验。
- 做子期间、行业、市值、市场状态、参数邻域、延迟、成本、极端点、替代数据源和时序保留重采样。
- 给出
invalidated、inconclusive、research candidate、out-of-sample supported或production unverified状态。
可执行研究链
按预注册 → 数据快照 → 代码提交 → 运行 → 结果登记 → 样本外复核 → 衰减监控推进,不允许只保存最终图表:
- 先用
scripts/factor_registry.py登记假设、因子族、数据SHA-256、代码Git SHA、样本边界和初始状态。 - 将PIT清洗后的长表导出为CSV,至少包含
date,ts_code,factor,forward_return;forward_return必须从信号后首个允许成交时点开始,可选tradable显式排除当时停牌或不可成交样本。 - 运行
scripts/factor_validation.py input.csv --cost-bps <成本> --output report.json。脚本执行逐日截面Spearman IC、块自助区间、分组多空、真实换仓事件和成本后结果;库函数另提供purged walk-forward、BH-FDR、CSCV-PBO与未来数据扰动检查。 - 结果连同数据快照、参数搜索清单、失败实验和运行环境回写注册表。未经独立最终样本和真实数据链验收,状态最多为
research_candidate或production_unverified。 - 上线后监控覆盖率、IC分布、换手、容量、因子暴露和结构断点;衰减监控是新实验,不得事后改变原预注册门槛。
硬约束
- 不用固定IC、IR、Sharpe、回撤或胜率阈值单独宣告有效。
- 胜率和交易数来自完整开平仓,不用盈利日数量代替。
- IID随机重排不能冒充完整稳健性检验。
- 未运行的测试不得写成通过;Mock通过不等于真实Tushare链可用。
- 不宣称实盘收益,不下单。
- 脚本不替调用者推断涨跌停、停牌或T+1;这些字段必须由PIT数据链先构造,缺失时不能声称完成可交易回测。
输出契约
输出研究问题、数据契约、时点图、样本划分、成本、主要结果、稳健性、多重检验、偏差清单、状态和生产验证缺口。
需要详细闸门时读取references/validation-gates.md。