大家好,我是小一
震惊了,兄弟们
上一篇文章我不是发起了一个投票嘛,结果今天去看的时候,结果震惊到我了。先上图
下面那2票,有1票是我投的
既然大家这么热情,那我也不能拖后腿,加班出了这篇源码复现的文章。
另外,在指数估值的时候各大平台的算法都不一样,这个不知道大家是否感兴趣
如果感兴趣的人比较多,后面我也整理一下把相应的伪代码分享出来👇
下面开始今天的主要内容
先来看下昨天文章提到的几个概念,也是指数估值需要用到的一些核心点:
市盈率(PE):指数市盈率衡量了指数价格与收益的关系,一般来说,市盈率越低,指数越容易被低估,未来的成长性越高。
市净率(PB):指数市净率衡量了指数价格与净资产的关系,一般来说,市净率越低,投资价值越高。
PE(PB)百分位:判断当前的PE(PB)是否处于低位,可以用估值历史百分位,来分析指数估值在历史数据中所处的百分位。一般来说,百分位数值越小,指数的估值越低。
所以,计算指数估值最主要的问题就是能够获取到指数的历史PE/PB数据,然后计算出当前数值在历史中所处的百分位。
最后,根据相关估值算法确定当前的低估/高估状态,并在低估时买入,高估时卖出
下面就来看一下我是怎么计算的,以及相关源码
计算思路及源码
获取源码文件请直接在后台回复 估值计算
今天的代码👉科技含量比较高,所以仅限前20位读者免费领取,先到先得吧。
对了,今天的源码是在聚宽平台上运行的,因为聚宽的在线环境挺好用的,所以我就没有在本地测试。
建议大家认真考虑一下,别浪费名额。要是代码给你了,因为你在本地运行而导致出错的,我也没有太多的时间专门去一个个教,反而有些浪费
另外,源代码是我在公开的代码和官方API的基础做了个人的修改和优化,也算是站在巨人的肩膀上才有的。
下面开始具体的步骤演示
>1、导入相应的包
# 导入相应的包
from jqdata import *
import time
import datetime
import pandas as pd
from six import BytesIO
>2、获取PE/PB数据
get_valuation方法是官方给的一个接口,可以获取多个标的在指定交易日范围内的市值表数据
其中,市值表字段比较多,就包括我们需要的:总市值、市盈率、市净率等
对应的计算PE、PB数据的核心代码如下:
# 计算PE、PB
stocks = get_index_stocks(index_code, date)
df_PE_PB = get_valuation(stocks, start_date=date, end_date=date, fields=['pe_ratio','pb_ratio', 'market_cap'])
df_PE_PB['pe_value'] = df_PE_PB['market_cap']/df_PE_PB['pe_ratio']
df_PE_PB['pb_value'] = df_PE_PB['market_cap']/df_PE_PB['pb_ratio']
pe_value = df_PE_PB.market_cap.sum()/df_PE_PB.pe_value.sum()
pb_value = df_PE_PB.market_cap.sum()/df_PE_PB.pb_value.sum()
>3、计算百分位
在计算出PE和PB的历史数值之后,就可以进一步的算出近5年的历史百分位、近10年的历史百分位,以及全部百分位。
一般10年都会有一个完整的牛熊轮回,所以大多数平台这里都会取近10年的历史百分位
计算历史百分位的核心代码如下:
# 计算历史百分位
df_PE_PB2[tag+'_历史最大'] = df_PE_PB2[tag].max()
df_PE_PB2[tag+'_历史最小'] = df_PE_PB2[tag].min()
df_PE_PB2[tag+'_5年估值%'] = df_PE_PB2[tag].rolling(5*244).apply(lambda x: H_V_H(x), raw=True)
df_PE_PB2[tag+'_10年估值%'] = df_PE_PB2[tag].rolling(10*244).apply(lambda x: H_V_H(x), raw=True)
# 历史估值
df_PE_PB2[tag+'估值'] = df_PE_PB2[tag+'_10年估值%'].apply(lambda x: get_valuation_status(x))
>4、示例演示
下面我们以上一节文中:历史百分位1.49%,超级低估 提到的中证医疗为例,进行演示
代码运行之后,获取到的数据如下:
中证医疗指数的数据是从2014-10-31开始,一直到2022-11-04,不足10年,所以百分位用的是历史所有百分位
对应的PE、PB数据如下:
根据我自己的指数评估标准,为了展示方便,我进行了如下设置:
超低估用红色上三角表示
低估用黑色圆圈表示
高估用黄色圆圈表示
超高估用绿色下三角表示
最终绘制出来的图形如下:
👆这个图可以放大看,绝对有收获
指数刚开始的前三年,因为对比数据不足,所以不是很准确。
但是当经过了2015-2106年的牛熊之后,在后面2019年的表现可谓是相当出色
接下来是2022年,到底会怎样走,大家可以期待一下。
我相信:数据会带给我惊喜
OK,今天就到这,文章的最后,需要再做一个免责声明:上面所有的内容也只是我的个人推测,提到的所有基金/股票代码只是为了演示,仅供参考,不构成投资建议,投资有风险,入市需谨慎。
👆获取源码请在后台回复估值计算
最后,给大家推荐几篇我以前写的文章,可以简单了解一下量化原理以及一些常见的量化策略: