当前位置: 首页 > news >正文

各类ETF跟踪指数的数据统计分析

由于ETF基金实际上是跟踪对应指数的,因此ETF基金的收益是受指数的变动情况影响的。根据美国市场的统计结果,指数短期的涨跌是很难预测的,但是长期向上的趋势是被反复验证过的。这篇文章主要做一下各类指数的数据统计,看看结果是否符合这一规律。

一、指数年涨幅统计

这里针对主要关注的ETF基金对应的指数,做一下长期数据的对比,看一下到底哪些宽基指数和行业指数更具有投资价值。

指数日K数据的获取方式如下:

df = ak.stock_zh_index_daily_em(symbol=code)

指数每年的涨幅计算公式如下:

年涨幅=指数每年最后一个交易日的收盘价/每年第一个交易日的收盘价-1

其中近三年、五年、十年的涨幅为近三年、五年、十年年涨幅的算术平均值。下表是对各类指数近十年来的年平均涨幅统计的数据。

从表中可以看出,由于近一年股市处于慢慢阴跌的熊市,所有指数今年来的涨幅均为负值。近三年平均涨幅仍然有38.9%的指数处于负值,近五年平均涨幅则只有16.7%的指数仍为负值。近十年除了银行和证券的平均涨幅为负值外,其余均转正了。从涨幅的整体分布上来说,短期投资亏损的概率很大程度上依赖于入场点指数与当前指数所处相对位置,但长期来说,赚钱的概率还是更大一些。当然,如果你一定要在6000点之上满仓,那现在大概率也还是亏损的。

总体来说,消费、食品饮料、酒等行业指数的平均涨幅较高;医药、信息、军工等行业指数的表现也不错。大盘指数和小盘指数的总体表现一般,但与美国股市的长期收益统计结果基本上是一致的。创业板的平均涨幅较高(这个结果是我没有料到的,等有时间分析看看是什么原因导致的),同样其标准差也最高,说明涨跌波动程度也是最大的。

注意:由于没有对获得的数据进行校验和清洗,因此数据大概率是存在错漏的,所得结论请大家谨慎参考,不建议直接作为投资依据。

统计采用的代码如下:

import akshare as ak
import matplotlib.pyplot as plt
import pandas as pd# 指数日K数据
name_list = ['沪深300', '中证500', '中证1000', '上证50', '创业板', '中证消费', '上证消费', '深证红利', '上证红利','300医药', '中证医疗', '证券公司', '中证银行', '中证酒', '食品饮料', '有色金属', '全指信息', '军工']code_list = ['sh000300', 'sh000905', 'sh000852', 'sh000016', 'sz399006', 'sh000932', 'sh000036', 'sz399324', 'sh000015','sh000913', 'sz399989', 'sz399975', 'sz399986', 'sz399987', 'sh000807', 'sh000819', 'sh000993', 'sz399967']
cll = ['代码', '名称', '近一年', '近三年', '近五年', '近十年', '标准差']
res_all = pd.DataFrame(columns=cll, index=range(len(code_list)))
k = 0
for code in code_list:# df = ak.stock_zh_index_daily(symbol=code)df = ak.stock_zh_index_daily_em(symbol=code)df['date'] = pd.to_datetime(df['date'])name = 'close'# df.rename(columns={'trade_date': 'date'}, inplace=True)# 统计每年收益、总体平均收益# s_date = df['date'].iloc[0]# s_year = s_date.year# e_year = datetime.datetime.today().year# yl = range(s_year, e_year, 1)# df[df['date'] == s_year]df_start = df.groupby(df['date'].apply(lambda x: x.year)).first()  # 每年第一个交易日df_end = df.groupby(df['date'].apply(lambda x: x.year)).last()  # 每年最后一个交易日df_rng = df.groupby(df['date'].apply(lambda x: x.year)).count()df_start.index = range(len(df_start))df_end.index = range(len(df_end))df_rng.index = range(len(df_rng))cl = ['date', 's_close', 'e_close', 'change', 'chg_mean', 'chg_std', 'year_rtn', 'rtn_mean', 'rtn_std']res = pd.DataFrame(columns=cl, index=range(len(df_start)))for i in range(len(df_start)):cyear = df_start.loc[i, 'date']res.loc[i, 'date'] = cyear.yearres.loc[i, 's_close'] = df_start.loc[i, name]res.loc[i, 'e_close'] = df_end.loc[i, name]res.loc[i, 'change'] = df_end.loc[i, name] / df_start.loc[i, name] - 1res.loc[i, 'chg_mean'] = res['change'].mean()  # 平均涨幅res.loc[i, 'chg_std'] = res['change'].std()  # 平均涨幅标准差# 年化收益=(结束年指数-开始年指数)^(1/年数)res.loc[i, 'year_rtn'] = (df_end.loc[i, name] / df_start.loc[i, name]) ** (df_rng.loc[i, name] / 365) - 1res.loc[i, 'rtn_mean'] = res['year_rtn'].mean()  # 年化收益均值res.loc[i, 'rtn_std'] = res['year_rtn'].std()# 计算近一年、三年、五年和10年的涨幅res_all.loc[k, '代码'] = code[2:8]res_all.loc[k, '名称'] = name_list[k]res_all.loc[k, '近一年'] = res['change'].iloc[-1]res_all.loc[k, '近三年'] = res['change'].tail(3).mean()res_all.loc[k, '近五年'] = res['change'].tail(5).mean()res_all.loc[k, '近十年'] = res['change'].tail(10).mean()res_all.loc[k, '标准差'] = res['change'].tail(10).std()k = k + 1res.to_csv(code+'收益统计.csv', index=False, mode='w', encoding='gbk')print(code)
res_all.to_excel('涨跌统计.xlsx', index=False)
print('计算完成!')
二、指数PE分布统计

