EVIDENCE GRADING · DEVIATION AUDIT
QuantsPlaybook 复现可信度:把「对不上」写成清单
这个项目最有价值的不是策略数量,而是它自己写下来的偏离评估——哪些结论能复现、为什么会偏离。本页把这些散落在各案例里的说明汇总成一页,并附一套 A 股回测审计清单。
- QuantsPlaybook 项目自带偏离评估的案例:RRG 行业轮动(5 条已知偏离 + 绩效对照表)。
- SAE 择时案例明确写「运行成功不等于精确复现研报」「主回测零费用与滑点」。
- 作者自己开的偏差 issue:#1 凸显因子 IC 与研报不同、#2 ICU 均线效果比研报差。
- 本站对任何案例都不作收益断言,只标注证据等级。
证据等级怎么分?
THE HONEST PART
QuantsPlaybook 为什么说「对不上」?项目自带的偏离说明
多数研报复现项目只贴成功案例。QuantsPlaybook 的 2025–2026 年新增案例反过来,把偏离写进了 README 和文档。
| 案例 | 项目自己写了什么 | 这句话的含金量 | 证据等级 |
|---|---|---|---|
相对旋转图RRG行业轮动 | 「QuantsPlaybook忠实复现研报的方法——RRG 公式、扩散指标、LP 优化、回测口径逐条对齐……但回测数字不等同研报」;「请当作『研报方法的可复现实现 + 教学 demo』,不要当作可直接使用的策略或已验证的 alpha」 | 把「方法可复现」与「结论可引用」明确分开,并给出绩效对照表 | ① 官方声明 |
基于稀疏自编码器的指数择时 | 「运行成功不等于精确复现研报,单次结果也不能证明样本外稳定性」;「网络结构、特征配方和若干参数属于复现假设」 | 公开承认哪些是假设而非研报原文,这是复现类文档最稀缺的表述 | ① 官方声明 |
| 同上(口径差异) | 「notebook 分年绩效用几何年化收益/年化波动计算 Sharpe;analyze.performance 的 Sharpe 采用算术均值口径,两者不能混作同一个统计量」 | 同一项目里两套夏普口径并存的坑,被作者自己点出来 | ① 官方声明 |
基于隔夜与日间的网络关系因子 | 「qlib 不可用,使用模拟数据替代」 | 提醒读者:代码跑通与结果有效是两件事 | ① 官方声明 |
基于稀疏自编码器的指数择时(回测假设) | 「T 日信号在 T+1 收盘成交,主回测使用 vectorbt 原生账户,零费用与滑点」 | 明确写出未计入成本——这直接影响结论强度 | ① 官方声明 |
QuantsPlaybook 本站态度:这些自述不削弱项目的价值,反而说明作者知道边界在哪。但读者必须先看到这些句子,才不会被其它渠道的「100+ 策略全部可用」误导。
DECLARED DEVIATIONS
RRG 案例有哪些已知偏离?五条说明与审计模板
这是全仓库最完整的一份偏离说明。它给出的对照结构,可以直接套用到你自己的复现上。
| # | 偏离项 | 研报口径 | QuantsPlaybook 口径 | 为什么改不了 |
|---|---|---|---|---|
| 1 | 回测窗口 | 2018-12-28 起,7.3 年(含 2019、2020 两个大年) | 快照数据自 2019-11 起、Notebook 自 2022-09 起 | 快照固定;窗口少了弹性最高的两年 |
| 2 | 扩散指标的加权口径 | 研报 §2.2 用自由流通市值加权 | 快照 $mv 是流通市值(工行等国企流通市值远大于自由流通) | 「tushare 无自由流通字段,无法就地修」 |
| 3 | ETF 持仓暴露 | 研报很可能用 PCF 申赎清单(每日全持仓) | 一年约 8 个月只见前十大持仓(Q1/Q3 季报),换仓日暴露矩阵行和约 0.5 | fund_portfolio 接口给不了全持仓,导致行业上限约束半失效 |
| 4 | 生存偏差 | 研报候选池含当时存在、现已退市的 ETF | 快照 fetch_etf_meta(only_listed=True) 只保留在售 ETF | 退市 ETF 未纳入快照 |
| 5 | 候选池口径 | 研报限「行业和主题 ETF」 | 取全部非 QDII ETF 靠打分剔除;etf_meta 无行业/主题标签 | 标签字段缺失,无法严格按研报口径筛 |
| 策略层 | 研报 年化 / 夏普 / 最大回撤 | QuantsPlaybook 年化 / 夏普 / 最大回撤 | 差异解读 |
|---|---|---|---|
| ETF 轮动 base(每行业 ≤ 1/k) | 21.51% / 0.80 / −34.98% | 19.9% / 0.67 / −17.8% | 接近(年化差约 1.6 pp);回撤更小是因为窗口避开了 2022 年大熊 |
| ETF 轮动 unconstrained | 31.53% / ~1.0 / −33.33% | 21.9% / 0.78 / −34.9% | 差约 10 pp,主要来自窗口 + 数据口径,而非算法 |
本站引用这两张表的目的不是比较收益高低,而是演示「一份能被检验的复现说明」长什么样:把差异拆成可归因的条目,并说明哪一条是能修的、哪一条是数据源先天限制。
AUTHOR'S OWN QUESTIONS
作者自己提了哪些偏差 issue?连维护者也在问原因
这两个 issue 比任何第三方评测都更有说服力,因为它们是项目内部提出的。
| Issue | 状态 | 标题 | 它说明了什么 |
|---|---|---|---|
| #1 | open | 「为何凸显因子的 IC 报告和几份金工报告不同」 | 因子复现的 IC 结果与研报不一致——这类差异通常来自股票池、极端值处理、中性化方式与样本区间 |
| #2 | open | 「为什么 ICU 均线采用 5 日回看日期比原研报效果要差」 | 同一指标在不同参数下表现差异明显,说明参数敏感性高、原研报参数可能经过样本内优选 |
| #11 | closed | 「对于回测逻辑的一个小问题」 | 回测实现细节曾收到质疑(已关闭,但不改变「实现细节会影响结论」这一事实) |
| #18 | closed | 「README 文件关于『技术栈-核心框架』描述错误」 | 连 README 的技术栈描述都曾被发现写错——本站因此对 README 的所有声明都做了逐条核对 |
配套的其它 issue:#6「行业指数顶部和底部信号 代码不全」、#9「C-VIX 缺少 prepare_data」、#7「识别圆弧底」均已关闭,但都指向同一类问题——案例完整性参差不齐。建议跑之前先在 issue 里搜该案例名。
A-SHARE BACKTEST AUDIT
QuantsPlaybook 的 A 股回测要审什么?十二个风险点
这份清单是把项目里出现过的偏离项,与 A 股交易制度的固有难点合并后的结果。用它可以自查任何一个案例。
| 审计项 | 典型表现 | 对结论的影响 | 在 QuantsPlaybook 里的具体情况 |
|---|---|---|---|
| 未来函数 | 用当日收盘价算出信号、又用当日收盘价成交 | 收益被系统性高估 | SAE 案例明确写了「T 日信号在 T+1 收盘成交」,属处理得比较好的;多数老案例未说明 |
| 样本内 / 样本外 | 用全样本选参数、再在全样本报告结果 | 结论不可外推 | SAE 案例用 2020–2025 作样本外区间、10 个 seed 取平均,是项目里较严谨的一例 |
| 幸存者偏差 | 股票池只取「现在还在的」成分股 | 系统性高估收益(退市/被剔除的票被排除) | RRG 快照 only_listed=True;成分股是否按历史时点还原,多数案例未说明 |
| 涨跌停与 T+1 | 信号次日开盘买入,但当日已涨停、根本无法成交 | 小市值策略收益虚高 | 项目未见统一处理;相关常识可参考本机技能与公开资料 |
| 停牌处理 | 停牌期间用上一日价格继续计算 | 波动被低估、换手被低估 | 依赖数据源口径;自建库场景需自己保证 |
| 交易成本与滑点 | 零手续费、零滑点回测 | 换手高的策略收益被显著高估 | SAE 主回测零费用与滑点(作者已披露);RRG 为「换仓日收盘出信号、次日开盘成交」 |
| 复权方式 | 前复权 / 后复权 / 不复权混用 | 因子值与收益计算错位 | 实测同一仓库内两种口径并存(日 K 用后复权、算市值用另一套) |
| 成分股时点 | 用今天的成分股回测过去 | 指数增强类结论失真 | RRG 的 ETF 暴露矩阵依赖季度持仓,只能拿到前十大 |
| 多重检验 / 参数挖掘 | 试了很多参数后只报告表现突出的那组 | 夏普虚高 | ICU 均线 issue 正是参数敏感性问题的体现 |
| 容量 | 小市值 / 低流动性标的的策略规模上限极低 | 实盘不可行 | 项目内未见容量分析 |
| 成本敏感性 | 没做手续费翻倍后的结果 | 无法判断策略的鲁棒性 | 建议自己加这一项——成本翻倍测试通常几行代码 |
| 数据区间代表性 | 只在牛市区间回测 | 结论不可迁移到熊市 | RRG 明确写了「窗口避开 2022 大熊」这一局限 |
怎么用这份清单
选一个案例,把十二项逐条打勾/打叉,打叉的地方去代码里找证据。打叉超过 3 项时,该案例的收益类结论就不要引用,只引用它的方法与实现。
项目自带的好样板
RRG 的五条偏离与 SAE 的「如何理解结果」两处,正好覆盖了窗口、口径、成本、样本外四类核心问题,可以直接当作自己写复现报告的模板。
本站的立场
本页不评价任何策略的收益高低,也不提供投资建议。判断标准只有一条:结论所依赖的口径,有没有被写清楚。
HOW TO READ A CASE
QuantsPlaybook 一个案例怎么读?从公式到能不能信
把上面的清单落成流程,读任何一个案例都可以按这五步走。
研报声称的核心公式是什么、声称的结果区间与基准是什么。预期输出:一张写了两行的纸条——「公式 X、区间 Y、基准 Z」。这两行是你后面所有判断的锚。
搜索 shift(、iloc[-1]、next 之类的写法,确认有没有用当日信息决定当日交易。预期输出:一句话结论——「T 日信号 T+1 成交」或「时点不明」。
看它怎么取数、用什么复权、股票池怎么来。预期输出:数据来源 + 复权方式 + 股票池三个词。拿不到其中任何一个,就把该案例降级为「只读方法」。
搜手续费、滑点、commission、slippage、样本外区间的写法。预期输出:成本假设(含「未计入」)+ 是否有样本外段落。
按本站口径写:方法可复现性(能否凭代码重跑)、结论可引用性(数值能否对外引用)、已知偏离(哪几条对不上、为什么)。三行写完,这个案例才算读完。
为什么值得这么做:项目自己的两个 open issue(#1、#2)都停在「结果对不上但我不知道为什么」这一步。按上面五步走,你至少能给出归因方向,而不是只能复述「有偏差」。
FAQ
QuantsPlaybook 复现可信度常见问题
QuantsPlaybook 复现的结果可信吗?
要分开看两件事。方法层面基本可信:公式、代码结构与回测框架都在仓库里,项目自带的偏离评估也说明方法是对齐过的。数值层面不能直接引用:RRG 案例自己写明「回测数字不等同研报」并列出 5 条偏离;SAE 案例写明「运行成功不等于精确复现研报」,主回测还是零费用零滑点。本站因此不对任何案例的收益数字作断言。
为什么同一份研报复现出来结果不一样?
最常见的四类原因,按影响从大到小:①回测窗口不同(RRG 少了 2019、2020 两个大年,年化直接差约 10 pp);②数据口径不同(扩散指标用流通市值还是自由流通市值);③成分股/持仓还原不足(只能用前十大持仓,导致约束失效);④成本与滑点未计入。这些在 RRG 案例的偏离说明里都能找到实例。
项目里有做过样本外验证的案例吗?
有,但不是全部。最清晰的一例是 基于稀疏自编码器的指数择时:明确写「中证500、2020–2025 样本外区间、10 个 seed、每年独立训练后平均预测」,并提示「单次结果也不能证明样本外稳定性」。多数老案例未说明样本外设置。
「零费用零滑点」意味着什么?
意味着回测里的收益是未扣成本的理论上限。对换手低的择时策略影响有限,对高换手策略则可能把正收益算成负收益。看到这个说明时,正确做法不是否定该案例,而是自己加一组成本敏感性测试(例如手续费翻倍)再看结论是否稳健。
怎么判断一个案例的结论能不能引用?
用本站的五步法:确认公式、确认信号与成交时点、确认数据口径、确认成本与样本外,最后写三行结论。如果「数据口径」或「成交时点」这两步里有一项拿不到答案,就把该案例降级为「只读方法与实现」,不引用其数值。
站内有收益数字吗?
没有。本站不提供任何收益、胜率或绩效断言,也不转载 README 里那张无来源的「策略表现概览」表。你会看到的具体数字只有两类:①仓库事实(文件数、star、依赖版本、报错原文);②项目自己文档里写明的对照数据,且标注了它的口径与局限。
这些结论的核验等级是什么?
本站所有结论都标在三档之内:①官方声明(README/案例文档原文)、②源码与元数据核验(读代码、查文件树与 PyPI)、③本机实测(依赖解析实测、截图采集)。本站没有跑通任何案例——没有 JQData / TuShare Pro 付费权限,因此不把「装得上」写成「跑得通」,也不把「能跑通」写成「结论成立」。