2020-11-13
数据分析
00

目录

基金组合信息
获取各指数历史数据
计算基金对应指数

练习Python,计算指数基金组合对应的指数,并绘制变化趋势。

基金组合信息

基金组合中一共有 7 支基金,分别为a,b,c,d,e,f,g。创建一个 Dataframe 用来存放各支基金在组合中的份额占比以及跟踪的指数。指数代码从新浪财经查找。

python
import pandas as pd data1 = {'rate': [0.2097, 0.0989, 0.0966, 0.0884, 0.2174, 0.1906, 0.0984], 'indexname': ['上证指数', '中证500', '沪深300', '上证指数', '上证指数', '深证金融地产行业指数', '上证指数'], 'indexnum': ['sh000001', 'sh000905', 'sh000300', 'sh000001', 'sh000001', 'sz399619', 'sh000001'] } df1 = pd.DataFrame(data1, index=list('abcdefg')) display(df1)
rate indexname indexnum
a 0.2097 上证指数 sh000001
b 0.0989 中证500 sh000905
c 0.0966 沪深300 sh000300
d 0.0884 上证指数 sh000001
e 0.2174 上证指数 sh000001
f 0.1906 深证金融地产行业指数 sz399619
g 0.0984 上证指数 sh000001

获取各指数历史数据

利用 AkShare 获取各指数的历史数据。因为股票基金是以收盘价定价,所以只需要各指数的收盘价来合成基金组合的对应指数。

python
import akshare as ak df2 = df1.drop_duplicates(subset='indexnum', keep='first', inplace=False) data2 = {} for i in df2['indexnum']: stock_zh_index_daily_df = ak.stock_zh_index_daily(symbol=i) data2[i] = stock_zh_index_daily_df['close']

基金份额作为基金在组合中的权重,给每只基金追踪的指数乘以权重。

python
data3 = {} for i in df1.index: data3[i] = data2[df1.loc[i, 'indexnum']] * df1.loc[i, 'rate'] df3 = pd.DataFrame(data3) df4 = df3.dropna(axis=0, how='any') display(df4)
a b c d e f g
0 20.965806 97.607080 127.169553 8.838232 21.735652 624.215191 9.838032
1 21.890583 99.259304 125.781314 9.228076 22.694386 614.938689 10.271976
2 22.884561 98.365446 124.876172 9.647092 23.724862 614.153798 10.738392
3 24.021135 98.663233 122.937507 10.126220 24.903170 615.741686 11.271720
4 25.216425 99.526729 123.769813 10.630100 26.142350 624.679492 11.832600
... ... ... ... ... ... ... ...
2735 332.051772 623.495270 236.618899 139.977952 344.244421 1151.094773 155.812562
2736 327.414885 618.399250 241.072931 138.023252 339.437273 1159.137140 153.636742
2737 330.578839 627.443951 238.396725 139.357031 342.717404 1147.121716 155.121401
2738 322.013852 633.143459 236.409760 135.746421 333.837918 1149.457519 151.102351
2739 311.427148 631.412215 236.635127 131.283547 322.862479 1093.204598 146.134627

2740 rows × 7 columns

计算基金对应指数

将所有基金乘以权重后的指数相加,得到加权平均值,作为基金组合的指数。

python
df4['all'] = df4.iloc[:, 0:6].sum(axis=1) display(df4)
a b c d e f g all
0 20.965806 97.607080 127.169553 8.838232 21.735652 624.215191 9.838032 900.531514
1 21.890583 99.259304 125.781314 9.228076 22.694386 614.938689 10.271976 893.792352
2 22.884561 98.365446 124.876172 9.647092 23.724862 614.153798 10.738392 893.651931
3 24.021135 98.663233 122.937507 10.126220 24.903170 615.741686 11.271720 896.392952
4 25.216425 99.526729 123.769813 10.630100 26.142350 624.679492 11.832600 909.964909
... ... ... ... ... ... ... ... ...
2735 332.051772 623.495270 236.618899 139.977952 344.244421 1151.094773 155.812562 2827.483087
2736 327.414885 618.399250 241.072931 138.023252 339.437273 1159.137140 153.636742 2823.484731
2737 330.578839 627.443951 238.396725 139.357031 342.717404 1147.121716 155.121401 2825.615666
2738 322.013852 633.143459 236.409760 135.746421 333.837918 1149.457519 151.102351 2810.608930
2739 311.427148 631.412215 236.635127 131.283547 322.862479 1093.204598 146.134627 2726.825114

2740 rows × 8 columns

绘制基金组合指数的变化趋势图。

python
%matplotlib inline import matplotlib.pyplot as plt from pylab import mpl mpl.rcParams['font.sans-serif'] = ['simhei'] mpl.rcParams['axes.unicode_minus'] = False mpl.rcParams['figure.figsize'] = (15.0, 6.0) df4['all'].plot(linewidth=1, label='基金组合指数') # 添加label可指定图例 for i in data2: data2[i].plot(linewidth=1, label=i) plt.title("基金组合指数的变化趋势") plt.xlabel('时间') plt.ylabel('指数') plt.legend() plt.show()

ji-suan-ji-jin-zu-he-zhi-shu_9_0.png

从历史数据变化趋势看,2004年之前的变化参考价值不大,对2004年之后的数据重新绘制趋势图。从上图看,只有上证指数和沪深300指数有2004年之前的数据。

python
df4['all'].plot(linewidth=1, label='基金组合指数') # 添加label可指定图例 for i in data2: if i == 'sh000001' or 'sh000300': data2[i].loc['2004-01-01': ].plot(linewidth=1, label=i) else: data2[i].plot(linewidth=1, label=i) plt.title("基金组合指数的变化趋势") plt.xlabel('时间') plt.ylabel('指数') plt.legend() plt.show()

ji-suan-ji-jin-zu-he-zhi-shu_11_0.png

从上图看:

  • 所有指数的变化方向基本一直,要涨都涨,要跌都跌,但涨跌幅度不一样;
  • 大概2009年之前这几个指数的值基本一样,图中线条接近重合;2009年之后开始分化,说明不同行业、不同类型企业的发展速度和程度开始分化;
  • 基金组合指数在2016年之后处于上证指数和沪深300指数之间,但因为都是增强性基金,所以不意味着该基金组合收益率一定小于沪深300的增长率;
  • 基金组合指数由各支基金跟踪的指数加权平均得到,由于都是增强性基金,不能准确反应基金组合的净值变化,但可以用来辅助选择定投的时间点。
  • 长期来看,指数基金是能赚钱的,但需要把握好买卖时间。

本文作者:tsingk

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!