您现在的位置是:股票开户 > 股市大盘 > 股市大盘走势 >

股票指数的估值计算与可视化

股票开户2021-03-08 16:56人围观
简介监控股票指数的选取 A股市场近期如火如荼,代表核心资产的沪深300指数,近期突破了2015年大牛市的高点,直奔2007年的历史最高点而去,在如此火爆的行情下,有些投资者认为大行情来了,想跑步进场,而另一部分人觉得市场过热了,应该获利了结。那么此时,到底
监控股票指数的选取

A股市场近期如火如荼,代表核心资产的沪深300指数,近期突破了2015年大牛市的高点,直奔2007年的历史最高点而去,在如此火爆的行情下,有些投资者认为大行情来了,想跑步进场,而另一部分人觉得市场过热了,应该获利了结。那么此时,到底是加仓、减仓、持股还是持币观望,才是最合理的选择?

对于大家普遍关心的这个问题,数量技术宅作为量化投资者,将采用股票指数的估值模型,客观地为大家分析当前股票市场的投资价值。

我们这个股票指数估值模型,通过估值指标分位数来衡量市场的投资价值,而在介绍如何计算估值指标分位数之前,我们先明确一下我们这个模型需要监控的股票指数标的。

首先,A股市场无疑是我们重点关注的对象,A股市场典型的指数包括宽基指数,典型的如上证50、沪深300、中证500指数,这三个指数有对应的股指期货,关注度最高,创业板、中小板等指数,也是大家做中小盘股票经常关注的。除了宽基指数,行业(风格)指数,也是大家关注度比较高的,近期经常提到的好赛道,就是集中在消费、医药、科技等行业的个股,我们将A股的宽基、行业(风格)指数,纳入监控体系中。

此外,在国内市场,我们还能借道QDII的ETF投资一些海外市场的指数,例如香港的恒生指数、恒生中国企业指数,美股的三大指数:道琼斯工业指数、标准普尔500指数、纳斯达克指数,以及在美股上市的中概股组成的指数中概互联等。

A股市场的重要指数,加上海外市场我们能够投资的指数,就构成了我们这个股票指数估值监控系统的监控标的,当然,监控标的可以根据我们的投资需求、范围不断扩展。有了投资标的,接下来最关键的一步,就是我们如果构建估值体系,来衡量、比较这些标的投资价值。

 

如何衡量估值:估值指标分位数

我们将引入估值指标分位数,来对所有标的指数的投资价值,进行计算和评价。常用的估值指标有市盈率PE、市净率PB、市销率PS、以及分红率,这些指标相信大家已经耳熟能详。那么,估值指标的分位数又是如何来计算,我们先来看分位数的定义及计算公式。

我们用一个小例子,来为大家通俗的讲解分位数的概念。假如我们有10位同学的成绩分别是 :60,70,87,56,35,64,28,84,89,65。如果想在这10位同学中淘汰至少35%,同时让至少65%的同学晋级,你怎么选?当然的想法是找一个数,小于等于这个数的同学至少有35%,大于等于这个数的同学至少有65%,我们就把这个数记为0.35分位点,记为x_0.35,见下图:

要想顺利地找到这个数,需要将数据重新排序:28, 35, 56, 60,64, 65, 70, 84, 87, 89。排序后上面十个数分别记为x(1)到x(10)。至少有35%,即至少有10*35%=3.5个学生,所以x_0.35 ≥60=x(4);同时,至少有65%,即至少有1065%=6.5个学生,所以x_0.35≤60=x(4); 故二者取交集,x_0.35 =60。也就是说,35分位数等于60。

理解完这个例子,对于估值指标分位数,它的计算原理与我们举例的成绩是一样的,有两点不同,一是计算分位数的数据源,对于成绩来说是横截面数据(同一时间、不同学生的成绩),而对于估值指标的数据源,是时间序列数据(同一指数,历史不同时间点的估值指标)。二是,我们刚才的例子,是在知道分位数的前提下,计算该分位数对应的数据,而对于估值指标分位数则反之,我们获取到该指标最新的数据,从而计算数据对应在某个历史时间段的分位数。

接下来,我们就来看估值指标分位数计算的Python代码。这段代码很好理解,首先,我们对所需要计算的估值指标的历史时间序列数据排序,其次我们获取到最新的一个指标数据在所有数据排序后队列的位置,最后,我们将该位置除以序列总长度,就能得到对应估值指标的分位数了。

  •  
  •  
  •  
  •  
  •  
  •  
