当固收+的投资者们提到“选结构”,风格的倾向几乎是首要的问题。
从去年以来,市场至少经历过大盘成长转向小盘(2021年1月末)、小盘转向大盘价值(2021年10月)两次体感较为明显的风格转向。虽然个股、转债层面还有诸多值得讨论的细节,但风格上站错位置,几乎很难拿回好的回报。而在近期,投资者更加集中关注的,是成长是否有抄底价值。在此,我们基于历史情况和数据分析,给出一些可行的思路。
一、A股特征:趋势与边界并存
两个月窗口,正负20%是关键边际值
我们对近10年的风格相对跑赢幅度进行统计,以上证50和中证1000分别代表大\小盘,国证成长和国证价值代表成长\价值。相对稳定的结论是,两个月窗口下,市场整体的轮动偏移幅度基本在正负20%以内(不考虑2015年那一次过大的波动)。这意味着在统计意义上,正负20%是风格偏移的边际值,若触及则后续大概率会出现均值回归。若进一步细看,正负10%已经具备较大约束力。同时我们发现成长价值的分化较大小盘而言更弱,即使不考虑2014-2015年。
但值得注意的是,在来到边界值之前,市场倾向于延续原来的方向。
图表1:股市风格轮动情况(40天涨跌幅差值,单位%)
资料来源:万得资讯,中金公司研究部,注:蓝线代表大票跑赢小票幅度,橙线代表价值跑赢成长幅度
轮动从两象限变为四象限
以2020年为节点,我们进一步观测到在此以前,风格相对跑赢幅度的散点具备较明显的正斜率,这意味着市场整体呈现着“小盘≈成长”、“大盘≈价值”的格局,即轮动是一个两象限互动。而随着2020年以来创业板企业体量明显增长,大盘成长股和小盘价值股的结构性机遇,上图的散点的分散度加剧,市场风格轮动的可能性增多。
成为典型的四象限运动,也就是大盘不再与价值挂钩,小盘也不一定就意味着成长
——而就实际样本来看,“小盘价值”多为一些小周期股,而这些标的可能股票的覆盖度不高,但却常常作为转债的发行人。
图表2:分年度股市风格轮动情况(2012-2019)
资料来源:万得资讯,中金公司研究部
图表2(续):分年度股市风格轮动情况(2020-2022YTD)
资料来源:万得资讯,中金公司研究部,注:2022年数据截至2022年3月24日
长期趋势偏好成长
而如果我们拉长窗口,能看到成长更容易在长时间窗口占据优势。
也即,上述“40交易日20%”的约束关系聚焦于中短期,与更长期限视角下,风格的优劣势具备趋势性不矛盾。但在大小盘中,这样的趋势性则更不明显。
下图则试图说明这个问题:横轴为观测窗口,纵轴为99%的概率下,成长\价值或大盘\小盘的极限跑赢幅度。可以看到,就成长与价值而言,存在时间窗口越大,可能累计的分化越大的情况。而对于大小盘而言,极限分化度不稳定地随窗口扩大而扩大(而图上小盘在100日左右的占优主要来自行情整体强势后,小盘弹性更大,并非严格的风格问题)。
图表3:板块轮动偏离阈值情况(大小盘)
资料来源:万得资讯,中金公司研究部
图表3(续):板块轮动偏离阈值情况(价值成长)
资料来源:万得资讯,中金公司研究部
二、转债与风格轮动的适配度
考虑边界和趋势的转债轮动策略
固收+投资者的一个显著特征是可以用转债补足一些“深挖个股”触及不到的风格。
而我们经过测算,风格轮动型策略也与转债的策略相适配。
延续上述观察,市场的风格是一个趋势与约束并存的变量,我们很容易得到如下的一个策略:
当换仓时,风格偏离未接近阈值时,我们遵循市场风格偏移的势能;若突破阈值,则做反向处理。
具体实现方式上,我们需要下面的辅助函数,以得到当前风格偏移的状态,程序如下。这里相当于生成一个1.a中的图表。实现上没有其他需要注意之处,但为避免后续编号混乱,在设定风格与对应代码的字典时选择了OrderedDict。
图表4:观测板块轮动的基础程序
defgetDictPairs():
return OrderedDict({"BigSmall": ["000016.SH", "000852.SH"],"ValueGrowth": ["399371.SZ", "399370.SZ"]})
defdivergence(dictPairs, start, end, lstDay=None):
if lstDay isNone: lstDay = [40]
lstCodes = []
for v in dictPairs.values():
lstCodes += v
_, dfPct = w.wsd(",".join(lstCodes), "Close", dayOffset(start, -max(lstDay) - 1), end, usedf=True)
dfRet = pd.DataFrame(index=dfPct.index)
for n in lstDay:for k, v in dictPairs.items(): dfPctRolling = dfPct.rolling(n).apply(lambda x: 100 * (x[-1] / x[0] - 1)) dfRet[k + ":{_n} days".format(_n=n)] = dfPctRolling[v[0]] - dfPctRolling[v[1]] dfRet.index = map(lambda x: x.strftime("%Y/%m/%d"), pd.to_datetime(dfRet.index))
return dfRet.dropna(how="any")
资料来源:万得资讯,
中金公司
研究部
在选择风格时,我们首先判定其偏移度距离阈值是否较远,然后判定是否超出阈值,按照下图逻辑:
图表5:板块轮动策略逻辑示意
资料来源:万得资讯,中金公司研究部
由于已经设定好偏移数据,这里可以直接进入择券程序,择券框架请见《是时候,选出优秀的策略了》[1]。具体实现较为简单,没有值得特别注意之处。
图表6:具体择券程序
defrotation(obj, codes, date, tempCodes, dfAssetBook):
# 获取市场风格分化情况.
ifnot hasattr(obj, 'divergence'): obj.divergence = divergence(dictPairs, start, end)
# 获取转债标的风格数据,得到dictStyle为字典,共有size和style两个字段,各保存一个表格以注明大小盘、成长价值风格
ifnot hasattr(obj, 'dictStyle'):
obj.dictStyle = getStyle(obj)
sizeScore, styleScore = obj.divergence.loc[date, ["BigSmall:40 days","ValueGrowth:40 days"]]
# 获取阈值的相关数据,这里我们采取动态把控,而非定量的阈值
drSize, drStyle = 1if sizeScore > 0else -1,1if styleScore > 0else -1
idx = obj.divergence.index.get_loc(date)
# theta代表该风格过去1年在40交易日内累计偏移度的95%分位数,epsilon则是这一偏移度绝对值的0.5倍标准差
# 下面判断当前状态与阈值距离时,则以 score - theta的绝对值是否大于epsilon为准
thetaSize, thetaStyle = obj.divergence.iloc[idx - 250:idx].abs().quantile(0.95) epsilonSize, epsilonStyle = obj.divergence.iloc[idx - 250:idx].abs().std() / 2.
# 经过计算后,下面stylePick的choice将显示为所选风格的字符
stylePicks = {'size': {'score': sizeScore, 'direction': drSize, 'theta': thetaSize, 'epsilon': epsilonSize,'choice': 0, 'category': ['large', 'small']},'style': {'score': styleScore, 'direction': drStyle, 'theta': thetaStyle, 'epsilon': epsilonStyle,'choice': 0, 'category': ['value', 'growth']}}for k, v in stylePicks.items():
# 判定:当前状态距离阈值是否较远
if abs(v['score'] - v['theta'] * v['direction']) >= v['epsilon']: v["choice"] = v["direction"] if abs(v["score"]) "theta"] else -v["direction"]
else:
v['choice'] = -v['direction'] v['choice'] = v['category'][0] if v['choice'] == 1else v['category'][1]
# 这里选择对应风格的品种,取交集
srs = obj.dictStyle['size'].loc[date, tempCodes] == stylePicks['size']['choice'] srs *= obj.dictStyle['style'].loc[date, tempCodes] == stylePicks['style']['choice']
return srs[srs].index
资料来源:万得资讯,中金公司研究部
上述策略的效果我们测算如下:
图表7:策略具体情况
资料来源:万得资讯,中金公司研究部,回测数据自2017年12月29日至2022年4月6日
图表8:策略净值情况
资料来源:万得资讯,中金公司研究部,回测数据自2017年12月29日至2022年4月6日
同时这一策略的“生产率”也相对比较稳定,没有出现某一风格长时间占据主导地位的情况:直观角度来看大票仍然占比不低,
因此我们认为加权策略的稳定性具备一定保证。
图表9:策略实际选择板块情况
资料来源:万得资讯,中金公司研究部
三:固收+择股的风格轮动
在《再看固收+的绝对收益》[2]中,我们谈到固收+择股普遍具有分散、低估值、近似复制宽基的特性。我们希望借助风格轮动这个话题,再进一步推拟固收+择股还有什么可能性。根据我们测算,按照上述方式直接则股,亦可在250日的滚动窗口下,以接近76%的胜率战胜万得全A。而与债券结合后,在例如简单的股二债八分配下,亦可得到明显的增强效果。投资者可以考虑将股票、转债策略与债券结合,得到更加适合自己的风险回报分布(以下债券市场以债券指数为替代)。
图表10:固收+策略具体情况
资料来源:万得资讯,中金公司研究部,回测数据自2016年12月29日至2022年4月6日
图表11:固收+策略净值情况
资料来源:万得资讯,中金公司研究部,回测数据自2016年12月29日至2022年4月6日
[1] https://research.cicc.com/document/detail?id=221571
[2] https://research.cicc.com/document/detail?id=260562
本文摘自:2022年4月8日已经发布的《固收+与风格轮动:规律、策略与Python实现
》
杨 冰 SAC执业证书编号:
S0080515120002;
SFC CE Ref: BOM868
房 铎 SAC执业证书编号:S0080519110001
罗 凡 SAC执业证书编号:
S0080120070107
陈健恒 SAC执业证书编号:S0080511030011;SFC CE Ref: BBM220
法律声明
向上滑动参见完整法律声明及二维码
01
/
“躺平”抗疫后,那些国家怎么样了?
02
/
哈佛大学肯尼迪学院创始院长:事实证明中国抗疫策略比美国更成功
03
/
俄驻美大使:对俄罗斯的威胁不应来自乌克兰
04
/
上海新增1006例本土确诊病例和23937例本土无症状感染者
05
/
俄乌双方进行新一轮被俘人员的交换
06
/
中俄贸易额1468亿美元,中乌190亿美元,我国分别进口什么商品?
07
/
乌克兰宣布对俄实施贸易禁运
08
/
评论:坚持“动态清零”,中国算的是更大的账
09
/
经济金融守“沪”战!上海对中国有多重要?
10
/
巴基斯坦针对总理的不信任动议在议会投票中通过 伊姆兰·汗即将下台
01
/
美国银行警告:经济衰退要来
02
/
美媒:美国务院称,2020年外国政府送给特朗普和彭斯的礼物无法准确统计
03
/
美国政府文件显示美疾控中心曾拖延公开疑似新冠病毒扩散事件
04
/
“化工茅”万华化学231亿投资大动作 股民直呼“靠谱”
05
/
美联储加息的威力来了!从车贷到房贷,利率都在涨
06
/
美国这家大型新冠检测机构,被曝弄虚作假!
07
/
美国一晚宴上已有53人确诊新冠 涉及多名部长及高官
08
/
美媒:美国人预期寿命“罕见连降”
09
/
马斯克:大V很少发推文,推特正在死亡吗?
10
/
美国累计新冠肺炎确诊病例超8039万例
01
/
六大行的钱都去哪儿了?
02
/
18万亿国有行分行副行长落马,违反生活纪律收受巨额财物!
03
/
10分钟搞定!申请延期还房贷,会影响征信吗?记者上海实地探访→
04
/
因疫情不能按时还房贷怎么办?五大行回应!
05
/
这四类人群可申请房贷延期 不影响征信记录
06
/
山西整治虚拟货币“挖矿”行为
07
/
一图读懂:吉林市部分人群因疫情影响不能及时偿还房贷怎么办?
08
/
罗参议院院长、前总理和前财政部长克楚表示,罗将陷入经济危机