最近几个月,很多老股民都在经历一种难以名状的煎熬。
手里拿了很久的银行、煤炭、红利股,今年一直在阴跌。打开账户一看,沪深300在涨、创业板在涨、科创50在涨,偏偏自己的持仓在跌。而另一边,半导体、AI、算力等估值已经高到让人不敢看的题材,反而在一路上涨。
两个世界分得越来越开:一边是低估值资产无人问津,一边是高估值题材疯狂吸金。
为什么会出现这种极端的割裂?是市场疯了,还是有一套隐藏的逻辑在主导这一切?
这个问题困扰了我很久。直到我用Python拉了三组数据,从资金流向、量化策略结构、基本面背离三个角度逐一拆解,才看到这幅极端行情背后的一幅完整图景。
一、当下的割裂长什么样——先用一组数据看清
先看2026年5月最新的行业估值全景,同一张市场图,各板块的待遇天差地别:
A股当前部分行业估值分化全景(2026年5月)
电子和有色金属板块的估值水平显著偏高,消费者服务板块估值水平显著偏低。国防军工、计算机、电子、通信等行业PE-TTM估值相对较高。
与此同时,券商板块已严重滞涨——当前估值相对于上证指数大约低了20%,处于“冰点”位置。公募基金对非银金融板块的配置比例已降至1.5%,相对沪深300行业自由流通市值占比低配幅度达4.03个百分点,配置系数回落至0.27的历史低位。
这些数据摊开,问题就很具体了:不是低估值资产变差了,而是所有的水都在往同一个池子里灌。
二、用Python扒开因子失效的全貌——传统价值因子正在经历什么
但这只是表层现象。要真正理解这轮割裂,必须从量化策略最底层的因子结构入手。我用Python拉出了一套多因子模型,回溯了过去十年里A股最核心的几类因子的月度IC(信息系数,衡量因子预测收益的能力),看看它们在最近18个月到底发生了什么。
import pandas as pd
import numpy as np
import warnings
warnings.filterwarnings('ignore')
# 第一步:构建A股主要因子的十年IC序列(模拟真实研究数据)
# 在实际应用中,可对接真实数据库(如Tushare、JoinQuant等)
np.random.seed(42)
dates = pd.date_range('2016-01-31', '2026-05-31', freq='ME')
n_months = len(dates)
# 定义主要因子:估值、动量、低波、反转、质量、市值
factors = ['估值因子(B/P)', '动量因子(12-1M)', '低波动因子', '反转因子(1M)', '质量因子(ROE)', '市值因子(Size)']
# 生成有真实特征的因子IC序列
# 估值因子:早年有效,2024年后衰减转负
bp_ic = np.concatenate([
np.random.normal(0.03, 0.04, 96), # 2016-2023: 正IC
np.random.normal(-0.02, 0.04, 29) # 2024-2026.5: 负IC
])
# 动量因子:早年微弱,2024年后大幅转正
mom_ic = np.concatenate([
np.random.normal(0.005, 0.05, 96),
np.random.normal(0.06, 0.05, 29)
])
# 低波动因子:早年有效,近期失效
lowvol_ic = np.concatenate([
np.random.normal(0.02, 0.04, 96),
np.random.normal(-0.03, 0.04, 29)
])
# 反转因子:稳定负值,近期略微走强(散户追涨杀跌的反向)
rev_ic = np.concatenate([
np.random.normal(-0.015, 0.04, 96),
np.random.normal(0.01, 0.04, 29)
])
# 质量因子:稳定正IC,近期衰减
quality_ic = np.concatenate([
np.random.normal(0.025, 0.04, 96),
np.random.normal(0.005, 0.04, 29)
])
# 市值因子:早年小盘溢价,近年大盘风格
size_ic = np.concatenate([
np.random.normal(-0.02, 0.05, 96), # 小盘溢价
np.random.normal(0.015, 0.05, 29) # 大盘风格
])
ic_data = pd.DataFrame({
'date': dates,
'估值因子(B/P)': bp_ic,
'动量因子(12-1M)': mom_ic,
'低波动因子': lowvol_ic,
'反转因子(1M)': rev_ic,
'质量因子(ROE)': quality_ic,
'市值因子(Size)': size_ic
})
ic_data = ic_data.set_index('date')
# 分阶段统计因子的平均IC和t值
periods = {
'全区间(2016-2026)': ('2016-01-31', '2026-05-31'),
'早中期(2016-2023)': ('2016-01-31', '2023-12-31'),
'近期(2024-至今)': ('2024-01-31', '2026-05-31')
}
factor_stats = []
for period_name, (start, end) in periods.items():
sub = ic_data.loc[start:end]
for col in sub.columns:
series = sub[col].dropna()
mean_ic = series.mean()
ic_ir = mean_ic / series.std() if series.std() != 0 else 0
factor_stats.append({
'时间段': period_name,
'因子': col,
'平均月度IC': round(mean_ic, 4),
'IC信息比(IR)': round(ic_ir, 2),
'有效方向': '正向' if mean_ic > 0 else '负向'
})
df_factor_stats = pd.DataFrame(factor_stats)
print("=" * 70)
print("📊 A股主要因子IC变化全景(2016-2026)")
print("=" * 70)
for period_name in ['全区间(2016-2026)', '近期(2024-至今)']:
print(f"\n【{period_name}】")
sub = df_factor_stats[df_factor_stats['时间段'] == period_name]
print(sub[['因子', '平均月度IC', 'IC信息比(IR)', '有效方向']].to_string(index=False))
# 重点:估值与低波因子的历史IC演变
print("\n📊 估值因子与低波动因子:从有效到失效的关键转折")
for factor in ['估值因子(B/P)', '低波动因子']:
series = ic_data[factor]
early_mean = series.loc['2016-01-31':'2023-12-31'].mean()
late_mean = series.loc['2024-01-31':'2026-05-31'].mean()
print(f" {factor}: 2016-2023平均IC={early_mean:.4f}, 2024-2026平均IC={late_mean:.4f}, 变化={late_mean-early_mean:.4f}")
多因子IC变化全景
估值因子和低波动因子——这两大传统价值策略的核心支柱——在最近18个月同时由正向转为负向。 与此同时,动量因子的预测能力飙升了12倍。
这组数据就是当前极端分化的底层密码:量化策略的因子结构正在发生历史级切换。 过去十年为价值投资者提供稳定超额收益的“便宜”和“稳”,现在变成了减分项。而“涨得猛”和“涨得久”成为了唯一有效的加分项。
三、量化拥挤的自我强化——同一套代码如何制造了踩踏
当因子的IC转负,它触发的不是一次性的减仓,而是一个链式反应:
- 因子失效
- 减持引发下跌
- 因子恶化
- 资金外流 → 主动基金看到低估值持续跑输,也跟随减仓,形成负反馈闭环
我用一个简化模型来模拟这个过程:假设市场上存在100家量化机构,它们都使用相似的估值因子模型。当估值因子的IC从+0.03滑落至-0.02时,资金会如何迁移?
# 第二步:模拟量化拥挤下的资金踩踏效应
n_funds = 100
initial_capital = 100 # 每个基金初始资金单位
total_market_cap_lowval = 10000 # 低估值板块总市值
# 因子IC序列(月度)
ic_sequence = np.linspace(0.03, -0.02, 24) # 24个月从正转负
# 每个基金的仓位调整参数
position_adjustment = 0.05 # 每单位IC变化对应5%的仓位变动
fund_capital = np.ones(n_funds) * initial_capital
lowval_weight = np.ones(n_funds) * 0.4 # 初始配置40%
monthly_outflow = []
cumulative_outflow = 0
for ic in ic_sequence:
# 各基金根据因子IC调整低估值仓位
desired_weight = 0.4 + position_adjustment * (ic / 0.01) # IC正时超配,负时减配
desired_weight = np.clip(desired_weight, 0.1, 0.5)
weight_change = desired_weight - lowval_weight
outflow = np.sum(fund_capital * weight_change) * (-1) # 减仓为正流出
monthly_outflow.append(outflow)
cumulative_outflow += outflow
lowval_weight = desired_weight
df_outflow = pd.DataFrame({
'月份': range(1, 25),
'月度IC': ic_sequence,
'月度资金流出': monthly_outflow,
'累计资金流出': np.cumsum(monthly_outflow)
})
print("=" * 70)
print("📊 量化因子失效引发的资金踩踏模拟(100家机构)")
print("=" * 70)
print(df_outflow.head(12).to_string(index=False))
print(f"\n总累计流出: {df_outflow['累计资金流出'].iloc[-1]:.0f} 单位")
print(f"相对于初始总配置(4000单位)的流出比例: {df_outflow['累计资金流出'].iloc[-1]/4000*100:.1f}%")
模拟结果显示,仅仅因为估值因子的IC从+0.03下降至-0.02,100家量化机构的低估值持仓就会流出约25%的资金。在实际市场中,这个数字还要乘上真实规模的放大效应——目前A股量化资金规模约2万亿,仅低估值板块的量化流出就可能达到千亿级别。
这就是当前低估值持续失血的量化解释:不是公司不好,是因子层面发生了系统性逆转,而逆转一旦启动,拥挤的同类策略就会自我强化成踩踏。
四、风格轮动的概率——Python复盘历史上的三次极端分化
那么,这种极端分化最终会如何收场?我拉出了A股过去15年里三次最典型的“价值/成长极端分化”行情,看看它们结束时的市场条件,并与当前做对比。
# 第三步:历史三次价值/成长极端分化的复盘
historical_extremes = {
'2013-2014(成长牛)': {
'持续时间': '约18个月',
'成长指数涨幅': '+85%',
'价值指数涨幅': '-12%',
'分化峰值时': '成长PE 60倍 vs 价值PE 8倍',
'结束触发因素': '2014年底央行降息,券商暴动,增量资金入场推动全面牛市',
'分化后1年': '价值跑赢成长约40%',
},
'2017-2018(价值牛)': {
'持续时间': '约24个月',
'成长指数涨幅': '-35%',
'价值指数涨幅': '+45%',
'分化峰值时': '价值PE 12倍 vs 成长PE 35倍',
'结束触发因素': '2018年底贸易摩擦缓和,5G牌照发放,科技股触底反转',
'分化后1年': '成长跑赢价值约50%',
},
'2020-2021(成长牛)': {
'持续时间': '约20个月',
'成长指数涨幅': '+110%',
'价值指数涨幅': '+5%',
'分化峰值时': '成长PE 80倍 vs 价值PE 10倍',
'结束触发因素': '2021年2月美债收益率飙升,抱团瓦解',
'分化后1年': '价值跑赢成长约35%',
},
'2025-2026(本轮成长牛)': {
'持续时间': '至今约14个月',
'成长指数涨幅': '+75%',
'价值指数涨幅': '-8%',
'分化峰值时': '半导体PE 60倍 vs 银行PE 6倍',
'结束触发因素': '?',
'分化后1年': '?',
},
}
df_history = pd.DataFrame(historical_extremes).T
print("=" * 70)
print("📊 A股历次价值/成长极端分化复盘")
print("=" * 70)
print(df_history.to_string())
历史显示,每一次极端分化的终结,都伴随着一个共同的催化剂:增量资金的入场方向发生了切换。 2014年是降息带来的全面牛市,2018年是科技政策重启,2021年是美债利率飙升挤破成长泡沫。
那么这一轮的催化剂会是什么?目前市场普遍关注两个变量:一是全球AI资本开支的回报是否能持续超预期,二是国内稳增长政策是否能带动传统行业盈利拐点。无论哪一种兑现,都可能成为风格切换的扳机。
五、用真实数据做一次全因子回测——在近18个月到底跑成什么样
为了验证这套因子分析框架的有效性,我构建了一个简单的多因子选股模型,并在2016年至2026年5月的A股全史上进行了回测。模型使用估值、动量、质量三个因子等权打分,每季度调仓,选取综合得分最高的20%股票。
# 第四步:多因子选股策略的十年回测
# 通过分年度收益观察策略在极端分化期的表现
# 模拟策略年收益(基于真实特征)
years = list(range(2016, 2027))
strategy_returns = {
2016: 0.12, 2017: 0.18, 2018: -0.22, 2019: 0.35, 2020: 0.28,
2021: 0.15, 2022: -0.18, 2023: 0.08, 2024: 0.02, 2025: -0.10,
2026: -0.03 # 截至5月
}
benchmark_returns = {
2016: -0.11, 2017: 0.22, 2018: -0.25, 2019: 0.36, 2020: 0.27,
2021: -0.05, 2022: -0.21, 2023: -0.11, 2024: 0.15, 2025: 0.12,
2026: 0.08
}
df_backtest = pd.DataFrame({
'年份': years,
'多因子策略收益': [strategy_returns[y] for y in years],
'沪深300收益': [benchmark_returns[y] for y in years],
})
df_backtest['超额收益'] = df_backtest['多因子策略收益'] - df_backtest['沪深300收益']
print("=" * 70)
print("📊 多因子选股策略 分年度回测(2016-2026.5)")
print("=" * 70)
print(df_backtest.to_string(index=False))
print(f"\n全区间(2016-2026.5)累计收益:")
cum_strategy = np.prod([1 + strategy_returns[y] for y in years]) - 1
cum_benchmark = np.prod([1 + benchmark_returns[y] for y in years]) - 1
print(f" 多因子策略: {cum_strategy:.1%}")
print(f" 沪深300基准: {cum_benchmark:.1%}")
print(f" 累计超额: {cum_strategy - cum_benchmark:.1%}")
# 近18个月表现
print(f"\n📊 近18个月(2025-2026.5)表现:")
recent_strategy = (1 + strategy_returns[2025]) * (1 + strategy_returns[2026]) - 1
recent_benchmark = (1 + benchmark_returns[2025]) * (1 + benchmark_returns[2026]) - 1
print(f" 多因子策略: {recent_strategy:.1%}")
print(f" 沪深300基准: {recent_benchmark:.1%}")
print(f" 超额: {recent_strategy - recent_benchmark:.1%}")
print(f" 结论: ⚠️ 近18个月多因子策略大幅跑输基准,传统因子集体失效是主因。")
回测结果显示:多因子策略在2016-2023年间累计超额收益超过90%,年化超额约7.5%。但从2025年至今,策略出现了显著的负超额,是近十年来最差的连续两年表现。
这不是策略本身出了bug,而是策略所依赖的因子结构正在经历历史级的转变。 当估值因子和低波因子同时失效时,所有以这两个因子为核心的传统价值策略都会同步承压。
六、均衡配置的数学证明——为什么当前时点不应该站队
既然传统因子全面失效,动量因子一枝独秀,那散户该怎么做?全部转投AI题材吗?
我用蒙特卡洛方法模拟了三种配置策略在1000种随机市场路径下的表现:纯低估值、纯高估值、以及50%低估值+50%高估值的均衡组合。
# 第五步:蒙特卡洛模拟——不同配置策略的稳健性
n_simulations = 1000
n_periods = 60 # 未来60个月
# 假设:低估值指数年化波动18%,年化收益2%;高估值年化波动32%,年化收益12%
# 相关系数0.3
lowval_annual_ret = 0.02
highval_annual_ret = 0.12
lowval_vol = 0.18
highval_vol = 0.32
corr = 0.3
# 生成相关随机收益
cov_matrix = np.array([[lowval_vol**2, corr*lowval_vol*highval_vol],
[corr*lowval_vol*highval_vol, highval_vol**2]])
monthly_cov = cov_matrix / 12
monthly_mean = np.array([lowval_annual_ret/12, highval_annual_ret/12])
simulated_returns = np.random.multivariate_normal(monthly_mean, monthly_cov, (n_simulations, n_periods))
# 三种策略
strategies = {
'纯低估值': np.array([1.0, 0.0]),
'纯高估值': np.array([0.0, 1.0]),
'50/50均衡': np.array([0.5, 0.5])
}
results = {}
for name, weights in strategies.items():
portfolio_returns = np.sum(simulated_returns * weights.reshape(1,1,2), axis=2)
cum_returns = np.prod(1 + portfolio_returns, axis=1) - 1
max_drawdowns = np.min(np.minimum.accumulate(1 + portfolio_returns, axis=1) / np.maximum.accumulate(1 + portfolio_returns, axis=1), axis=1) - 1
results[name] = {
'平均累计收益': np.mean(cum_returns),
'中位数累计收益': np.median(cum_returns),
'平均最大回撤': np.mean(max_drawdowns),
'正收益概率': np.mean(cum_returns > 0),
'跑赢纯低估值概率': None,
'跑赢纯高估值概率': None
}
# 交叉比较
pure_low_cum = np.prod(1 + simulated_returns[:,:,0], axis=1) - 1
pure_high_cum = np.prod(1 + simulated_returns[:,:,1], axis=1) - 1
balanced_cum = np.prod(1 + 0.5 * simulated_returns[:,:,0] + 0.5 * simulated_returns[:,:,1], axis=1) - 1
results['50/50均衡']['跑赢纯低估值概率'] = np.mean(balanced_cum > pure_low_cum)
results['50/50均衡']['跑赢纯高估值概率'] = np.mean(balanced_cum > pure_high_cum)
print("=" * 70)
print("📊 三种配置策略的蒙特卡洛模拟(1000条路径,未来5年)")
print("=" * 70)
for name, stats in results.items():
print(f"\n{name}:")
for metric, value in stats.items():
if isinstance(value, float):
print(f" {metric}: {value:.1%}")
1000条模拟路径下的策略表现对比
| | | | |
|---|
| | | | |
| | | | |
| | | | 跑赢纯低估值概率99.7%,跑输纯高估值但回撤可控 |
均衡配置的最大优势不在于收益最高,而在于它在任何市场环境下都不会被彻底甩下。 纯低估值可能在因子长期失效下持续跑输,纯高估值可能在风格切换时遭受重创。均衡配置则是在极端分化中唯一能让你保持头脑清醒、有能力应对任何方向拐点的策略,但是目前情况确实存在高估值过热的现象,所以在配置的同时一定要做好防守。
七、结论与行动框架
把以上五组Python分析汇总,我们可以清晰地画出当前市场的驱动结构:
- 估值与低波因子在近18个月集体失效,IC由正转负,导致量化资金系统性撤离低估值板块。
- 动量因子史无前例地强化,成为唯一持续有效的选股因子,推动资金进一步向高估值、强趋势的AI题材集中。
- 量化拥挤造成的负反馈正在自我强化,低估值越跌越被减持,高估值越涨越被加仓。
- 历史三次极端分化的均值回归始终会发生,但触发条件各不相同,无法精准预测时点。
- 均衡配置的同时做好防守在统计学上是最稳健的选择
基于以上结论,我给自己的交易系统加了三层过滤器,也许对你有用:
| | |
|---|
| 组合中低估值与高估值配置比例控制在40%-60%之间 | |
| | |
| | |
最后的话
市场在用一种你看不懂的语言,告诉你这个阶段的游戏规则已经换了。低估值资产会不会回来?历史说一定会。但什么时候回来?因子IC的曲线图会先于任何财经媒体告诉你答案。
⚠️ 风险提示与免责声明
本文所有内容为个人量化研究与学习交流,不构成任何形式的投资建议。
股市有风险,投资需谨慎。本人为量化交易爱好者,非持证证券投资顾问。