3. 风格轮动识别核心指标计算
风格轮动的识别不能停留在“大盘涨、小盘跌”的定性描述上,必须把不同市值风格(例如沪深300代表的大盘、中证500代表的中盘、中证1000或国证2000代表的小盘)放到同一套可比较的数值框架里。本节聚焦四个基础轮动指标:相对强弱指标(RSI,此处指两条风格指数净值之比构造的相对强弱线及其衍生读数)、动量比率、波动率比、换手率比。它们的共同逻辑是:把两个风格序列“相除”或“相减”,消去市场整体涨跌的共同成分,留下风格之间的相对强弱信息。
一、指标定义与计算口径
先明确参照约定:本节所有“比率”均以分子风格相对分母风格表达,比值上升表示分子风格走强。设风格A与风格B的日收盘价序列为 PA,t、PB,t,则相对强弱线定义为 RSt = PA,t / PB,t。对 RS 线再做标准化处理,可得到类似 RSI 的读数:先取 RS 的日变化率 rt = RSt/RSt-1 − 1,再用 N 日窗口内上涨幅度均值与总波动幅度均值之比映射到 0~100,即 RSIN = 100 × 平均涨幅 /(平均涨幅 + 平均跌幅)。读数高于 70 表示A风格相对B风格短期偏强甚至过热,低于 30 表示相对偏弱。
动量比率衡量的是“一段时间内谁涨得多”。常用做法是取两风格在回看窗口 L 内的累计收益之差或之比:动量比率 MRt =(PA,t/PA,t−L)/(PB,t/PB,t−L)。MR > 1 表示窗口内A跑赢B。波动率比则取两风格日收益率在 N 日窗口内的标准差之比 VRt = σA,N / σB,N,用于判断当前市场是“大盘稳、小盘躁”还是相反。换手率比 TRt = 换手率A,N / 换手率B,N,反映资金关注度在两种风格间的倾斜。
二、编程实现
下面用 pandas 给出四个指标的核心实现。数据假设为一张按日期索引、列为各风格指数收盘价与换手率的 DataFrame,示例数据为教学构造,非实测结果。
import pandas as pd
import numpy as np
def style_indicators(df, a="大盘", b="小盘",
rsi_n=14, mom_l=20, vol_n=20, turn_n=5):
pa, pb = df[f"{a}_close"], df[f"{b}_close"]
# 1) 相对强弱线与 RSI
rs = pa / pb
chg = rs.pct_change()
up = chg.clip(lower=0).rolling(rsi_n).mean()
dn = (-chg.clip(upper=0)).rolling(rsi_n).mean()
rsi = 100 * up / (up + dn)
# 2) 动量比率(窗口累计收益之比)
mr = (pa / pa.shift(mom_l)) / (pb / pb.shift(mom_l))
# 3) 波动率比(日收益率标准差之比)
ra, rb = pa.pct_change(), pb.pct_change()
vr = ra.rolling(vol_n).std() / rb.rolling(vol_n).std()
# 4) 换手率比(均值之比)
tr = (df[f"{a}_turn"].rolling(turn_n).mean()
/ df[f"{b}_turn"].rolling(turn_n).mean())
return pd.DataFrame({"RS": rs, "RSI": rsi,
"MR": mr, "VR": vr, "TR": tr})
实现中有三个容易出错的细节。第一,pct_change() 默认对缺失值前向填充,遇到停牌应显式 fill_method=None 并先做对齐,避免虚假的零收益。第二,RSI 的分母在单边行情中可能接近零,需加极小值保护或改用 np.where 处理。第三,动量比率在窗口起点附近为 NaN,回测时应丢弃前 L 个样本,而不是填 1。
三、指标联动与可视化判读
单看一个指标容易误判,四个指标的价值在于交叉验证。下图展示同一时间轴上四个指标与风格相对强弱线的联动关系,以及不同组合所对应的轮动状态判读。
图中四个面板共享时间轴,便于观察“领先—跟随”关系。典型判读规则如下:当 RS 线持续上行、RSI 进入 70 以上、MR(20) 与 MR(60) 同时大于 1,且 VR 与 TR 同步抬升时,说明大盘风格不仅相对走强,还伴随波动收敛与资金集中,属于较可靠的轮动确认信号。反之,若 RS 上行但 RSI 已从高位回落、MR(60) 仍小于 1,则更可能是短期反弹而非趋势切换,应降低仓位调整的力度。
需要强调的是,四个指标存在信息重叠:RSI 与 MR 都刻画相对收益方向,VR 与 TR 都刻画资金与波动特征。实践中建议按“方向—强度—资金”三层使用:RS 与 MR 定方向,RSI 定强度与过热,VR 与 TR 做辅助确认。当方向层与资金层背离时(例如 RS 上行但 TR 持续下降),应视为弱信号,等待下一窗口确认。
四、参数敏感性检查
窗口参数直接决定信号频率与滞后。建议在正式使用前做一次简单的敏感性扫描:固定其他参数,分别取 RSI 窗口 10/14/21、动量窗口 20/60/120,统计各组合下信号触发次数与平均持有期。教学示例中可预期:短窗口触发频繁但假信号多,长窗口稳定但滞后明显。把扫描结果整理成下表形式,便于选择与自身调仓频率匹配的参数组合。
| 指标 | 窗口参数 | 信号含义 | 主要风险 |
|---|---|---|---|
| RSI | 14 日 | >70 相对过热,<30 相对偏弱 | 单边行情中钝化 |
| 动量比率 | 20 / 60 日 | >1 分子风格跑赢 | 窗口切换时跳变 |
| 波动率比 | 20 日 | 上升表示分子风格波动占比提高 | 受极端单日影响 |
| 换手率比 | 5 / 20 日均值 | 上升表示资金向分子风格集中 | 成分调整扰动 |
完成上述计算与可视化后,读者应能得到一张包含 RS、RSI、MR、VR、TR 五列的时间序列表,并据此对任一历史区间给出“哪一风格占优、信号强弱如何”的判断。这套指标是后续构建轮动打分与切换规则的基础输入,其口径一致性比单个指标的精细度更重要。