3. 行业轮动信号构建基础
行业轮动的第一步不是“选行业”,而是把“哪个行业更强”这件事变成可计算、可比较、可复现的数字。动量、估值、景气度是三类最常用的信号来源,它们分别回答“过去谁涨得好”“现在谁便宜”“未来谁在变好”三个不同问题。本节的任务是把这三类原始指标加工成统一口径的单因子信号,并完成行业排序,为后续的多因子合成与择时决策打好基础。
三类单因子的原始口径
动量因子衡量行业相对强弱,常用过去N个交易日的累计收益率,或相对基准的超额收益。实操中更稳健的做法是取“剔除最近1个月”的12个月动量,即用t-252到t-21区间的收益率,规避短期反转效应。示例参数:以中证全指为基准,计算31个申万一级行业过去12个月超额收益,记为 mom_raw。
估值因子衡量行业相对自身的贵贱程度。直接用PE绝对值不可比(银行5倍与计算机50倍无法排序),应使用分位数:取行业PE_TTM在过去5年(约1250个交易日)历史中的百分位,记为 val_pct。分位数越低越便宜,信号方向为“低估值优先”。
景气度因子衡量基本面改善方向,可用行业分析师一致预期净利润增速的环比变化,或营收增速、ROE的同比改善幅度。示例采用“近3个月一致预期净利润增速上调幅度”,记为 pros_raw,数值越大表示景气改善越强。
信号标准化:让不同因子可比
标准化的目标是消除量纲与分布差异,把每个因子映射到同一尺度。常用两种方法:
- Z-score标准化:
z = (x - mean) / std,把因子变成均值0、标准差1的分布。适合近似正态的动量、景气度数据,但极端值会拉偏均值和标准差。 - 百分位排名标准化:把31个行业的因子值排序后映射到0~1(或1~31的名次)。对异常值不敏感,天然适合“排序选行业”的场景,估值分位数本身已是这种形式。
实操建议:动量与景气度先做去极值(如中位数绝对偏差MAD法,把超过3倍MAD的值截断),再做Z-score;估值因子直接使用历史分位数。标准化后统一为“数值越大越优先”的方向:动量Z值越大越好,估值分位数需取反(1 - val_pct),景气度Z值越大越好。方向统一是排序正确的前提,务必在代码中显式处理。
import numpy as np, pandas as pd
def mad_winsorize(s, n=3):
med = s.median()
mad = (s - med).abs().median()
upper, lower = med + n*1.4826*mad, med - n*1.4826*mad
return s.clip(lower, upper)
def zscore(s):
return (s - s.mean()) / s.std(ddof=0)
# 假设 df 的索引为行业,列为三个原始因子
df['mom_z'] = zscore(mad_winsorize(df['mom_raw']))
df['pros_z'] = zscore(mad_winsorize(df['pros_raw']))
df['val_s'] = 1 - df['val_pct'] # 低估值优先,方向取反
df['val_z'] = zscore(df['val_s'])
行业排序与信号输出
标准化完成后,单因子排序就是按因子值降序排列行业。以动量因子为例,取 mom_z 降序前5名作为多头组合,后5名作为空头或规避组合。排序结果需要保留名次与因子值,便于后续合成时加权。下表为某期示例数据(数值为教学假设,非实测):
| 行业 | 动量Z值 | 估值分位 | 景气Z值 | 动量排名 |
|---|---|---|---|---|
| 有色金属 | 1.82 | 0.71 | 1.15 | 1 |
| 电子 | 1.34 | 0.58 | 1.62 | 2 |
| 汽车 | 0.91 | 0.44 | 0.38 | 3 |
| 银行 | -0.27 | 0.12 | -0.41 | 18 |
| 房地产 | -1.56 | 0.09 | -1.33 | 30 |
注意表中“有色金属动量第一但估值分位0.71偏贵”,这正是单因子排序的局限:单一维度会选出“强但贵”的行业。因此单因子信号的价值在于提供干净、方向一致的排序输入,而不是直接下结论。多因子合成时,可对三个标准化信号等权相加或按IC加权,得到综合得分再排序。
实现中的关键校验
信号构建完成后,至少做四项检查。第一,方向一致性:随机抽3个行业,人工核对“因子值高是否对应排名靠前”,尤其检查估值取反是否生效。第二,分布检查:标准化后各因子均值应接近0、标准差接近1,若某因子标准差远大于1,说明去极值不充分。第三,截面完整性:31个行业每期都应有名次,缺失行业需用行业中位数填充并标记,不能直接丢弃,否则排序基数变化会让名次不可比。第四,时点纪律:所有因子只能用调仓日之前已公开的数据,估值分位用滚动窗口计算,景气度用当时可得的一致预期,严禁用未来财报。
完成上述步骤后,每个行业在每个调仓日都会得到一组方向一致、量纲统一的单因子得分与名次。这组输出既是单因子轮动策略的直接输入,也是下一步多因子加权合成的基础。单因子本身不追求预测精度,而追求“口径干净、方向正确、可复现”,这是行业轮动信号体系能否站得住脚的地基。