基于Python的指数基金量化投资——指数基金间相关度计算
每一种指数基金都是由一篮子股票组成的,少的有几十个成分股,多的有几百上千个成分股,而整个A股目前有四千多家上市公司,每种指数基金都从A股这个大篮子里面选取成分股,那就会有个问题,不同的指数基金选择的成分股会有重叠,重叠度是多少,这是一个很重要的指标。
从投资的角度来看,一定程度的分散覆盖度更好,同时抗非系统风险能力也会更强,但如果太分散也不好,过度分散和买下整个A股没有什么区别,投资收益也会变低。
举个例子,如果指数A包含100个成分股,指数B也包含100个成分股,但他们有50个成分股是相同的,不考虑权重影响的情况下,他们的相似度就是50%,意味着如果你买入1份指数A的话,相当于间接买入了0.5份的指数B。
在我们的实际投资过程中,不可能只投资一只指数基金,所以肯定会存在相关度的问题,在选择投资品种的时候要通过相关度选择相关性低的指数基金形成组合来进行投资。
那怎么获得指数基金间的相关度数据呢,可以简单考虑个股的重合度来进行考量,通过下面的简单公式进行计算:
(Cnt/LenA + Cnt/LenB)/ 2
Cnt表示A指数和B指数的重叠成分股数量
LenA表示A指数成分股数量
LenB表示B指数成分股数量
通过这个计算公式可以获得下面的矩阵相关图,横坐标和纵坐标对应相应的指数基金品种,图中的数据表示横纵坐标指数对应的相关度数据。
例如,沪深300和300医药的相关度为0.55,沪深300和全指医药的相关度为0.11,沪深300和医药100的相关度为0.19,沪深300和中证500的相关度为0,创业板指和医药100的相关度为0.22。
对角线由于指数基金是一致的,也就是自己和自己相关,所以对应的数据全是1。
从上面的矩阵图中能很清晰的看出各个指数基金的相关度,选择相关度低的进行投资,如果数据为0是最好的,例如沪深300加中证500进行组合,中证白酒+中证医药进行组合;避免相关度高的进行投资,例如基本面50+中证100进行组合、中证红利+红利指数进行组合。
源码
#源码中用到的indexType文件下的指数数据.csv请参看《基于Python的指数基金量化投资——指数包含的个股数据获取》
import pandas as pd
import os
import numpy as np
import matplotlib.pyplot as plt
import seaborn as snsnum_file = os.listdir('./importfile/indexSeries/indexTpye/')
name_file = list()relation_matrix = np.zeros((len(num_file), len(num_file)))
col = 0
row = 0
for index_a_name in os.listdir('./importfile/indexSeries/indexTpye/'):label_name = pd.read_csv('./importfile/indexSeries/indexTpye/' + index_a_name)name_file.append(label_name.values[1][2])for index_b_name in os.listdir('./importfile/indexSeries/indexTpye/'):index_a = pd.read_csv('./importfile/indexSeries/indexTpye/' + index_a_name)index_b = pd.read_csv('./importfile/indexSeries/indexTpye/' + index_b_name)stock_code_a = list()stock_code_b = list()for i in range(len(index_a)):len_name = len(str(index_a.values[i][4]))if len_name == 1:stock_code_a.append('00000' + str(index_a.values[i][4]))elif len_name == 2:stock_code_a.append('0000' + str(index_a.values[i][4]))elif len_name == 3:stock_code_a.append('000' + str(index_a.values[i][4]))elif len_name == 4:stock_code_a.append('00' + str(index_a.values[i][4]))elif len_name == 5:stock_code_a.append('0' + str(index_a.values[i][4]))elif len_name == 6:stock_code_a.append(str(index_a.values[i][4]))else:stock_code_a.append('none_a')for i in range(len(index_b)):len_name = len(str(index_b.values[i][4]))if len_name == 1:stock_code_b.append('00000' + str(index_b.values[i][4]))elif len_name == 2:stock_code_b.append('0000' + str(index_b.values[i][4]))elif len_name == 3:stock_code_b.append('000' + str(index_b.values[i][4]))elif len_name == 4:stock_code_b.append('00' + str(index_b.values[i][4]))elif len_name == 5:stock_code_b.append('0' + str(index_b.values[i][4]))elif len_name == 6:stock_code_b.append(str(index_b.values[i][4]))else:stock_code_b = 'none_b'cnt = 0for i in range(len(stock_code_a)):for j in range(len(stock_code_b)):if stock_code_a[i] == stock_code_b[j]:cnt = cnt + 1relation_matrix[row][col] = (cnt / len(stock_code_a) + cnt / len(stock_code_b)) / 2col = col + 1row = row + 1col = 0figure = plt.figure(facecolor='w')
plt.rcParams["font.sans-serif"] = ['Microsoft YaHei']
ax = figure.add_subplot(1, 1, 1)
sns.heatmap(relation_matrix, cmap='Reds', linewidths=0.1, vmax=1.0, square=True, annot=True)
ax.set_yticks(range(len(name_file)))
ax.set_yticklabels(name_file)
ax.set_xticks(range(len(name_file)))
ax.set_xticklabels(name_file)
plt.xticks(rotation=90)
plt.yticks(rotation=360)
plt.show()
程序中用到的数据如果有问题,大家可以留言获取也可以添加小将前行的微信xjqx_666进行获取,欢迎大家一起交流沟通_
课程参考:基于Python的量化指数基金投资
基于Python的指数基金量化投资——指数基金间相关度计算相关推荐
- 基于Python的指数基金量化投资——指数基金偏离度计算
什么是指数偏离度 它是指数涨跌的快慢和偏离幅度指标. 当指数快速上涨,偏离度数据会迅速的向上偏离,当快速下跌时,偏离度数据会迅速的向下偏离. 而持续的上涨中出现下跌,偏离度就会急转直下,另一种持续的下 ...
- 基于Python的指数基金量化投资 - 指数投资技巧(三)不定期定额
指数投资方式中有四种基本的方法,分别是定期定额.定期不定额.不定期定额和不定期不定额,这四种方式投资效果不同,对投资者的要求也不同,定期定额最简单,但收益不算高,不定期不定额最复杂,对投资者的要求最高 ...
- 基于Python的指数基金量化投资——指数数据获取
做基金的量化,最最重要的是要有数据,所以指数的数据是所有分析的源头. Baostock就提供比较全面的指数数据,具体可以参考<基于Python的指数基金量化投资 - 股票数据源baostock& ...
- 基于Python的指数基金量化投资——指数包含的个股数据获取
要计算指数的加权值,指数的市盈率.市净率,或者指数的净资产收益率,都需要用到指数所包含的个股信息,前面分享的<指数的净资产收益率计算>和<指数的市盈率和市净率计算>等文中都有提 ...
- 基于python的股票程序化交易论文_基于Python工具的股票量化投资策略研究
2019 年第 07 期 20 世 纪 80 年代, 一 些 投 资 者 开 始 利用 计 算 机 研究金 融 数据 , 并 初显 成 效 . 20 世 纪 末 , 投 资 者 把 计 算 机 技术 ...
- 基于Python的指数基金量化投资——A股全市场成交量计算
成交量是反映市场情绪和流动性一个很重要的指标,当出现牛市时成交量会急剧放大,当出现熊市时成交量会急剧缩小. 通过成交量可以反映出市场的情绪是处于正常.平淡还是疯狂,可以在一定程度上指导我们的投资操作, ...
- 基于Python的指数基金量化投资 ——A股所有个股名称和证券代码获取
前面介绍过怎么获取A股个股的数据<基于Python的指数基金量化投资 - 股票数据源baostock>,里面包含了个股的各种历史数据,包含:股价.市盈率.市净率.成交量.换手率等等. 但是 ...
- 基于Python的指数基金量化投资-股票数据源baostock
基于Python的指数基金量化投资-股票数据源baostock 课程参考:基于Python的量化指数基金投资 微信公众号: 量化用到的数据源来自baostock,可以通过www.baostock.co ...
- 基于Python的指数基金量化投资-为什么量化指数基金投资
上一次写了基于Python的指数基金量化投资-股票数据源baostock 这次来说一下为什么要量化指数基金投资. 进行指数基金投资我们需要清楚几个关键点:该投资哪些指数品种,为什么投资这些品种.这些品 ...
最新文章
- 【原】DjianGo Windows7下的安装
- BZOJ4155 : [Ipsc2015]Humble Captains
- 批创建清账凭证,POSTING_INTERFACE_CLEARING
- 在C ++应用程序中使用Designer UI文件
- 火炬之光2找不到服务器,火炬之光2无法运行解决办法详细介绍
- 在MSF中怎么区分易混淆的工作项类型:Bug、风险和问题(我个人的理解)
- 微信小程序知识点GET
- 剑指Offer - 面试题56 - I. 数组中数字出现的次数(异或,分组)
- 《深入实践Spring Boot》一3.3 使用Thymeleaf模板
- #华为云·寻找黑马程序员# 如何实现一个优雅的Python的Json序列化库
- 首发Android 13!谷歌Pixel 7 Pro渲染图曝光:后置相机模组吸睛
- 案例学习BlazeDS+Spring之八InSync06“松耦合”UI同步事件通知
- Hadoop相关问题解决
- 远程管理软件Royal TSX for Mac
- java万能万年历的程序_Java万年历
- 当前电子计算机发展的局限性,工程测量技术发展现状与趋势
- Rxjava2中Single的just操作符源码学习
- 华为手机隐藏指令的5个代码
- andriod studio 开发
- Johnson-Trotter算法求全排列