运行环境

  • Windows 11 · Python 3.14 · 本地后复权日线 parquet

运行前准备

  • Python 3.11+
  • pandas / numpy
  • A 股日线数据(自备 parquet / CSV,或用 eltdx 现场取数)
  • 至少 24 个完整月度

真实样例

下面是在真实数据上跑出来的原始产物:可切换查看 input.md 与 output.md,不是效果图。

安装说明
任务句帮我把「20 日反转 × 换手放大」这个因子做一次体检,看看能不能进策略。

因子体检 · 20 日反转 × 换手放大

结论

档位:C(六道门禁过 0 / 6,排他结论:独立)

一句话:这个组合赚不到钱:20 日反转在池内只有微弱正 IC,换手放大同期是反向暴露,两者等权相加后互相抵消,六道统计门禁一道都没过。

指标

指标数值
RankIC 均值-0.0005
IC 均值(Pearson)+0.0016
ICIR-0.022
t 值(20 日块)-0.08
IC 胜率51.6%
十分位多头年化(无成本)-1.80%
十分位多头年化(佣金+印花)-3.34%
十分位多头年化(再加滑点)-6.68%
涨停拦截率0.4%
多头换手率(每期)71.8%
与 20 日反转基准的相关性+0.487(独立)

逐年 RankIC:2022 -0.0095 · 2023 -0.0080 · 2024 -0.0166 · 2025 +0.0169

十分位组年化

组年化累计
D1+1.67%+7.98%
D2+4.61%+23.24%
D3+8.17%+43.87%
D4+4.66%+23.47%
D5+0.38%+1.78%
D6+2.55%+12.36%
D7+2.73%+13.29%
D8+6.09%+31.50%
D9+8.63%+46.73%
D10-1.80%-8.09%

口径

  • 股票池:中证500 逐年 PIT(Y 年用 Y-1 年末名单,每期约 500 只)
  • 区间:2022-01-04 ~ 2026-08-19,共 1121 个交易日、平均每期 494 只
  • 调仓周期:H = 10 个交易日;因子 t 日收盘计算,远期收益 t → t+10 收盘
  • 数据源:本地后复权日线 parquet(东财口径,数据截至 2026-09-08)
  • 成本:佣金万 2 双边 + 印花税千 0.5;滑点档再加双边各 0.1%
  • 因子定义:CSRank(-ret20) + CSRank(vol5/vol60),H=10 日调仓

门槛逐项

门槛阈值实际结果
G1 RankIC 绝对值>= 0.030.0005不过
G2 ICIR 绝对值>= 0.300.022不过
G3 t 值(20 日块)>= 40.08不过
G4 IC 胜率>= 58%51.6%不过
G5 逐年同号每个完整年度同号2022 -0.0095 / 2023 -0.0080 / 2024 -0.0166 / 2025 +0.0169不过
G6 头部不塌陷D10 >= D8D8 +6.09% / D10 -1.80%不过

排他

与基准库中的 20 日反转 的截面 Spearman 相关性为 +0.487,|ρ| = 0.487 < 0.7,判定 独立。

也就是说,它并没有被基准因子完全代表;问题是它自己也没带来稳定信息,而不是「换了个马甲」。

拆开看:钱被哪一半吃掉了

组件RankIC 均值IC 胜率
20 日反转(单项)+0.034655.3%
换手放大(单项)-0.035856.7%
等权组合-0.000551.6%
  • 反转单项的 RankIC 为 +0.0346,勉强越过 G1 的 0.03 门槛,但 IC 胜率只有 55.3%,仍达不到 58% 的硬门槛。
  • 换手放大单项的 RankIC 为 -0.0358,方向为负:在这段样本里,放量更像是拥挤度而不是趋势确认。
  • 两项等权相加后 RankIC 归零。组合没有创造新信息,只是把两个方向相反的暴露互相抵消。

解读

20 日反转表达的是「短期超跌反弹」:在流动性尚可的中盘股里,跌多了会有资金回补。换手放大表达的是「关注度与筹码交换」:放量既可能是启动,也可能是出货;在 2022–2026 的中证500 样本里,后者的权重更大。

两者相乘/相加并不能自动变成「缩量超跌」这类更精确的条件。真正值得继续验证的方向是 条件化:只在换手未放大时取反转暴露,而不是把换手当成同权加分项。

使用建议

  • 这个等权组合不建议入库:六道门禁 0/6,且拆解后没有稳定增量信息。
  • 若继续研究,先固定 H=10 与中证500 池,改为条件化表达(例如 CSRank(-ret20) * (1 - CSRank(vr)) 或仅在 vr 低分位内取反转),再跑一次体检;不要因为一次回测好看就上调仓位。
  • 单反转在池内有微弱正 IC,但胜率不足;可作为其他因子的中性化/正交化输入,不建议单独作为交易信号。

边界

  • 本地 parquet 不含退市股,存在幸存者偏差,结论偏乐观。
  • 十分位组合按收盘价成交,未建模涨跌停无法买入的极端情况;涨停拦截率 0.4% 仅为调仓日近似。
  • 2022–2026 是单一区间,风格切换后结论可能翻转;门槛在 2020–2023 全 A 窗口校准。
  • 本报告为历史统计检验,不构成投资建议;过往表现不代表未来。

运行记录

环境
Windows 11 · Python 3.14.4 · pandas 3.0.3 · numpy 2.4.6
时间
2026-11-02T14:36:00+08:00
数据源
本地后复权日线 parquet(截至 2026-09-08)
状态
ok
样例文件
input.md · output.md

中证500 逐年 PIT,2022-01-04 至 2026-08-19,1121 个交易日;六道门禁 0/6,定档 C;与 20 日反转基准相关性 +0.487(独立)。拆解显示反转单项 RankIC +0.0346、换手放大 -0.0358,等权相加抵消。

因子体检 样例图表

运行在

Claude CodeCursorCodexGemini CLI

你会得到

  • 六道统计门禁逐项结论
  • IC / RankIC / ICIR / t 值口径表
  • 逐年 IC 与十分位分组年化
  • 与基准因子库的相关性排他
  • A / B / C 定档与下一步建议

适合

  • 在研报或论坛看到新因子,想先验证再写进策略
  • 自己攒了一个因子思路,想快速知道是否过拟合
  • 两个因子看起来很像,想确认是不是同一个东西的马甲

不适合

  • 生成买卖建议或预测个股涨跌
  • 对财务基本面因子做量价口径的体检
  • 数据不足两年时强行下结论
ICRankICICIR因子相关性十分位过拟合
安装需要什么环境?
Python 3.11+、pandas / numpy、A 股日线数据(自备 parquet / CSV,或用 eltdx 现场取数)、至少 24 个完整月度。完整的分 Agent 目录写在 install.md 里。
需要 API key 吗?
不需要额外 key。运行所需的只是它声明的数据源与环境。
能用自己的数据跑吗?
可以。样例使用 Windows 11 · Python 3.14 · 本地后复权日线 parquet;换成你的数据时,按 install.md 里的字段与路径说明改。 跑不通就把缺口写清楚,不要用估算值填。
样例是怎么跑出来的?
运行时间 2026-11-02T14:36:00+08:00,Windows 11 · Python 3.14.4 · pandas 3.0.3 · numpy 2.4.6。 产物原样保留:output.md 是实际输出,原始数据在 samples/factor-audit/raw/。 不修图、不美颜、不用效果图。
能保证结果能直接用于交易吗?
不能。Skill 只负责把口径、取数和输出结构固化下来,结论要你自己复核。 FinanSI 不提供投资建议,也不对任何标的做推荐。

相近的技能

全部技能