EP+ROE 等权复合因子报告

行业、市值中性化 · 全 A · 月度检验 · 信号区间 2019-01-31 ~ 2026-08-31 · 落库表 ep_roe_composite_neutral · 生成于 2026-10-28
存疑
一句话总评
存疑:逐日 RankIC 均值 0.0306,Newey-West t = 4.46,统计上显著为正;十组收益不单调(收益最高的是 G9,不是 G10);多空 G10−G1 月均 0.18%,扣费后年化 0.39%、夏普 0.09,多空不显著,没有看到可交易的超额。
逐日 RankIC 均值
0.0306
可用
Newey-West t 值
4.46
朴素 t = 16.52(虚高 3.7 倍)
IC > 0 胜率
66.0%
IR = 0.382
组序相关(G1→G10)
0.782
9 个台阶中 7 个向上
G10−G1 月均收益
+0.18%
不扣费
多空年化(扣费)
+0.39%
不扣费 +1.46%
多空夏普(扣费)
0.09
不扣费 0.18
多空最大回撤(扣费)
-25.06%
基准 -24.63%

一、加工说明

  1. 股票池:全 A,依次剔除 ST(304,466 股票·日)、停牌(15,144)、上市不足 250 个交易日(536,641)。北交所老代码在 trading_days 表里缺失,用 list_days×245/365 折算兜底(池内 126,575 股票·日用到)。池内共 8,177,030 股票·日、1,894 个交易日,日均 4444 只(3,349~5,209)。
  2. 原始值:EP = 1/pe_ttm,保留负值(1,668,665 条);pe_ttm 为空 1,952、为零 0、非有限 0 的记为缺失。ROE = roe_avg_ttm,缺失 131,621。财务字段已按公告日对齐,只用信号日收盘时已公开的数据。
  3. 行业中位数填补:用当日同申万 2021 一级行业的中位数填补,EP 填补 1,952 条、ROE 填补 131,621 条;仍缺失 EP 0、ROE 0;行业缺失而剔除 261 条。最终保留 8,176,769 行。
  4. 缩尾 + 标准化:EP、ROE 分别按当日截面 1%、99% 分位缩尾,再做 z-score。
  5. 等权合成:0.5×EP_z + 0.5×ROE_z,再做 z-score。
  6. 中性化:当日截面上,对申万 2021 一级行业哑变量和 LN(总市值) 做线性回归,取残差(c_neutralize_resid,不带内置缩尾和标准化),再做 z-score,即最终因子值,越大越优。
  7. 加工检查:每日均值最大绝对值 3.9e-17;每日标准差(ddof=1)在 1.000000~1.000000;重复 (date, instrument) 0 条;NaN/Inf 0 条;各行业残差日均值最大绝对值 1.5e-12。
  8. 独立复算:用 pandas/numpy 最小二乘在 2024-06-28 一天(5,004 只)重算,与 SQL 结果最大绝对差 3.6e-13。

执行方式:加工是逐日截面计算,因 AIStudio 免费规格内存放不下全区间,按半年分块各执行一次 SQL 后拼接。各块互不依赖,理论上与一次性执行相同,但我没有跑过一次性版本来对照;各步剔除、填补条数为各块相加。

为什么要中性化(大白话)

EP(便宜程度)和 ROE(赚钱能力)都带着“行业”和“公司大小”的影子:银行、煤炭天然估值低,大公司和小公司的估值水平也系统性不同。 不处理的话,因子很可能只是在买某几个行业或某个市值区间,而不是在同行业、同规模的公司里挑更好的。 中性化就是把这部分影子扣掉,只留下“同行业、同市值水平下的相对好坏”。

本次的佐证:中性化前因子与 LN(总市值) 的逐日相关均值为 0.283,之后约为 -7.8e-14; 逐日 RankIC 均值从 0.0202 变为 0.0306,标准差从 0.1496 降到 0.0802, Newey-West t 值从 1.60 升到 4.46。中性化前后因子值的日均相关为 0.925。

“波动变小”的原因(猜测):中性化前的 IC 可能随大小盘风格轮动起落。本次没有做按市值分层的检验,这只是猜测,没有验证。

二、图表

检验口径:信号日收盘后生成因子,T+1 开盘价买入。逐日 RankIC 的“下期收益”为 T+1 开盘到 T+21 开盘(20 个交易日,相邻日窗口重叠,所以 t 值用 Newey-West,滞后 20);分组与多空为月度:月末信号日生成,次日开盘买入,持有到下一个月末信号日的次日开盘,共 92 期。红涨绿跌。

