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,数值越大表示景气改善越强。

三个因子的量纲完全不同:动量是百分比收益,估值是0~1的分位数,景气度是预期增速变化。若不标准化,直接加权会被数值大的因子主导,排序结果失真。

信号标准化:让不同因子可比

标准化的目标是消除量纲与分布差异,把每个因子映射到同一尺度。常用两种方法:

  • 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.820.711.151
电子1.340.581.622
汽车0.910.440.383
银行-0.270.12-0.4118
房地产-1.560.09-1.3330

注意表中“有色金属动量第一但估值分位0.71偏贵”,这正是单因子排序的局限:单一维度会选出“强但贵”的行业。因此单因子信号的价值在于提供干净、方向一致的排序输入,而不是直接下结论。多因子合成时,可对三个标准化信号等权相加或按IC加权,得到综合得分再排序。

单因子信号构建与行业排序流程 动量因子 12月超额收益 mom_raw 估值因子 PE历史分位 val_pct 景气度因子 预期增速上调 pros_raw 去极值 + Z-score MAD截断后标准化 方向统一 估值取反 1 - val_pct 去极值 + Z-score 统一为越大越优 单因子排序 按因子值降序 输出行业名次 前5 / 后5 分组 信号输出 多头组合 空头/规避 供多因子合成 关键校验:① 三因子方向是否统一为“越大越优”;② 标准化后均值≈0、标准差≈1;③ 排序名次无并列遗漏;④ 每期截面独立计算,避免使用未来数据。 常见错误:估值直接用PE绝对值排序、动量未剔除近1月反转、景气度用已披露财报而非一致预期,均会导致排序方向偏差。

实现中的关键校验

信号构建完成后,至少做四项检查。第一,方向一致性:随机抽3个行业,人工核对“因子值高是否对应排名靠前”,尤其检查估值取反是否生效。第二,分布检查:标准化后各因子均值应接近0、标准差接近1,若某因子标准差远大于1,说明去极值不充分。第三,截面完整性:31个行业每期都应有名次,缺失行业需用行业中位数填充并标记,不能直接丢弃,否则排序基数变化会让名次不可比。第四,时点纪律:所有因子只能用调仓日之前已公开的数据,估值分位用滚动窗口计算,景气度用当时可得的一致预期,严禁用未来财报。

完成上述步骤后,每个行业在每个调仓日都会得到一组方向一致、量纲统一的单因子得分与名次。这组输出既是单因子轮动策略的直接输入,也是下一步多因子加权合成的基础。单因子本身不追求预测精度,而追求“口径干净、方向正确、可复现”,这是行业轮动信号体系能否站得住脚的地基。