欢迎关注我的公众号【小散逆袭大本营】
学到目前这个程度,我们已经可以画出个股的PE和PB曲线图了。但是我们知道,对于个股来说,PE或者PB的参考价值很有限,不同类型企业,其PE的市场认可程度是不同。我们几乎不可能通过仅仅判断个股的PE和PB来做出一个像样的量化交易策略。
不过对于指数而言,特别是宽基指数(沪深300之类的),其历史PE和PB值的参考价值就非常大了。我在《小散逆袭手把手教你做量化定投》这本书中已经做了示范,指数的PB可以说是一把不错的衡量该指数估值高低的尺子。
那么我们下面就在聚宽中,用python来做出一个指数的PE走势图吧。
小目标三:
计算出上证50指数过去10年每天的PE数值,并画出走势图。
拿到问题后,首先需要思考解决问题的思路。有一点可以明确,聚宽中并没有提供指数的PE数据获取函数,我们只能自己计算。那么先从简单的情况入手,怎么计算出一天的上证50指数PE数值呢?
我们先得知道,指数的PE数值是怎么计算的。严格来说,应该参照中证网的计算规则进行计算,但是分类靠档的计算很复杂,所以目前比较通用的近似计算公式就是PE = 成份股市值之和÷成份股净利润之和。比如我要计算9月10日上证50的PE,就得知道当天上证50指数的成份股有哪些,然后计算出这些成份股的总市值之和,再算出成份股的净利润之和,二者一除就是当天的指数PE了。
获取某个指数成份股,聚宽已经提供了函数,如下
这个函数的使用很简单,大家自己练习一下就清楚了。
成份股有了,下面就需要得到每个成份股的总市值和净利润了。这里有个问题需要说明一下。市盈率有两种,一种叫静态市盈率,一种叫滚动市盈率。静态市盈率=当前股价÷上一财年的每股收益。滚动市盈率=当前股价÷过去四个季度每股收益。显然,滚动收益率更能有效的反应股票当前的PE水平。所以,一般情况下,我们都默认市盈率为滚动市盈率(PE(TTM))。
在聚宽的财务函数中没有直接能获取过去四个季度净利润的函数,但是可以获取个股的PE(TTM)和总市值,那么通过这两个数据可以计算出过去四个季度的净利润。
这样,计算指数某天的PE数值具体实现如下
为了后面计算方便,我把这个功能定义为一个函数,指数代码和日期都是参数。(这里我要感谢一位群友(ID:I20181129),他给了我一段代码,我稍加修改就成了上面这个代码。他的这个代码比我之前自己弄的效率高出很多很多,大大缩减了计算时间。)我试验了一下上证50指数9月10日的PE数值,计算出的结果和雪球网公布的是一样的。
好了,今天就写到这里。