前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >业绩超预期因子

业绩超预期因子

作者头像
量化小白
发布2020-03-18 18:06:28
2.6K0
发布2020-03-18 18:06:28
举报

学术界很早就发现,股票市场存在显著的盈余公告后的价格偏移现象(Post-Earnings Announcement Drift PEAD)。通俗解释来说,投资者对于公司的盈利有一个预期值,如果财报公布后,公司的实际盈利超出了投资者预期,公司的股价会上升,会有明显的超额收益。如果实际盈利低于投资者预期,公司股价会下降,会有明显的负向收益。本文基于这一现象构造盈利超预期因子,并对因子进行测试。后台回复“业绩超预期”获取代码和参考文献,限时免费。

01

业绩超预期定义

PEAD最早提出早在1986年,学者们发现美国市场存在盈余公告后的价格偏移现象。之后学者们对各国股票市场都进行的研究,基本都存在这一现象,PEAD是非常稳健的一个学术异象。

首先对PEAD做一些分析。PEAD的定义是非常容易理解的,如果企业的盈利好,超出人们的预期,那么股票会上涨,也符合直观逻辑。

对于为什么会存在PEAD,即为什么盈利超预期的股票会涨?主流的逻辑是认为PEAD是投资者对盈余公告的延迟反映,是市场无效的结果。也就是说,市场对于盈余公告的反应不及时,存在套利空间。这里的盈余公告,不仅包括企业每年的财务报告,也包括业绩快报、业绩预告、公司公告等。也有从风险补偿和交易成本摩擦角度解释的,但没有得到广泛认同。

结合上文的逻辑,PEAD现象存在有两个条件,一个是业绩超出预期,另一个是市场反映不及时。对于第一点来说,对预期值的定义非常关键,学术界存在各种各样的方法,后面说明。对于第二点,也是这个现象可能失效的原因,如果企业的股价在财报出来之前,已经推的很高了,即使盈利超预期,大概也很难有正向超额收益,因为股价里可能已经包含了对超预期的反映。另外如果大量的投资者都发现了这一现象去投资,慢的人可能会去接快的人的盘。国内现在最慢的可能是韭菜了。

02

业绩超预期度量

大多数的学术研究采用公告值和预期值做差之后除以规模数作为超预期的度量,除以规模数是为了不同企业间可比。即

公司的标准化预期外盈利(standarized unexpected earnings SUE)作为Earnings Surprise的度量:

SUE = (Q - E(Q))/sigma

其中,Q表示公司公告的净利润,E为对净利润的预期值,sigma为预测的标准差。

类似的,公司的标准化预期外营业收入(standarized unexpected revenue SUR)作为revenue SUR的度量:

SUR = (REV - E(REV))/sigma

REV为公告的营业收入,E为预期的营业收入,sigma为预期的标准差。

这里的REV、Q都使用单季度数据。

对于预期值的度量,目前主要有三种方法:时间序列建模、分析师预期和横截面回归建模。本文主要介绍并实现时间序列建模的部分,分析师预期的方法即使用卖方分析师的一致预期数据均值作为预期值。横截面回归下次说明。

关于时间序列建模,常用的时间序列模型包括

本文使用带漂移项和不带漂移项的季节性随机游走模型建模,估计预期值,具体说明如下

带漂移项的季节性随机游走模型:

Q(i,t) = Q(i,t-4) + c(i,t) + e(t)

E(Q) = Q(i,t-4) + c(i,t)

不带漂移项的季节性随机游走模型:

Q(i,t) = Q(i,t-4) + e(t)

E(Q) = Q(i,t-4)

其中,Q(i,t)表示公司i在第t期的单季度净利润/营业收入,c为截距项,e为误差项。

漂移项c可以用过去两年 Q(i ,t) - Q(i,t-4) 的均值估计,预测的标准差sigma,对于含漂移项的模型,用Q(i ,t) - Q(i,t-4) 的标准差估计,不含漂移项的模型,用Q(i ,t) - Q(i,t-4) 的不带均值的标准差估计。

03

业绩超预期因子测试

基于上面的说明,分别构建两个SUE因子和SUR因子,建模时每一期使用过去8个季度有数据的所有上市公司。

由于手头没有数据,本文的测试基于聚宽和米筐完成,两个平台上都上传了代码。

回测区间:20091231-20191231

全A股,剔除ST和新股

计算因子IC,先看不做行业市值中性化的结果

  • SUE-含漂移项
  • SUE-不含漂移项
  • SUR-含漂移项
  • SUR-不含漂移项

不做中性化时,带漂移项的业绩超预期因子ICIR更高,不带漂移项的因子IC更高。

对因子用申万一级行业和流通市值做市值行业中性化后计算IC如下

  • SUE-带漂移项
  • SUE-不带漂移项
  • SUR-带漂移项
  • SUR-不带漂移项

可以看出,中性化后,因子稳定性明显上升,ICIR变大。

分层测试结果

限于篇幅,这里只给出中性化后的,未中性化的结果可以在代码文件中查看。

  • SUE-带漂移项
  • SUE-不带漂移项
  • SUR-带漂移项
  • SUE-不带漂移项

不带漂移项的SUE因子表现最好。

04

业绩超预期模拟组合

接下来给出在米筐和聚宽平台上,模拟组合的结果

  • 回测区间:200912-201912
  • 股票池:中证800
  • 规则:中性化后的因子降序排列,买入最大的100只股票,每月末月度调仓
  • 限于篇幅,只给出SUE后的结果。
  • SUE-带漂移项-不中性化
  • SUE-不带漂移项-不中性化
  • SUE-带漂移项-中性化
  • SUE-不带漂移项

聚宽结果和米筐结果差异较大,可能是数据差异还有模拟成交的区别,但都是不带漂移项更好

05

结果分析

从结果来看,SUE和SUR因子是非常有效的,当然整个分析过程非常粗糙,还有很大的提升空间。比如前文提到,业绩超预期因子有效的关键是市场反映不及时,体现在数据上就是要用最新的数据,所以要让模型效果更好的话,应该是结合业绩快报、业绩预告、公司公告的数据,以更高的频率去调仓,这里因为直接用的平台的数据,没有做更细致的分析。

06

代码

只给出因子定义和模拟组合部分的代码,其他代码见代码文件

因子定义

def getSUE(res):
    res = res.copy()
    res = res.reset_index().sort_values(by = 'order_book_id')
    dates = res.date.tolist()
    res = res.drop(['date'],axis = 1).set_index('order_book_id')
    
    resv = res.values
    q_mean = np.mean(resv[:,1:-4] - resv[:,5:],axis = 1)

    q_std1 = np.std(resv[:,1:-4] - resv[:,5:],axis = 1)
    q_std2 = np.sum((resv[:,1:-4] - resv[:,5:])**2,axis = 1)**0.5/resv.shape[0]
   
    e_q1 = resv[:,4] + q_mean
    e_q2 = resv[:,4]
    SUE1 = (resv[:,0] - e_q1)/q_std1
    SUE2 = (resv[:,0] - e_q2)/q_std2
    
    f = np.array([res.index,dates,SUE1,SUE2]).T
    return f
  • 模拟回测代码-米筐
  • 模拟回测代码-聚宽

参考文献

[1]20180518-东方证券-东方证券因子选股系列研究之三十九:业绩超预期类因子

[2]20200219-长江证券-长江证券专题报告:业绩超预期中的投资机会-000001

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-03-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 量化小白躺平记 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档