本系列通过一些实例介绍量化的入门知识,适合零基础的初学者。本篇计算三个宽基指数:沪深300、中证500、中证1000的估值百分位,并将其与价格百分位比较。

本文的程序运行前要先导入数据源和pandas库:

import akshare as ak    # 导入数据源
import pandas as pd    # 导入pandas库

pandas的数据分析功能非常强大,在量化分析中会经常用到,要熟悉掌握。

从上一篇《量化入门系列:四行代码实现A股的估值温度计》可以总结出,此类量化分析通常分为三个步骤:

第一步打开冰箱,不是,第一步是获取数据;

第二步是处理数据;

第三步是输出结果。

我们先来计算沪深300的估值百分位,估值百分位是指当前估值在历史上的百分位数。然后我们将估值和价格进行对比。在集思录上是将估值百分位数和指数的价格曲线直接对比,像这样:

橘色线是PE估值百分位,蓝色线是中证全指的价格曲线。本文为了更直观的体现对比差异,不直接采用指数的价格曲线,而是用指数的价格百分位,价格百分位是指当前价格在历史上的百分位。

hs300_pe_df = ak.stock_a_pe(market="000300.XSHG").iloc[-1708:]    # 获取沪深300的PE和收盘价数据
hs300_pe_pct = hs300_pe_df[['middlePETTM','close']].rank(ascending=True, pct=True)*100    # 计算PE和收盘价的历史百分位
hs300_pe_pct.plot(figsize=(16,8),grid=True,title='沪深300估值和价格百分位')    # 画图

第一行代码是通过AKShare的数据接口ak.stock_a_pe()接口获取沪深300的PE和收盘价的数据,在计算历史百分位时需要一个时间窗口(即用哪个时段的数据),这个时间窗口太长或太短都不好,A股历史上牛熊周期大概是7年,因此这里取过去7年的数据(7年*244个交易日=1708个交易日),代码中 .iloc[-1708:] 就是取最近1708个数据。取出来的数据是个DataFrame格式的表格,存放在变量hs300_pe_df中,可以用 print 语句来看下这个表格的内容:

print (hs300_pe_df)

其中日期部分是这个DataFrame的索引(index),这个DataFrame有5列(columns),分别为:成分股静态市盈率的均值、成分股TTM市盈率的均值、成分股静态市盈率的中位数、成分股TTM市盈率的中位数、收盘价。

第二行代码用于计算成分股TTM市盈率的中位数和收盘价的历史百分位,用到表格hs300_pe_df的其中两列(‘middlePETTM’ 和 ‘close’),用rank()函数来计算百分位,计算结果也是个DataFrame表格,存放在变量hs300_pe_pct中,我们可以查看下内容:

print (hs300_pe_pct)

上面表格的索引(index)为日期,表格有两列:PE的历史百分位和收盘价的历史百分位。

第三行代码是将表格hs300_pe_pct用折线图显示出来:

蓝线是PE百分位,橘线是价格百分位,可以看到两者的相关性比较高,毕竟PE的分子就是价格。但两者也有背离的时候,目前PE估值百分位在40%左右,价格百分位在90%左右,说明盈利的增长高于价格的增长。需要注意的是盈利是一个季度披露一次,有滞后性。

同样的方法可以画出中证500的PE的历史百分位和收盘价的历史百分位:

zz500_pe_df = ak.stock_a_pe(market="000905.XSHG").iloc[-1708:]    # 获取中证500的PE和收盘价数据
zz500_pe_pct = zz500_pe_df[['middlePETTM','close']].rank(ascending=True, pct=True)*100    # 计算PE和收盘价的历史百分位
zz500_pe_pct.plot(figsize=(16,8),grid=True,title='中证500估值和价格百分位')    # 画图

中证1000的PE的历史百分位和收盘价的历史百分位:

zz1000_pe_df = ak.stock_a_pe(market="000852.XSHG").iloc[-1708:]    # 获取中证1000的PE和收盘价数据
zz1000_pe_pct = zz1000_pe_df[['middlePETTM','close']].rank(ascending=True, pct=True)*100    # 计算PE和收盘价的历史百分位
zz1000_pe_pct.plot(figsize=(16,8),grid=True,title='中证1000估值和价格百分位')    # 画图

可以看到自2021年以来,沪深300、中证500、中证1000的估值百分位和价格百分位都出现了背离,其中以中证500最为显著,价格不断抬高,但估值水平不断下降,呈现出明显的喇叭状。

我们用柱状图来对比一下:

comparison_df = pd.DataFrame()
comparison_df['hs300'] = hs300_pe_pct.iloc[-1]    # 沪深300最近一日的估值百分位和价格百分位
comparison_df['zz500'] = zz500_pe_pct.iloc[-1]    # 中证500最近一日的估值百分位和价格百分位
comparison_df['zz1000'] = zz1000_pe_pct.iloc[-1]    # 中证1000最近一日的估值百分位和价格百分位
comparison_df.T.plot.bar(figsize=(10,5))    # 画图

comparison_df是一个DataFrame表格,用来存储三个指数最近一日的估值百分位和价格百分位,用print查看内容:

print (comparison_df)

comparison_df.T.plot.bar()是将表格comparison_df用柱状图画出来:

上图可以直观的对比估值百分位的位置和价格百分位的位置。

