选股这件事,说到最后绕不开一个字:贵。 但"贵"是个很玄的说法——30 倍 PE 的消费股算贵吗?10 倍 PE 的银行股算便宜吗? 脱离历史区间谈绝对估值,几乎没有意义。
所以在量化里,我们更愿意换一个问法:这只股票当前的 PE, 落在它自己过去 N 年的什么位置?这就是"PE 历史分位数"——把绝对估值换算成 0 到 100% 的相对坐标, 让不同行业、不同成长阶段的公司可以放在同一把尺子上比较。
直觉上,这个逻辑很朴素:分位数越低,说明相对自己历史越便宜, 未来均值回复的概率越大。但直觉不等于证据。这篇文章要回答的就是一个问题—— 在 A 股市场,把 PE 分位数当作选股因子,它到底有没有效?有多有效?
我用自己的 A 股数据库做了一次完整的实证:4 个分位窗口 × 4 种持股数量共 16 个组合, 外加分层测试、IC/ICIR 检验和 IC 衰减分析,全部扣除交易成本。 下面把结论和数据一起摊开。
一、回测设计:先把规则钉死
一个可信的回测,参数必须是可以被复现的。先看核心设定。
项目
设定
样本区间
2010-01-04 — 2026-09-18
共 200 个月度调仓区间
股票池
约 1374 → 5120 只
全 A 股,剔除北交所
数据频率
分位因子用周频估值快照
避免用日频噪声放大择时误差
调仓频率
月度(每月首个交易日)
等权买入,持有至下月调仓
因子定义
PE 历史分位数(3/5/10/20 年)
越低越便宜,取前 N 只
持股数量 N
10 / 20 / 50 / 100
等权配置
交易成本
买入 0.026%,卖出 0.126%
佣金万 2.5 双边 + 印花税千 1 单边卖出
无风险利率
2% / 年
用于夏普比率计算
基准
全A等权(主)+ 沪深300/中证500/中证1000
见下文关于基准口径的说明
1. 股票池过滤:三个必须堵住的口子
股票池的构造比因子本身更容易出错。这里只保留在调仓时点可观测的条件, 任何用到"今天才知道"的信息都会被剔除,否则回测结果会被前视偏差污染。
# 股票池过滤(全部为调仓时点可观测变量)
MIN_LIST_DAYS = 250 # 上市满 250 个交易日
MIN_PRICE = 1.0 # 剔除 1 元以下仙股
MIN_HIST_WEEKS = 104 # 最少历史周数约 2 年
MIN_HIST_RATIO = 0.5 # 有效窗口≥名义一半
EXCLUDE_BJ = True # 剔除北交所
第 4 条MIN_HIST_RATIO尤其值得说。 如果一只股票只有 3 年数据,你硬要算它的"20 年分位", 算出来的数字只会是噪声。所以要求有效历史至少达到名义窗口的一半, 不满足的直接剔除——这会让不同窗口的样本期起点不一致,但换来的是因子本身的可信度。
2. 分位数怎么算:滚动排序
分位数本质上就是当前 PE 在历史窗口内的排名百分位。用滚动窗口做时序排名即可:
# 对每只股票,取过去 W 周的 PE 序列做滚动排名
pe_pos = pe.where(pe > 0) # 剔除 PE ≤ 0
win = pe_pos.rolling(W, min_periods=mp)
q = win.rank(pct=True)
# W 为周数
# 3年=156, 5年=260, 10年=520, 20年=1040
# mp = max(104, round(W * 0.5))
这里有个容易踩的坑:PE 为负的股票必须剔出分位计算。 亏损公司的 PE 是负数,"负 PE"在数学上比任何正 PE 都小, 如果直接参与排名,所有亏损股都会挤进"最便宜"那一档, 策略立刻变成"专挑亏损公司"——这显然不是我们想要的。
3. 信号与执行的时序:杜绝未来函数
这是整个回测里最容易被忽略、也最致命的一环。规则是:调仓日使用的分位信号,必须来自调仓日之前最后一个可得的估值快照。
换句话说,1 月 4 日买入,用的是 12 月 31 日收盘后已发布的数据, 而不是 1 月 4 日当天或之后的数据。差一天,回测收益就可能凭空多出好几个百分点。
4. 成本怎么扣:按换手率逐期计提
交易成本不是用一个固定百分比打折,而是逐期根据实际换手计算:
# 买入:佣金万 2.5 + 过户费
COST_BUY = 0.00025 + 0.00001
# 卖出:再加印花税千 1
COST_SELL = COST_BUY + 0.001
# 换手率按权重变化计,成本逐期扣
turnover = 0.5 * sum(|w_now - w_prev|)
cost = turnover * (COST_BUY + COST_SELL)
net_ret = gross_ret - cost
印花税千 1 只在卖出时收,所以卖出的成本是买入的4.8 倍。 这个不对称性对高换手策略的杀伤力很大,后面在成本拖累那一节会看得非常清楚。
二、绩效结果:16 个组合,15 个跑赢基准
图1 四个分位窗口 Top50 组合累计净值(扣费后,2010-01 至 2026-09)
先看整体。四个窗口的 Top50 组合,净值曲线在中段开始明显拉开与基准的差距, 到 2026 年 9 月,PE 5年分位 Top50 的累计净值达到17.23 倍(年化 18.63%), 同期全A等权 4.82 倍(年化 9.90%),沪深300 仅 1.27 倍(年化 1.46%)。
20 年分位组合起步较晚(受最小历史长度约束,2016 年才有足够数据), 但形态与另外三个窗口一致——这不是某一个窗口的偶然结果。
核心绩效矩阵
分位窗口
Top10
Top20
Top50
Top100
最大回撤
(Top50)
夏普
(Top50)
年化双边
换手
年化成本
拖累
PE 3年分位
9.63% 14.77% 16.15% 18.47%
-43.25%
0.61
17.3 倍
1.52%
PE 5年分位
14.30% 16.38% 18.63% 19.01%
-37.78%
0.69
15.6 倍
1.40%
PE 10年分位
13.79% 17.85% 19.02% 19.10%
-40.78%
0.72
13.2 倍
1.18%
PE 20年分位
16.12% 14.88% 15.27% 15.62%
-33.40%
0.65
10.3 倍
0.89%
注:上表四个 Top-N 列为对应组合的年化收益率(扣费后)。 回撤、夏普、换手、成本拖累均以 Top50 组合为例。换手与成本为 2010-01 至 2026-09 全区间年化。
作为对照,四个基准指数的同期表现:
基准
年化收益率
年化波动率
最大回撤
夏普比率
卡玛比率
月胜率
全A等权(主基准)
9.90%
28.63%
-53.42%
0.40
0.19
56.5%
沪深300
1.46%
23.36%
-42.85%
0.09
0.03
49.3%
中证500
3.32%
27.24%
-60.60%
0.18
0.05
54.2%
中证1000
3.38%
30.46%
-67.80%
0.19
0.05
53.2%
注:上述基准均未扣除任何费用,其年化收益率可直接与策略的扣费后收益对比。
几个可以直接读出来的事实:
第一,横向上几乎全面占优。16 个组合里 15 个跑赢全A等权,唯一例外是 PE 3年分位 Top10(年化 9.63% vs 基准 9.90%), 落后 0.27 个百分点——基本可以视作平手。
第二,跑赢的不是"一点点"。以 5 年窗口为例,Top50 年化 18.63%、Top100 年化 19.01%,同期全A等权 9.90%, 超额收益接近 9 个百分点。对比沪深300 的 1.46%,差距更是一个数量级。
第三,20 年窗口的表现最"平"。四个组合年化都在 14.88%–16.12% 之间,且波动率最低(22%–24%)。 原因很直接:20 年窗口要求股票有至少 10 年的有效历史, 能进入样本的都是上市时间足够长的公司,本身就是一个偏成熟、偏大盘的子集。
基准口径的一个提醒
这里必须说明一个容易被忽略的细节:价格指数与含息收益不可直接比较。
我使用的行情数据是前复权价格(已包含分红再投资), 而沪深300、中证500 等指数是价格指数(不含分红)。 A 股长期股息率大约在 2% 上下,这意味着直接拿策略去和指数比, 会凭空多出约 2 个百分点的"虚假超额"。
因此在本文中,主要基准采用"全A等权"—— 等权买入全部可交易股票,与策略使用同一套行情口径,两者可比; 指数仅作为参考坐标,不作为主要对标。
持股数量的反直觉结论:越多越好
图2 PE 3年分位:不同持股数量组合累计净值(扣费后)
这是整个回测中最出乎我意料的地方。把持股数量从 10 只增加到 100 只, 收益是单调上升的:
组合
年化收益率
最大回撤
夏普比率
月胜率
PE 3年分位 Top10
9.63%
-56.56%
0.40
51.5%
PE 3年分位 Top20
14.77%
-52.08%
0.57
56.5%
PE 3年分位 Top50
16.15%
-43.25%
0.61
57.5%
PE 3年分位 Top100
18.47%
-38.42%
0.69
59.5%
教科书上的价值因子回测,往往用"最便宜的前 10 只或前 20 只"来展示因子强度, 因为这样 IC 看起来最漂亮。但那是在实验室里。
真实结果是:Top10 只有 9.63%,连基准都跑不过;Top100 却有 18.47%。原因也不复杂——低 PE 股票里混着一批"价值陷阱"(便宜是因为基本面在恶化), 10 只持仓时,只要踩中两三个陷阱,个股风险就会压过因子本身的力量。 100 只持仓把个股噪声充分分散,因子真正的统计优势才显现出来。
实操含义:如果你要落地这套策略,持股数量建议在 50–100 只之间, 而不是追求"精选 10 只"。
成本到底吃掉多少
图3 费前与扣费后净值对比,以及各组合的年化成本拖累
把交易成本单独拎出来看,能得到一个很实用的结论:持股越集中,换手越高,成本拖累越重。
组合
年化收益率
(扣费后)
月均单边
换手
年化双边
换手
年化成本
拖累
PE 3年分位 Top10
9.63%
88.5%
21.2 倍
1.77%
PE 3年分位 Top50
16.15%
72.0%
17.3 倍
1.52%
PE 3年分位 Top100
18.47%
59.0%
14.2 倍
1.27%
PE 5年分位 Top10
14.30%
86.6%
20.8 倍
1.81%
PE 5年分位 Top50
18.63%
65.0%
15.6 倍
1.40%
PE 5年分位 Top100
19.01%
51.5%
12.4 倍
1.11%
PE 10年分位 Top10
13.79%
80.2%
19.2 倍
1.66%
PE 10年分位 Top50
19.02%
54.9%
13.2 倍
1.18%
PE 10年分位 Top100
19.10%
41.5%
10.0 倍
0.89%
PE 20年分位 Top10
16.12%
73.0%
17.5 倍
1.54%
PE 20年分位 Top50
15.27%
42.8%
10.3 倍
0.89%
PE 20年分位 Top100
15.62%
30.4%
7.3 倍
0.63%
Top10 组合每年双边换手17.7–21.2 倍,成本拖累1.77%–1.81%; Top100 组合换手降到 10–14 倍,拖累收窄到0.63%–1.27%。
这不是一个可以忽略的量级。一个年化 19% 的策略, 如果成本拖累从 0.9% 抬到 1.8%,最终收益就少掉将近 1 个百分点—— 而这一切仅仅是因为把持仓从 100 只砍到了 10 只。集中度带来的成本上升,叠加了收益的下降,是双向的伤害。
三、因子有效性检验:分层、IC 与衰减
净值曲线好看,只说明"这个组合赚钱了",不说明"这个因子有效"。 要判断因子的预测能力,需要标准化的检验流程。这里做三件事:分层测试、IC / ICIR 检验、IC 衰减分析。
1. 分层测试:单调性是第一道关
把所有股票按 PE 分位从低到高分成 5 组,G1 是最便宜的 20%,G5 是最贵的 20%, 每组等权持有、月度调仓。如果因子真的有效,年化收益应该从 G1 到 G5 单调递减。
分位窗口
G1(最便宜)
G2
G3
G4
G5(最贵)
G1−G5 价差
PE 3年分位
17.56%
11.96%
9.41%
6.21%
0.48% 17.08%
PE 5年分位
17.21%
11.48%
8.97%
6.53%
1.74% 15.47%
PE 10年分位
16.39%
10.80%
8.18%
5.19%
1.34% 15.05%
PE 20年分位
12.60%
8.57%
9.00%
3.48%
-0.65% 13.26%
图4 五分层组合年化收益:单调性检验
结果相当干净:四个窗口全部保持单调递减,无一例外。
G1(最便宜)年化 12.60%–17.56%,G5(最贵)年化 −0.65%–1.74%。 最贵的那一组在 20 年窗口下甚至年化为负。 G1 与 G5 的价差达到13.26–17.08 个百分点, 这是一个非常陡峭的分层梯度。
换成多空视角会更直观——做多 G1、做空 G5:
分位窗口
多空组合
年化收益
年化波动率
夏普比率
多空最大回撤
G1 年化
G5 年化
PE 3年分位
13.91%
12.38%
0.96
-21.86%
17.56% 0.48%
PE 5年分位
11.89%
12.91%
0.78
-20.86%
17.21% 1.74%
PE 10年分位
11.50%
12.53%
0.77
-18.36%
16.39% 1.34%
PE 20年分位
11.17%
10.79%
0.85
-9.51%
12.60% -0.65%
图5 多空组合(做多最便宜组 / 做空最贵组)累计净值
多空组合的夏普比率在0.77–0.96之间,波动率仅有 10.8%–12.9%, 显著低于多头组合的 22%–29%, 回撤也明显更浅(−9.51% 至 −21.86%)。这说明 PE 分位数捕捉到的是相对定价差异,而不是市场整体的贝塔。
2. IC / ICIR:因子的统计显著性
IC(Information Coefficient)衡量因子值与下期收益的横截面相关性, 是判断因子预测能力最直接的指标。这里用的是RankIC(Spearman 秩相关), 对极端值不敏感,更适合估值类因子。
# 每期算因子值与下期收益的 Spearman 秩相关
fwd = forward_return_t + 1
ic = spearman(factor_t, fwd)
# ICIR = IC均值 / IC标准差
# t 值用 Newey-West(HAC,3阶) 修正自相关
分位窗口
截面数
IC 均值
IC 标准差
ICIR
年化 ICIR
NW t 值
IC>0 占比
PE 3年分位
201
1.89
8.96
70.6%
PE 5年分位
201
1.68
8.31
67.7%
PE 10年分位
182
1.73
7.86
70.9%
PE 20年分位
123
1.88
6.73
76.4%
图6 PE 5年分位因子月度 RankIC(上)与四窗口累计 IC(下)
判断标准很简单:|IC| 均值大于 0.05,就可以认为因子有较强的预测能力。
实测结果:四个窗口的 IC 均值全部在 0.0528–0.0587 之间, 稳定站上 0.05 这条线。年化 ICIR 在 1.68–1.89 之间, Newey-West t 值 6.73–8.96,p 值都在 10⁻¹¹ 量级以下。
更值得注意的是IC>0 的占比: 3 年窗口 70.6%、20 年窗口 76.4% 的月份里 IC 为正。 这意味着因子不是靠少数几个月份的极端值撑起来的, 而是大部分时间方向都是对的——这一点比 IC 均值本身更重要。
下方的累计 IC 曲线也很说明问题:四条曲线整体斜率稳定向上, 中途没有出现长期走平或持续回撤的阶段。因子在 16 年里没有明显的失效期。
3. IC 衰减:信号能撑多久?
如果因子只用一个月就失效,那策略必须高频调仓,成本会吃掉大部分收益。 所以需要检验:信号的预测能力在不同持有期下如何变化。
分位窗口
持有 1 个月
持有 3 个月
持有 6 个月
持有 12 个月
PE 3年分位
0.0587 0.0704 ★ 0.0581 0.0454
PE 5年分位
0.0528 0.0663 ★ 0.0570 0.0495
PE 10年分位
0.0538 0.0727 ★ 0.0677 0.0613
PE 20年分位
0.0577 0.0726 ★ 0.0686 0.0628
图7 IC 衰减曲线:信号在不同持有期下的强度
结果再次出乎意料。IC 并没有随持有期延长而衰减,反而在 3 个月处达到峰值。
4 个窗口的 IC 均值从 1 个月的 0.0528–0.0587,上升到 3 个月的0.0663–0.0727,之后才缓慢回落, 到 12 个月仍有 0.0454–0.0628。
这个形态传递了两个信息:
其一,估值修复需要时间。PE 分位数反映的是估值偏离,而估值回归的基本面兑现(盈利改善、预期修正) 通常需要 1–2 个季度的财报周期。1 个月内信号还没充分展开。
其二,月度调仓可能是过度交易。既然 3 个月持有期的 IC 更高,那么把调仓频率从月度降到季度, 可以在提高信号质量的同时把换手率降低约三分之二, 成本拖累相应从 0.6%–1.8% 降到更低水平。
这是本次回测中最具操作价值的一条结论: 把调仓周期改成季度,很可能比在月度框架里继续优化参数更有效。
四、分年度表现:稳定性检查
图8 分年度收益对比:全A等权 vs PE 5年分位 Top50 / Top100
年份
全A等权
PE 5年分位 Top50
PE 5年分位 Top100
2010
16.7% 23.3% 21.1%
2011
-15.9% -6.5% -3.5%
2012
-27.5% -13.8% -15.1%
2013
46.8% 37.4% 46.6%
2014
53.2% 40.3% 45.0%
2015
68.3% 100.7% 104.2%
2016
1.4% 8.8% 5.0%
2017
-14.9% -1.9% 0.8%
2018
-25.7% -24.5% -23.9%
2019
11.2% 27.1% 23.4%
2020
36.1% 49.6% 42.3%
2021
21.0% 8.3% 17.8%
2022
-1.6% 22.3% 19.9%
2023
6.1% 8.0% 8.0%
2024
8.2% 23.8% 23.4%
2025
28.6% 46.3% 44.7%
2026
5.0% 12.8% 9.6%
16 个完整年度(2010–2025)中,PE 5年分位 Top100 跑赢全A等权的年份有13 个,胜率 81.2%(Top50 同为 13/16)。
跑输的只有 3 年,而且幅度都不大: 2013 年(46.60% vs 46.79%,基本持平)、 2021 年(17.78% vs 20.99%,落后 3.2 个百分点)、 2014 年(45.02% vs 53.20%,落后 8.2 个百分点)。
2014 年是相对表现最差的一年,背景是"杠杆牛"启动初期, 资金先涌向弹性大的题材股与中小盘,低估值蓝筹反而跑在后面。这恰好说明因子在极端风格行情中会阶段性落后—— 但从未出现连续两年以上的失效。
反过来,表现最好的年份集中在 2015(基准 +68.3%,Top100+104.2%)、 2020(基准 +36.1%,Top100 +42.3%)、 2025(基准 +28.6%,Top100 +44.7%)。牛市中期与估值修复阶段,因子的弹性会显著放大。
更值得注意的是防守能力。熊市年份里,策略的跌幅普遍小于基准: 2011 年基准 −15.9%,Top100 −3.5%;2012 年基准 −27.5%,Top100 −15.1%; 2018 年基准 −25.7%,Top100 −23.9%;2022 年基准 −1.6%,Top100 +19.9%。低估值本身就是一层缓冲。
五、必须说清楚的两个风险
一份只有正面结论的回测是不负责任的。这套结果里有两个结构性问题, 会系统性地影响你对绝对收益的预期。
1. 存活偏差:绝对收益是上界
我的数据库里,所有股票的最后交易日都落在 2026 年—— 换句话说,已经退市的公司不在样本中。
这对低估值策略的伤害尤其大:一家公司之所以 PE 很低, 有时候正是因为市场已经预见到它要出问题。财务造假、经营恶化、 最终退市的股票,在它们退市前往往都是"便宜"的。 把这些股票从样本里删掉,等于事后把最坏的那部分结果抹掉了。
所以:本文中所有绝对收益数字应当被视为上界。 相对收益(策略 vs 全A等权)则相对可靠一些—— 因为基准腿和策略腿共享同一个偏差,两者的差值能抵消掉一部分。
2. 风格暴露:这是价值因子,不是纯 alpha
图9 16 个组合的风险—收益分布(vs 基准指数)
先看市值分布:持仓的市值分位中位数为0.701, 也就是说组合系统性偏向中大盘股,而不是很多人第一反应里的"小市值策略"。 这一点反而是加分项——说明收益不是靠小盘股流动性溢价撑起来的。
但行业层面就没有这么让人安心了:
图10 持仓行业超配情况(PE 5年分位 Top50)
非银金融超配3.50 倍、 银行超配3.06 倍、 房地产超配2.26 倍。
这是一个非常清晰的画像:这套策略本质上是一个深度价值风格组合, 重仓金融与地产。它的收益里,有多少来自"选股能力"(alpha), 有多少来自"价值风格本身的贝塔",仅靠这个回测是无法分离的。
2010 年以来 A 股的价值风格经历了多轮长周期轮动。 要确认因子本身是否稳定有效,还需要做行业中性化和市值中性化之后再跑一遍——把行业和市值的影响剥离掉, 看剩余部分是否还能贡献超额收益。
这是下一步最该做的事,也是本文结论的主要保留意见。(不过话说回来,分层测试的单调性、IC 的显著性、以及 20 年窗口下 G5 组年化为负——这些特征很难单纯用风格暴露来解释。)
图11 四个市场阶段的分段表现
分段来看,策略在四个阶段都优于同期基准,没有出现任何一段的系统性崩溃, 其中"阶段四 震荡与价值回归"(2023-01 至 2026-09)表现最为突出, PE 3年分位 Top100 年化22.29%,同期基准 12.40%。
即便是整体最难做的"阶段二 杠杆牛→股灾→白马牛"(2015-2018), 基准年化 −0.16%,而 PE 3年分位 Top100 仍有+9.40%; "阶段一 震荡下行"(2010-2014)基准年化 10.04%,Top100 为 17.09%。穿越了杠杆牛、股灾、白马抱团、结构牛、熊市与价值回归——整整四轮完整周期。
六、结论
把这次实证的核心结论收成六条:
1. 因子有效。四个分位窗口的 IC 均值都在 0.0528–0.0587, 稳定越过 0.05 的强预测阈值,NW t 值 6.73–8.96,年化 ICIR 1.68–1.89。
2. 分层单调。G1 到 G5 年化收益逐层递减,四个窗口无一例外, G1−G5 价差 13.26–17.08 个百分点,20 年窗口下最贵组年化为负。
3. 持股越多越好。Top100 全面优于 Top10, Top10 甚至跑不过基准。集中度带来的价值陷阱风险压过了精选收益,建议持股 50–100 只。
4. 3 个月是最佳持有期。IC 在 3 个月处达到峰值(0.0663–0.0727), 月度调仓存在过度交易,改成季度调仓更优。
5. 绝对收益是上界。存活偏差使已退市股票缺失, 低估值策略受影响尤甚;相对基准的超额更可信。
6. 存在明显风格暴露。非银金融、银行、房地产分别超配 3.50 倍、3.06 倍、2.26 倍,需要中性化后才能分离纯 alpha。
如果只记一句话:
"便宜"这个模糊的概念,可以用 PE 历史分位数变成可计算、可检验的信号。 四个窗口、16 个组合、200 个月度截面、16 年的实证结果显示—— 这个信号的统计显著性足够扎实,但使用时请保持分散(50–100 只), 并留意它的价值风格底色。
上面这套流程本身是可以复用的:定义因子 → 计算滚动分位 → 构造组合 → 扣费回测 → 分层与 IC 检验 → 中性化复核。 把 PE 换成分红率、ROE、营收增速, 整套框架不用改,直接就能跑下一个因子。
真正花时间的从来不是代码,而是那些容易出错的地方: PE 为负怎么处理、信号与执行差几天、基准含不含分红、 退市股有没有留在样本里。这些细节决定了回测结果到底能不能信。
免责声明:本文为量化研究方法探讨,所有数据均来自历史回测, 不构成任何投资建议。回测结果不代表未来表现。 市场有风险,决策需独立判断。
热门跟贴