1 · 逐日 RankIC 与 60 日均线

浅线为逐日 RankIC,蓝线为 60 日均线,灰色横线为 0 轴。全程均值 0.0306,IC>0 的天数占 66.0%。

2 · 累计 RankIC(中性化后 vs 中性化前)

逐日 RankIC 的累加。曲线越陡说明那段时间因子越有效,走平说明失效。

3 · 十组下期平均收益(G1 最小 → G10 最大)

每组为月度调仓的平均单期收益,黑线为全市场等权基准的月均收益(1.35%)。G1 绿 → G10 红只表示组序。

4 · 十组累计净值

起点为 1。线尾直接标出 G1、G10 和全市场等权基准;鼠标悬停时按净值从高到低排序。

5 · 多空累计净值(多 G10 空 G1)

扣费口径为单边 0.15%,只对换手部分收取。基准为全市场等权。

6 · 逐日 RankIC 直方图

横轴为 IC 区间中点,纵轴为天数。中性化后分布更集中(标准差 0.0802,中性化前 0.1496)。

7 · 分年度平均 RankIC

中性化后在 8 个年份中有 8 个为正,中性化前为 4 个。2026 年为截至 2026-09-18 的不完整年份。

8 · 分年度收益:G10 / 基准 / 多空(扣费)

各年内月度收益复利;多空为 G10−G1 的月度差价复利,未扣空头融券成本。

三、指标表

评价口径(课程口径):|IC| ≥ 0.03 记“可用”,≥ 0.05 记“强”,> 0.1 记“可疑(警惕未来函数)”;单调性看十组是否“台阶状=有规律,乱跳=巧合”。

RankIC 汇总(t 值一栏为 Newey-West 校正,逐日滞后 20、月度滞后 3)
口径均值标准差IR朴素 tNW 校正 tIC>0 胜率课程口径
逐日 RankIC · 中性化后0.03060.08020.38216.524.4666.0%可用
逐日 RankIC · 中性化前0.02020.14960.1355.831.6053.9%偏弱(<0.03)
月度信号日 RankIC(不重叠)· 中性化后0.02870.08500.3373.243.4260.9%偏弱(<0.03)
月度信号日 RankIC(不重叠)· 中性化前0.01530.14240.1081.031.0554.3%偏弱(<0.03)

逐日 IC 一阶自相关 0.962,所以朴素 t 值虚高约 3.7 倍。NW 滞后取 5/10/20/30/40 时,中性化后 t 值分别为 7.05、5.47、4.46、4.17、4.06,结论不依赖滞后选择。

十分组(月度调仓,不扣费)
组别月均收益年化夏普最大回撤
G1+1.16%+10.35%0.47-34.06%
G2+1.31%+12.95%0.57-30.48%
G3+1.21%+11.88%0.55-31.67%
G4+1.25%+12.32%0.56-28.80%
G5+1.38%+14.19%0.64-25.88%
G6+1.43%+14.83%0.65-25.89%
G7+1.59%+17.09%0.73-25.55%
G8+1.63%+17.76%0.75-24.67%
G9+1.67%+18.49%0.79-20.22%
G10+1.33%+13.99%0.64-19.97%
全市场等权基准+1.35%+13.90%0.63-24.63%
股票池等权+1.40%+14.53%0.65-23.53%

单调性:组序相关 0.782,9 个相邻台阶中 7 个向上,逐月组序相关均值 0.106。判断:整体向上但顶部回落,不算干净的台阶(收益最高的是 G9,G10 月均 1.33%,与基准的 1.35% 相近)。G10−G1 月均 +0.18%。每组每期中位 439 只。

多空组合(月度调仓)
组合累计收益年化年化波动夏普最大回撤月胜率
多空 · 不扣费+11.71%+1.46%11.58%0.18-22.40%48.9%
多空 · 扣费(单边 0.15%)+3.01%+0.39%11.62%0.09-25.06%48.9%
仅多 G10 · 扣费+160.78%+13.32%25.04%0.62-20.13%54.3%
全市场等权基准+171.23%+13.90%25.91%0.63-24.63%54.3%

成本假设:单边 0.15%,买入、卖出各计一次,只对换手部分收取,首期只计建仓。单边换手(占该腿资金):多头月均 16.3%,空头月均 12.2%;成本拖累约 1.05%/年。换手用“新进成员占比”独立核对:多头 13.3%、空头 8.6%,权重换手不低于它(符合),因为还包含留任股票调回等权的部分。多空月差价的 t 值:朴素 0.50,NW 校正 0.47;前半段年化 -0.99%,后半段 +3.96%。