本篇介绍了三个宽基指数估值百分位的实现,下一篇继续介绍行业指数、主题指数、风格指数的估值百分位。想知道医药跌了快半年了,估值够便宜了吗?下篇给你答案。

本文涉及的数据接口的说明文档:

https://www.akshare.xyz/data/stock/stock.html?highlight=stock_a_pe#a-4

量化投资系列的文章目录:

1. 量化入门系列:用Anaconda和AKShare搭建免费的Python量化环境

2. 量化入门系列:四行代码实现A股的估值温度计

量化入门系列:沪深300、中证500、中证1000的估值百分位相关推荐

  1. A股常见的宽基指数:沪深300,中证500,和创业板指数

    沪深300指数:是国内最具代表性的指数 指数简介: 沪深300指数是由中证指数公司开发的,从上海证券交易所和深圳证券交易所挑选的规模最大,流动性最好的 300 只股票组成 其实指数的命名规则还是挺有意 ...

  2. python分析数据走势图_左大营 | python数据分析篇系列1——探索沪深300指数(附代码)(中)...

    探索沪深300指数(HS300)--基于Python(中) [承接上文] 写在前面:本文只做分析,提供观点,不构成投资建议 如需转载请微信联系:eosO_oke 佛系更新,关注不迷路 沪深300指数是 ...

  3. 多图解读三大股票指数 沪深300、中证500、中证1000有何细节差异

    指数分类的标准有很多,比如说按市场分.按投资标的分.按指数代表性分.从代表性来分类的话,一般可以分为有三类:综合指数.宽基指数.窄基指数. 综合指数是指成分股包含所有上市的股票,以反映全市场的状况,最 ...

  4. 使用tushare检验沪深300收益率和中证500收益率相关性

    使用tushare检验沪深300收益率和中证50收益率相关性 tushare 安装tushare 初始化tushare 获取沪深300和中证500数据 检验相关性 合并数据 计算相关系数 画图 tus ...

  5. tushare获得沪深300和中证500的股票

    tushare获得沪深300和中证500的股票 import tushare as tsresult = ts.get_zz500s() result.to_csv("zz500.csv&q ...

  6. python获取股指_用Python读取csv文件中的沪深300指数历史交易数据

    保存路径:D:\python\用Python读取csv文件中的沪深300指数历史交易数据 程序名称:readcsvhs300.py: 数据名称:沪深300指数历史交易数据.csv: 开发环境:Win7 ...

  7. Python爬虫入门:爬虫抓取沪深300指数列表

    使用Python3爬取沪深300指数列表 1. 思路分析 用chrome打开维基百科沪深300的页面,网址为:https://en.wikipedia.org/wiki/CSI_300_Index . ...

  8. Barra 结构化风险模型实现(1)——沪深300指数的风格因子暴露度分析

    米筐科技(RiceQuant)策略研究报告:Barra 结构化风险模型实现(1)--沪深300指数的风格因子暴露度分析 江嘉键 1 年前1 概述 Barra 结构化风险模型是全球知名的投资组合表现和风 ...

  9. fxmarket:9月25日黄金、沪深300、恒指策略分析

    一.市场综述 国内股指昨天冲高回落震荡整理,创业板走势类似,截止收盘,上证综指涨0.28%,上证50期指收涨0.22%,中证500期指下跌0.24%,沪深300期指微跌0.01%:北上资金方面,沪股通 ...

最新文章

  1. unity编辑器扩展_01(在工具栏中创建一个按钮)
  2. java-IO-基本输出输入流
  3. python 解析 配置文件
  4. mysql中间件研究(Atlas,cobar,TDDL)
  5. 一行代码不用写,就可以训练、测试、使用模型,这个 star 量 1.5k 的项目帮你做到...
  6. java 执行机制_Java类的执行机制
  7. python实现词云图
  8. 我如何获得了梦想中的亚马逊工作机会?
  9. jsp面试问题_JSP面试问答
  10. View的滚动原理简单解析(二)
  11. sonar报java.io.StreamCorruptedException: invalid internal transport message format, got (48,54,54,50)
  12. chrome浏览器历史版本
  13. Windows字体修改工具:一键更换系统字体 noMeiryoUI 2.41.0 中文绿色版
  14. cmd命令查询电脑序列号_查看电脑序列号_查看电脑序列号命令
  15. URLConnection 传入参数
  16. 【C/C++服务器开发】什么是服务器?服务器分类及构建一个简单的服务器系统
  17. 分享前端网站模板,HTML5的响应式设计模板
  18. GPRS模块(sim900a)联网(PC)测试失败篇
  19. 5G标准化进程提速 射频器件市场空间将打开
  20. STM32 - 通迅的基本概念

热门文章

  1. 车间工厂看板还搞不定,数据可视化包教包会
  2. ubuntu 11.04安装极点五笔
  3. 机器学习——聚类之k近邻算法及python使用
  4. dp的定义原理和dpi,ppi,px,pt,sp之间的区别
  5. 分解连续自然数的和_【编程练习】正整数分解为几个连续自然数之和
  6. 如何在 Linux 系统下检测硬盘上的坏道和坏块
  7. 如何在PC浏览器上看wap网站源码?
  8. Verilog实现自动售货机控制系统
  9. 55555555电饭锅电饭锅
  10. mysql 强制使用多个索引_mysql强制使用索引