wywy1995 发布于2021-10-08
回复 190
浏览 17596
367
**摘要**
本策略使用加权后最近四报告期roe的变化量作为衡量企业净资产收益率改善幅度的指标,结合pb进行调仓,在使用roe之前根据资产负债情况进行简单筛选以提高策略的安全性,且本策略的收益不依赖市值因子。
**正文**
pb_roe是经典的估值模型,二者的比值就是我们熟知的pe。对于该模型的解释及应用网上有很多介绍,这里我谈谈自己的理解:如果把投资企业看做买债券,那么roe就类似于债券的利息,pb就相当于债券的市价与面值的比,那么人们肯定会倾向于持有利息高,市价尽可能低的债券,这也就是高roe与低pb组合选股背后的逻辑。当然,债券还面临一个问题,就是违约,即债券的安全性问题。类似的,在考察roe的时候我们也要考虑一个问题,就是roe只代表净资产,企业完全可以靠高额负债达到较高的净资产收益率,然而这样的经营模式所包含的的隐患在经济衰退或行业不景气时期会很容易暴露出来。从pb的角度我们也需要思考一个问题,就是资产中可能含有的不良资产比重。最近几年越来越多的出现市净率接近1甚至低于1的企业,然而他们的股价却依旧低迷。理论上讲,对于这样的企业如果以市价买入,再变卖全部资产是可以无风险套利的。实际上,企业的资产组成非常复杂,很多资产的价值也是依赖于特定会计准则评估的,实际变现非常困难。退一步讲,即使不变卖资产,拿在手里的资产也应该评估其质量,比如可能存在减值风险的资产,与其说是资产不如说是潜在的风险。
所以,虽然roe_pb从高资产收益与低资产价格组合的方面来说确实不错,但是加入对资产负债情况的考量后应该会有更好的表现。
**1.构建新roec因子**
从[【量化课堂】因子研究系列之二 -- 成长因子](https://www.joinquant.com/view/community/detail/ce242414cc2e8ef7d576857f13ee0f41)一文中我克隆并查看了聚宽示例的roe与roec因子的收益,由于原文中已经有2016年之前的展示,所以下图仅测试了2016至今5年的收益曲线,如下:
图1——聚宽roe

图2——聚宽roec

可见这个收益是非常差强人意的,于是我尝试对roec进行以下两种方式的改写
```
#1.不加权
df = get_history_fundamentals(initial_list, fields=[indicator.code, indicator.roe], watch_date=yesterday, count=5, interval='1q')
df = df.groupby('code').apply(lambda x:x.reset_index()).roe.unstack()
df['past_average'] = df.iloc[:,0] + df.iloc[:,1] + df.iloc[:,2] + df.iloc[:,3]
df['now_average'] = df.iloc[:,1] + df.iloc[:,2] + df.iloc[:,3] + df.iloc[:,4]
df['delta_average'] = df['now_average'] - df['past_average']
```
```
#2.加权,距离当前时间越近的报告期roe权重越大
df = get_history_fundamentals(initial_list, fields=[indicator.code, indicator.roe], watch_date=yesterday, count=5, interval='1q')
df = df.groupby('code').apply(lambda x:x.reset_index()).roe.unstack()
df['past_average'] = 0.1*df.iloc[:,0] + 0.2*df.iloc[:,1] + 0.3*df.iloc[:,2] + 0.4*df.iloc[:,3]
df['now_average'] = 0.1*df.iloc[:,1] + 0.2*df.iloc[:,2] + 0.3*df.iloc[:,3] + 0.4*df.iloc[:,4]
df['delta_average'] = df['now_average'] - df['past_average']
```
解释一下上述代码,首先取最近5个报告期的roe值,日期使用watchdate以避免未来函数,在不加权的情况下,上期roe_ttm是1-4期的roe总和,最新roe_ttm是2-5期的roe总和,用最新减去上期,得到的就是roe_ttm的改善度,也就是我们接下来要测试的因子,数值越大越好。加权版本就是在计算1-4期和2-5期时,对每一期的roe加以不同权重。之所以加权,是因为从直觉上讲,越是近期的数据对未来的影响应该越大。那么仅使用这两种方式构建的因子收益表现如何呢,对此,我在创业板指,沪深300,中证500上进行了测试,每个指数上都测试了十个分位按从小到大排序后的收益曲线,选股为每个分位起始后10-20只(根据指数容量),刷新频率为每周一次,测试时间皆为2011/08/31-2021/08/31,测试因子前排除了st,退市,次新,科创板,无中性化标准化去极值处理,结果如下:
图3——未加权创业板指

图4——未加权中证500

图5——未加权沪深300

图6——加权创业板指

图7——加权中证500

图8——加权沪深300

从图中可以看出暖色代表的高分位,即高roe改善度的组收益普遍高于冷色的低分位组,且大幅跑赢市场,且随着分位增加,收益增加,表现出一定的单调性(并不严格)。加权与不加权进行对比发现,似乎加权后高分位的单调性有所增强,另外,从各个指数加权与否自身的对比中可以看出,加权的总体收益并没有明显高于不加权。但由于只使用了三个指数进行测试,不排除这些都只是偶然现象。
**2.与pb的结合效果**
在之前的roe改善度测试中我们发现,基本上每个指数中,改善度最大的20-30%都表现最佳。那么在这个群体中,使用pb进行轮动效果如何呢?将pb按从小到大排成十个分位,测试时间,刷新频率,持仓数量,初步筛选,数据处理同上。因为沪深300与创业板指容量较小,分别将其换成全市场与创业板综合,中证500股票池不变,效果如下
图9——高分位加权roec结合pb后在创业板综上的表现

图10——高分位加权roec结合pb后在中证500上的表现

图11——高分位加权roec结合pb后在全市场上的表现

图12——加权与否结合pb后表现

从图中可以看出,以冷色调为主的收益曲线,即低pb轮动明显好于高pb,图12中可以看出,与之前结果稍微不同的是,使用加权roec在结合pb后,在各实验组中均好于不加权roec。
**3.从资产负债的角度进一步优化**
之前测试的结果已经比聚宽示例的roec因子好很多了,不过总体还在roe_pb框架内。如文章开头所说,加入对资产负债的考量后会不会进一步提高模型的质量?在查阅了一些资料以及与券商的朋友交流后,我尝试了以下方法。
首先是负债,一种看起来比较合理的方法是计算有息负债占比,详情可以参考这个视频——[每次都买欠钱最多的公司,会亏成啥样?](https://www.bilibili.com/video/BV1Tv411A7Qu?spm_id_from=333.999.0.0)。但是在这个模型中,实际测试的结果跟直接使用总负债比总资产效果差不多,甚至还要差一点,所以各位宽友可以自行抉择。其次是资产,我想考量不良资产的占比,但发现实际量化起来有点难度,首先就是不良资产不是一个会计科目,而是一个概念。比如应收拿不回来了变坏账可以是不良;在建工程,存货,商誉减值了,也算是不良。但坏事发生之前却无法判断。所以这里我只能简单的算出这几项容易出问题的会计科目的总值,占比在全市场中排名最大的企业排除掉。后来测试发现,占比特别小也不是好事,因为以存货和应收为例,这些项目以后都很有可能转化为利润,所以把最小的一部分也排除掉,即去掉最大最小20%,保留中间60%。如果您有更好的方案欢迎讨论,或者直接不使用这个筛选条件也没关系,对收益影响不大,主要是我出于安全性考虑在下面的回测中保留了这部分。
图13——负债率筛选效果

图14——不良资产筛选效果

**最后**
很多人喜欢问某个策略收益好是否因为小市值因子,那么这个策略可以放心的告诉你,一点不带市值的因素。pb实际上起到了代替了cap的作用,本质上也是一种期望均值回归的轮动。所以对于担心过于依赖小市值因子风险暴露的投资者来说,它提供了另一种选择。而且这个策略很适合防守,一般来讲pb越低的安全边际也越高,可能这也就是为什么在2021年沪深300表现疲软的情况下,不择时依旧能有50%收益的原因。另外,下面展示的回测中的收益也是不包含择时的,理论上还能通过择时或控制仓位等手段进一步提高收益,减小回撤。另外,策略当前夏普率处于比较高的位置,随时可能面临回调。
评论
谢谢分享,我也克隆了。加上rsrs择时是不是可以降低回撤?
2021-10-08
厉害了,你的都是精品,逻辑很强
2021-10-08
@Gyro 感谢大佬的认可!
2021-10-08
@dralong 我试过,效果不太好,不知道调下参数会不会好点
2021-10-08
@student_001 感谢评论
2021-10-08
@speedwind 没择时没风控只能这样,您可以继续优化下
2021-10-08
18年的下跌感觉很多价值策略都没法避免地回撤,21年其实很像,但你这也能稳步上涨,很厉害耶
2021-10-08
刚才评论漏看了文中最后的话,但18年没有像21年一样上涨,效果为啥会不同呢?
2021-10-08
@努力jjian 谢谢,不过今年感觉更像是补涨,因为19-21年初这个策略一直没有很亮眼的表现。而且根据历史的夏普率波动范围来看,像今年这样的的收益很难连续维持两年。
2021-10-08
@努力jjian 18年的情形感觉更艰难一点,宏观层面无论是贸易战,还是去杠杆都导致流动性比较紧,我测试过的几乎所有因子在18年表现都不好,这点在08年金融危机的时候也一样。所以21年只能说情形还算乐观,至少能支持结构性牛市,所以有的因子还能表现不错
2021-10-08
@wywy1995 是噢,才发现,而且很奇怪,20年正是茅台这些绩优股大涨的时候,居然整年表现不算很好
2021-10-08