def cal_percentile(value, df_1):    PE_last = df_1[value].iloc[-1]    df_2 = df_1.sort_values(by=value, ascending=True).reset_index().drop(["index"], axis=1)    location = np.where(df_2[value] == PE_last)[0][0]    Percentile = round(location / len(df_2[value]), 4)    return Percentile

我们按照上述公式,计算所有监控指数的PE分位数,并按PE分位数从小到大排序。PE分位数越小,代表该指标处于历史的分位点越低,对应指数的投资价值也越大。

同理,计算所有指数的PB分位数,根据PB指标的特点,同样PB分位数越低,指数投资价值越大。

所有指数PS分位数排序,与PB、PE计算公式一致,也是分位数越低,越具有投资价值。

最后,指数分红率分位数排序,这里我们做了一个特殊的处理,在计算分红率分位数后,我们用100减去原始计算的分位数,由于分红率的原始指标越高,表示投资价值越大,为了与其他几个指标的方向统计,调整后的分红率分位数指标,依然可以看作是越小越有价值。

 

估值指标综合打分排序法

对于PE、PB、PS以及分红率指标来说,他们从不同的维度,衡量某个指数是否具有投资价值。在有的时候,不同指数的PE、PB等估值指标的分位点相差较远,以某个单一的估值指标分位数来衡量某个指数的投资价值,或是比较某个指数与其他指数的投资性价比,往往无法得到确切的答案。

因此,我们采用综合打分法,将PE、PB、PS以及分红率指标的分位数,进行简单的加权平均,得到所有分位数的平均值,同时,为了让最后的打分更加直观,我们同样使用100减去初始计算得到的平均分位数。这样一来,最终的得分越高,就代表该指数,在各个估值指标的分位数都排名靠前,各个估值指标都表明该指数的投资价值很大。

  •  
  •  
  •  
  •  
  •  
PE_Percent = cal_percentile('PE_TTM', df)PB_Percent = cal_percentile('PB_LF', df)PS_Percent = cal_percentile('PS_TTM', df)Div_Percent = round(1 - cal_percentile('DIVIDENDYIELD2', df), 4)Score = round((1 - (PE_Percent + PB_Percent + PS_Percent + Div_Percent) / 4) * 100, 4)

我们再来看一下,当我们采用这个估值评价体系计算得到综合评分后,哪些指数是目前来看,性价比最高的。我们可以看到,站在当下的时间点,房地产、建筑、电力公用事业,这些在过去一年几乎被市场、被主流投资人遗忘或抛弃的行业,反而具有极高的性价比和投资价值。

 

快速生成估值表

在上一小节,我们为大家生成了所有指数的单个估值指标、以及组合评分的对比柱状图。但也有一些投资者想明确的看到这些数据,或者想观测具体某个指数、各个估值指标分位数的详细数据。这也很容易做到,我们只需要将绘图所用的估值表的dataframe,保存为csv文件,并运用excel中的色阶功能,就能够清楚的看到原始数据,以及每个指数对应的投资热度。这里,越接近红色,代表该指数投资价值越大,越接近绿色,则反之。

这张估值表,我们也会在后期发布其他文章时,不定期的为大家更新,让大家能够对于自己想要做投资的指数,有一个基本的价值判断。

 

指数估值区间可视化

与此同时,除了生成不同指数的对照图、指数估值表之外,对于单一指数,我们还可以绘制其在时间序列上的估值图,我们同样采用分位数的方式,定义历史区间上的三种不同颜色。其中,粉色区间,代表了估值超过历史80%的分位数,需要警惕该指数是否高估;绿色区间,代表估值低于历史20%的分位数,该指数投资价值凸现;而黄色区间,代表该指数的估值处于20%-80%分位数之间,处于合理估值区域。

我们在文中,为大家绘制出关注度最高的几个指数:上证50、沪深300、中证500、中小板、创业板的估值图,对于其他的指数,大家也可以根据我们的源代码,修改获取的指数标的,就能绘制出不同指数的估值图。

从我们计算的估值表、绘制的估值图中,相信可以感受到,目前市场整体处于一个亢奋的状态,主流指数大多进入了80%分位数的粉红色区域,虽然距离15年的顶点估值尚存在差距,我们也无法预测市场何时到顶、何时反转,但至少,这个估值体系和可视化工具,为所有投资者,特别是价值投资者,提供了一个基于历史数据的客观的判断:目前的A股市场,处于相对高估状态。

文章评论