分年度收益(月度收益复利)
年份G1G10全市场等权基准G10 超额多空 · 不扣费多空 · 扣费
2019+6.60%+18.37%+17.88%+0.49%+8.92%+7.52%
2020+8.93%+18.17%+19.99%-1.82%+7.58%+6.30%
2021+30.94%+16.87%+24.68%-7.81%-11.57%-12.53%
2022+8.86%+2.75%+4.82%-2.07%-7.32%-8.31%
2023-18.85%-4.02%-17.58%+13.56%+15.17%+14.13%
2024+19.29%+34.73%+27.82%+6.92%+8.98%+7.93%
2025+46.92%+41.41%+48.86%-7.45%-4.95%-5.78%
2026(不完整)-9.61%-11.18%-6.44%-4.74%-2.50%-3.16%
分年度逐日 RankIC
年份中性化后中性化前后 · 胜率后 · NW t课程口径(后)
20190.05480.056486.1%4.01强
20200.03180.077576.1%2.78可用
20210.0180-0.023060.1%0.96偏弱(<0.03)
20220.0045-0.003647.5%0.32偏弱(<0.03)
20230.0357-0.009676.4%2.02可用
20240.04440.045456.6%1.42可用
20250.0240-0.007658.4%1.58偏弱(<0.03)
20260.03190.027867.2%1.42可用

分年度 NW 滞后取 min(20, 样本数/5)。年度 NW t ≥ 2 的年份只有 3/8 个,多空不扣费为正的年份 4/8 个。

四、自检

项目结果判断
财报更新日是否紧跟公告日因子值变动 127,631 次,其中 122,599 次能对上公告日;对上的里 99.80% 在公告日当天或次一交易日更新(当日 112,989,次日 9,338)。公告到更新相隔天数:中位 0、P90 2、P99 6。基本通过,有尾部 异常:提前于公告 26 笔(最多 10 天),滞后超过 10 天 56 笔(最长 231 天),对不上公告 5,032 笔。原因未核查(猜测:更正公告或日期口径差异)。
因子额外滞后后的 IC滞后 0 / 5 / 20 个交易日:IC 0.0306 / 0.0280 / 0.0237,NW t 4.46 / 4.13 / 3.58。通过 缓慢衰减,没有“一滞后就消失”,不像依赖未来信息。
随机因子对照随机因子 300 次(种子 20261027),月度 IC 均值的均值 -1.3e-05;|t|>1.96 的比例 6.7%(理论约 5%,偏离 1.3 个标准误);随机 |t| 最大 3.38,真实月度 t 为 3.24,超过它的随机因子占 0.3%。通过 检验流程对随机因子不制造虚假显著。
与过去收益的关系因子与过去 20 / 60 日收益的月度截面 Spearman 均值:中性化后 -0.024 / -0.039,中性化前 0.011 / 0.009;单月绝对值最大 0.23 / 0.26。通过 平均相关很小,不是动量或反转的替身。
退市标的是否在样本内2019 年以来退市 243 只,其中 236 只在因子表里,7 只不在;因子表最后一天距退市日的中位数 7 天,超过 30 天的 89 只。月度检验里“有入场价、缺退出价”被跳过的股票·期 780(其中退市股 203,G1 220,G10 57)。有未解释尾部 退市股在样本内(无生存者偏差的明显证据),但缺退出价的收益被跳过,退市亏损没有计入;这会对 G1 和 G10 各有多大影响没有量化(猜测:G1 受影响更大)。
SQL 与 numpy 对账在 3 个信号日上用 scipy 重算:样本数一致,RankIC 最大绝对差 1.7e-15,c_ntile 分组一致比例 100%。通过 分组与 IC 直接用 SQL 的 c_ntile / c_rank / m_lead 计算,未回退 numpy。

五、结论(大白话)

要不要继续研究:建议继续,但不要直接当作独立的选股因子用。 排序信息大概率是真实的(IC 显著、自检基本通过,尾部见第四节),但“排序有用”和“能赚到钱”之间还差一步:最顶端一组没有跑赢,扣费后的多空几乎没有收益。 更值得做的是:(1)看为什么 G10 回落——可以拆开 EP 和 ROE 各自的 IC 与分组,也可以按行业或市值分层看 G10 里是什么股票; (2)把它当作多因子里的一个成分,而不是单独使用;(3)换一个更长的持有期或加入成交约束再检验。

对 G10 回落原因的任何解释(比如“G10 里有高 ROE 的拥挤股”“EP 为负值的亏损股被推到两端”)目前都是猜测,本次没有做拆分检验。

六、风险与备注