这个图是对2017年11月24日~2022年11月23日沪深300指数每个交易日的PE-TTM与均值的偏离程度进行的分布统计。

PE-TTM获取方式如下:

df = ak.stock_a_pe_and_pb(symbol='000300.SH')

大家可能会问为什么是这个时间段,因为通过AKShare的stock_a_pe_and_pb()获得的只有这个时间段的数据。本来是想找到沪深300指数从建立以来的PE-TTM数据,测试了一下AKShare提供的几个函数,发现都只有一段时间的数据,所以就没有再找了。大家如果有更好的数据源请介绍给我用用^-^~~~

另外需要注意的是,免费数据源无法保证数据的完整性和准确性,通常都存在一些数据缺失和错误,需要大家自己想办法去甄别和校正。

大家如果对正态分布熟悉的话,可以看出来这个统计图总体上与标准正态分布比较接近。实际上,采用的数据周期越长,数据分布越接近标准正态分布。由于PE等于价格除以每股收益,如果把所有PE的均值当作内在价值,那么这个正态分布实际上反映了价格围绕价值上下波动的事实。

长期来看,PE在PE均值的正负一个标准差内变化的概率较大,而出现在正负两个标准差以外范围的概率较小。当然这是一个理论上的说法,指数的实际表现以及极端情况出现的时间长度其实是无法预计。我们所能知道的就是当PE出现在负两个标准差以外区域时,意味着指数处于底部,继续跌的概率较小;而PE出现在正两个标准差区域以外时,则意味着大概率处于顶部,继续涨的概率较小。当然,这个只是理论上的概率而已,概率较小不代表不会发生,市场的疯狂往往超出所有人的预计,要不然也不会存在“黑天鹅”了。

作为一个保守的傻瓜投资者,我们只能尽量不去赌那些小概率的事,比如在PE高高在上的时候满仓待涨。芒格说过,如果我知道自己会在哪里死去,我就永远都不去那儿。投资的第一原则是活下来,我们要向大咖学习。

三、结论

其实不想写什么结论,因为怕写错了误导大家☹。以前看到别人的文章或者书里面的一些策略和结论就很兴奋,打算照着立马大干一场。现在的第一反应是看看这个结果是在什么条件下得到的,能不能复现,什么情况和场景下能用(简直就是十万个为什么啊……)。实际上回测做的多了,就会发现大部分时候直觉是不靠谱的,而且普遍适用的结论非常少。很多策略并不是不对,而是有特定的前提条件或者应用环境,对这个前提理解的越深刻,获得好的结果的概率越大。如果对这个问题想不清楚,可能怎么做都是错的。

-----------------------------------

原创不易,请多支持!


http://www.taodudu.cc/news/show-4320629.html

相关文章:

  • vue + element-plus 开发中遇到的问题
  • Ardupilot Rpanion 4GLTE 网络性能测试 - 国内中转
  • react 用合计项
  • 超级简单的地图操作工具开发可疑应急,地图画点,画线,画区域,获取地图经纬度等
  • HarmonyOS开发案例:【生活健康app之实现打卡功能】(2)
  • 机器学习概念:一些基本概念
  • 右侧追击(二)——券商行业
  • windows 防火墙解除或禁止ping方法
  • windows防火墙 程序_如何允许应用程序通过Windows防火墙进行通信
  • windows防火墙开启后,设置准入端口
  • windows 防火墙日志_如何使用Windows防火墙日志跟踪防火墙活动
  • 告别神秘客,人力成本节约90%,DuDuTalk工牌用AI帮你智慧巡店
  • 美团拍店,一个“顺道”赚钱的小项目,去饭店的路上,饭钱有了
  • 扔硬币中的思考——隐含变量建模
  • 猪猪的机器学习笔记(一)微积分和概率论
  • 密码学之PRP/PRF转换引理
  • spark while_while循环怎么理解
  • JAVA后端面经总结——应用类
  • 《Effective C++》第三版 第六章 继承与面向对象设计 32~35条例
  • 30岁以后搞Android已经没有前途?复习指南
  • 小程序FMP优化实录,附小技巧
  • 用计算机核裂变模拟实验,SAS和蒙特卡罗模拟(1):开篇
  • 一些场景题
  • Mathorcup数学建模竞赛第六届-【妈妈杯】B题:小区车位分布的评价和优化模型(附特等奖获奖论文和Java代码)
  • 国科大2019年大数据分析课件作业 考试-程学旗 靳小龙 刘盛华
  • 新加坡国立大学计算机系访学,高盛华课题组徐衍钰(博)2019年8月-2020年1月于新加坡国立大学交流访学...
  • 日媒:争夺中国人才,跨国公司败北
  • 为什么那么多公司都选择灵活用工?
  • android 启动app过程,应用程序进程启动过程
  • CDA数据分析师携手万宝盛华开启人才培训新篇章
  • 盛华软件工作室 -开张了
  • Pandas数据分析案例(盛华化工锅炉排放数据可视化分析)
  • 爬虫教程1
  • 【良心教程】保姆级Python爬虫入门教程(一)——爬虫之初见
  • 裸金属服务器是什么?关于裸金属服务器架构原理详解
  • 服务器的操作审计信息,裸金属服务器关键操作审计