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

数量技术宅团队在CSDN学院推出了量化投资系列课程

欢迎有兴趣系统学习量化投资的同学,点击下方链接报名:

量化投资速成营(入门课程)

Python股票量化投资

Python期货量化投资

Python数字货币量化投资

C++语言CTP期货交易系统开发

数字货币JavaScript语言量化交易系统开发


更多精彩内容,欢迎关注公众号:数量技术宅,获取本期分享的完整代码,可添加技术宅个人微信号:sljsz01,与我交流

监控股票指数的选取

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,见下图:

img

要想顺利地找到这个数,需要将数据重新排序: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股市场,处于相对高估状态。

最后,如果大家想要获取文中完整的python代码,或是文章内容有任何的问题,欢迎扫码添加技术宅的个人微信,与我交流。

图片

本期代码同步放送在数量技术宅知识星球:量化学院

欢迎加入数量技术宅知识星球:量化学院,知识星球每日更新,内有更多量化干货,等着你来学习。星球学院=公众号全策略+星球独家量化干货+答疑+日更。欢迎订阅量化学院,用一年的时间,做一件让自己感动的事。(下图为部分量化学院更新内容)

图片

欲加入量化学院的同学,请添加技术宅微信sljsz01领取星球优惠券,限最后3位优惠名额,谢谢。

图片


 

往期干货分享推荐阅读

分享一个年化15%以上的无风险套利机会

【数量技术宅|交易系统开发系列分享】网格交易系统开发

通过深度学习股价截面数据分析和预测股票价格

剖析一个数字货币高频策略

数字货币交易信号实时预警推送(含群聊)

Omega System Trading and Development Club内部分享策略Easylanguage源码

量化交易如何选择云服务器,如何在本地远程开发与调试云服务器程序

一个真实数据集的完整机器学习解决方案(下)

一个真实数据集的完整机器学习解决方案(上)

如何使用交易开拓者(TB)开发数字货币策略

股指期货高频数据机器学习预测

如何使用TradingView(TV)回测数字货币交易策略

如何投资股票型基金?什么时间买?买什么?

【数量技术宅|量化投资策略系列分享】基于指数移动平均的股指期货交易策略

AMA指标原作者Perry Kaufman 100+套交易策略源码分享

【 数量技术宅 | 期权系列分享】期权策略的“独孤九剑”

如何获取免费的数字货币历史数据

【数量技术宅|金融数据分析系列分享】套利策略的价差序列计算,恐怕没有你想的那么简单

【数量技术宅|量化投资策略系列分享】成熟交易者期货持仓跟随策略

【数量技术宅|量化投资策略系列分享】多周期共振交易策略

【数量技术宅|金融数据分析系列分享】为什么中证500(IC)是最适合长期做多的指数

  大宗商品现货数据不好拿?商品季节性难跟踪?技术宅带你Python爬虫一键解决没烦恼

【数量技术宅|金融数据分析系列分享】如何正确抄底商品期货、大宗商品

【数量技术宅|量化投资策略系列分享】股指期货IF分钟波动率统计策略

【数量技术宅 | Python爬虫系列分享】实时监控股市重大公告的Python爬虫

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

数量技术宅

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值