import tushare as ts
import pandas as pd
import numpy as np
from scipy import stats
import tushare as ts
import matplotlib.pyplot as plt
%matplotlib inline   #正常显示画图时出现的中文和负号
from pylab import mpl
mpl.rcParams['font.sans-serif']=['SimHei']
mpl.rcParams['axes.unicode_minus']=False
from datetime import datetime,timedelta
from pyecharts import *
token=''
ts.set_token(token)
pro=ts.pro_api()

获取数据

#获取数据并计算对数收益率def get_index_data(code):df=pd.DataFrame()df0=pro.index_daily(ts_code=code)df[code]=df0.closedf.index=pd.to_datetime(df0.trade_date)df=df.sort_index()df['logret']=np.log(df/df.shift(1))return df.iloc[1:,:]
#A股常用的八个指数
common_index={'上证综指': '000001.SH','深证成指': '399001.SZ','沪深300': '000300.SH','创业板指': '399006.SZ','上证50': '000016.SH','中证500': '000905.SH','中小板指': '399005.SZ','上证180': '000010.SH'}
#获取指数收盘价和日对数收益率
index_data={}
for name,code in common_index.items():index_data[name]=get_index_data(code)#对股价走势进行可视化
names =list(common_index.keys())
codes=list(common_index.values())plot_pos = [421,422,423,424,425,426,427,428] # 每个子图的位置
new_colors = ['#1f77b4','#ff7f0e', '#2ca02c', '#d62728', '#9467bd','#8c564b', '#e377c2', '#7f7f7f','#bcbd22','#17becf']fig = plt.figure(figsize=(16,18))
fig.suptitle('国内股指走势',fontsize=18)
for i in np.arange(len(plot_pos)):       ax = fig.add_subplot(plot_pos[i]) y_data =index_data[names[i]][codes[i]]  b = ax.plot(y_data,color=new_colors[i])   ax.set_title(names[i])
plt.show()  

累计收益率

#股指自发行以来累积收益率情况
fig = plt.figure(figsize=(16,18))
fig.suptitle('国内股指累积收益率',fontsize=18)
for i in np.arange(len(plot_pos)):       ax = fig.add_subplot(plot_pos[i]) y_data =index_data[names[i]]['logret'].cumsum()  b = ax.plot(y_data,color=new_colors[i])   ax.set_title(names[i])
plt.show()
def cum_return(start_date,end_date='2018-12-24'):df=pd.DataFrame()for name,data in index_data.items():df[name]=data.loc[start_date:end_date]['logret'].cumsum()return df
区间收益率情况
cum_return('2013-01-01','2015-06-12').plot(figsize=(16,6))
cum_return('2011-01-01').plot(figsize=(16,6))
cum_return('2018-01-01').plot(figsize=(16,6))grid = Grid()
attr = list(common_index)
n=[1/28,1/27,1/13,1/8,1/14,1/13,1/12,1/22]
r=cum_return('1990-12-20').iloc[-1]
v1 = list((r.values*100).round(2))
v2 = ((np.power(1+r.values,n)-1)*100).round(2)bar = Bar(title="各指数收益率情况")
bar.add("累计收益率%", attr, v1,is_label_show=True)line = Line()
line.add("年化平均收益率%", attr, v2,is_label_show=True)
overlap = Overlap()
overlap.add(bar)
overlap.add(line, is_add_yaxis=True, yaxis_index=1)grid.add(overlap, grid_right="15%")
grid
指数定投评估
#指数定投函数
def index_strategy(code,start_date,end_date,first=1):##步骤一:获取数据##通过自定义函数get_index_data获取指数数据df=get_index_data(code)df=df.loc[start_date:end_date]#累计收益率df['累计收益率']=df.logret.cumsum()#假设定投无风险理财产品收益率为4%df['无风险收益率']=(4.0/100+1)**(1.0/250)-1df['无风险收益_净值']=(df['无风险收益率']+1).cumprod()##步骤二:设定定投日并计算份额和累计资金#每月第一个交易日或最后一个交易日定投#first==1表示每个月第一个交易日定投if first==1:by_month=df.resample('M',kind='period').first()else:by_month=df.resample('M',kind='period').last()#定投购买指数基金trade_log=pd.DataFrame(index=by_month.index)#假设每月投入3000元trade_log['基金净值']=by_month[code]/3000trade_log['money']=3000 trade_log['基金份额']=trade_log['money']/trade_log['基金净值']trade_log['总基金份额']=trade_log['基金份额'].cumsum()trade_log['累计定投资金']=trade_log['money'].cumsum()##步骤三:计算定投保本理财份额和资金trade_log['理财份额']=trade_log['money']/by_month['无风险收益_净值']trade_log['总理财份额']=trade_log['理财份额'].cumsum()temp=trade_log.resample('D').ffill()df=df.to_period('D')##步骤三:计算每个交易日的资产(等于每天的基金份额乘以单位基金净值)和累计收益率daily_data=pd.concat([df,temp[['总基金份额','总理财份额','累计定投资金']]],axis=1,join='inner')daily_data['指数定投资金']=daily_data[code]/3000*daily_data['总基金份额']daily_data['理财定投资金']=daily_data['无风险收益_净值']*daily_data['总理财份额']daily_data['指数定投收益率']=(daily_data['指数定投资金']-daily_data['累计定投资金'])/daily_data['累计定投资金']daily_data['理财定投收益率']=(daily_data['理财定投资金']-daily_data['累计定投资金'])/daily_data['累计定投资金']#返回后面分析需要的变量return daily_data[[code,'累计收益率','累计定投资金','指数定投资金','理财定投资金','指数定投收益率','理财定投收益率']]

方案1:

#将画图过程封装成函数
def plot_index_ret(code,name,start_date,end_date):df=index_strategy(code,start_date,end_date,first=1)df1=index_strategy(code,start_date,end_date,first=0)print(f'月初开始定投:\n{df.iloc[-1]}')print('\n')print(f'月末开始定投:{df1.iloc[-1][5]}')ax1=df[['累计收益率','指数定投收益率','理财定投收益率']].plot(figsize=(16,6))ax1.legend(loc=2)plt.title(name+'定投收益率情况\n '+start_date+':'+end_date,fontsize=15)ax2 = ax1.twinx()df[code].plot(figsize=(16,6),color='r',label=name)ax2.legend(loc=1)plt.show()def plot_index_fund(code,name,start_date,end_date):#每月定投3000元,期间累计资金情况df=index_strategy(code,start_date,end_date,first=1)ax1=df[['指数定投资金','理财定投资金']].plot(figsize=(16,6))ax2 = ax1.twinx()df[code].plot(figsize=(16,6),color='r',label=name)ax2.legend(loc=1)plt.title(f'累计定投资金情况\n {start_date}:{end_date}',fontsize=15)plt.show()
plot_index_ret('000001.SH','上证综指','2007-10-17','2015-6-12')attr = ["累计收益率 ","月初指数定投收益率","月底指数定投收益率","理财定投收益率"]
v1 = [-16.48, 101.03, 102.02, 16.28]
bar = Bar("上证综指定投收益率情况(%)","2007.10.17—2015.06.12'",title_text_size=15,title_pos='center')
bar.add("", attr, v1,is_label_show=True )
barplot_index_ret('000001.SH','上证综指','2007-10-17','2009-07-20')attr = ["累计收益率 ","月初指数定投收益率","月底指数定投收益率","理财定投收益率"]
v1 = [-62.31, 15.64, 17.96, 3.62]
bar = Bar("上证指数定投收益率情况(%)","2007.10-2009.9",title_text_size=15,title_pos='center')
bar.add("", attr, v1,is_label_show=True )
bar

方案2:

plot_index_ret('000001.SH','上证综指','2006-10-01','2018-12-24')attr = ["累计收益率 ","月初指数定投收益率","月底指数定投收益率","理财定投收益率"]
v1 = [36.6, -7.39, -7.46, 27.63]
bar = Bar("上证指数定投收益率情况(%)","2006.10-2018.12",title_text_size=15,title_pos='center')
bar.add("", attr, v1,is_label_show=True )
bar

方案3:

plot_index_ret('000001.SH','上证综指','2014-07-01','2015-06-12')plot_index_ret('399006.SZ','创业板指','2014-07-01','2015-06-12')#画柱状图函数
def plot_bar_ret(start_date,end_date):end_datev1=[]#定投累计收益率v2=[]for name,code in common_index.items():df=index_strategy(code,start_date,end_date,first=1)c=round((df['累计收益率'].iloc[-1])*100,2)a=round((df['指数定投收益率'].iloc[-1])*100,2)v1.append(c)v2.append(a)attr=list(common_index.keys())bar = Bar("各指数定投vs投入持有" ,f"{start_date}:{end_date}")bar.add("一次投累计收益率%", attr, v1, mark_point=["min", "max"])bar.add("定投累计收益率%", attr, v2, mark_point=["min", "max"])barstart_date='2014-07-01'
end_date='2015-06-12'
#一次性投累计收益率
v1=[]
#定投累计收益率
v2=[]
for name,code in common_index.items():df=index_strategy(code,start_date,end_date,first=1)c=round((df['累计收益率'].iloc[-1])*100,2)a=round((df['指数定投收益率'].iloc[-1])*100,2)v1.append(c)v2.append(a)
attr=list(common_index.keys())
bar = Bar("各指数定投累计收益率" ,"2014.07.01-2015.06.12")
bar.add("一次投入累计收益率%", attr, v1, mark_point=["min", "max"])
bar.add("定投累计收益率%", attr, v2, mark_point=["min", "max"])
bar
start_date='2011-08-01'
end_date='2016-12-24'
#一次性投累计收益率
v1=[]
#定投累计收益率
v2=[]
for name,code in common_index.items():df=index_strategy(code,start_date,end_date,first=1)c=round((df['累计收益率'].iloc[-1])*100,2)a=round((df['指数定投收益率'].iloc[-1])*100,2)v1.append(c)v2.append(a)
attr=list(common_index.keys())
bar = Bar("各指数定投累计收益率" ,"2011.08.01-2016.12.24")
bar.add("一次投入累计收益率%", attr, v1, mark_point=["min", "max"])
bar.add("定投累计收益率%", attr, v2, mark_point=["min", "max"])
bar
start_date='2011-08-01'
end_date='2018-12-24'
#一次性投累计收益率
v1=[]
#定投累计收益率
v2=[]
for name,code in common_index.items():df=index_strategy(code,start_date,end_date,first=1)c=round((df['累计收益率'].iloc[-1])*100,2)a=round((df['指数定投收益率'].iloc[-1])*100,2)v1.append(c)v2.append(a)
attr=list(common_index.keys())
bar = Bar("各指数定投累计收益率" ,"2011.08.01-2018.12.24")
bar.add("一次投入累计收益率%", attr, v1, mark_point=["min", "max"])
bar.add("定投累计收益率%", attr, v2, mark_point=["min", "max"])
bar
start_date='2015-06-12'
end_date='2018-12-24'
#一次性投累计收益率
v1=[]
#定投累计收益率
v2=[]
for name,code in common_index.items():df=index_strategy(code,start_date,end_date,first=1)c=round((df['累计收益率'].iloc[-1])*100,2)a=round((df['指数定投收益率'].iloc[-1])*100,2)v1.append(c)v2.append(a)
attr=list(common_index.keys())
bar = Bar("各指数定投累计收益率" ,"2015.06.12-2018.12.24")
bar.add("一次投入累计收益率%", attr, v1, mark_point=["min", "max"])
bar.add("定投累计收益率%", attr, v2, mark_point=["min", "max"])
bar
start_date='2018-01-01'
end_date='2018-12-24'
#一次性投累计收益率
v1=[]
#定投累计收益率
v2=[]
for name,code in common_index.items():df=index_strategy(code,start_date,end_date,first=1)c=round((df['累计收益率'].iloc[-1])*100,2)a=round((df['指数定投收益率'].iloc[-1])*100,2)v1.append(c)v2.append(a)
attr=list(common_index.keys())
bar = Bar("各指数定投收益率" ,"2018.01.01-2018.12.24")
bar.add("一次投入累计收益率%", attr, v1, mark_point=["min", "max"])
bar.add("定投累计收益率%", attr, v2, mark_point=["min", "max"])
bar

指数定投(行不行学习)相关推荐

  1. 【邢不行|量化小讲堂系列14-Python量化入门】数据告诉你:惊人的指数定投策略

    引言: 邢不行的系列帖子"量化小讲堂",通过实际案例教初学者使用python进行量化投资,了解行业研究方向,希望能对大家有帮助. [历史文章汇总]请点击此处 [必读文章]EOS期现 ...

  2. 直接学python行不行_是否可以直接学python或者java而不学c++?

    当然可以直接学python--编程语言之间基本上没有谁是谁的进阶这种说法,计算机科学才有进阶.所以你说直接学python行不行,当然没问题.即使是Eric S.Raymond也在回答How to Be ...

  3. prompt你到底行不行?

    文 | 马杀鸡三明治 源 | 知乎 很久之前老板下任务要试试prompt这个大风,但是玩完后发现太菜了所以连文章都没写,刚好今天工作比较闲就来写写了. 先上结论,连续prompt为运用大模型提供了一种 ...

  4. prompt 你到底行不行?

    文 | 马杀鸡三明治 源 | 知乎 很久之前老板下任务要试试prompt这个大风,但是玩完后发现太菜了所以连文章都没写,刚好今天工作比较闲就来写写了. 先上结论,连续prompt为运用大模型提供了一种 ...

  5. 数学149的女学霸,直言想当程序员!女生当程序员到底行不行?

    最近一段时间,全国多个省市的高考分数线录像出炉,各地又多了一堆学霸秀分数了,他们的专业选择也成为网友们津津乐道的闲谈.这两天有报道称,四川成都一学校的女学霸出名了,在采访中她透露自己高考分数达到了69 ...

  6. 程序员想干一辈子行不行?

    关注我们丨文末赠书 " 程序员这个职业能干一辈子吗? " 知乎上关于这个问题的讨论,答案似乎不容乐观.要么是过了35岁不转型不行:要么年纪越大越学不动:还有公司上升空间有限,不进则 ...

  7. 程序员想干一辈子行不行?只要学会这些软技能就够了|文末送书

    " 程序员这个职业能干一辈子吗? " 知乎上关于这个问题的讨论,答案似乎不容乐观.要么是过了35岁不转型不行:要么年纪越大越学不动:还有公司上升空间有限,不进则退. 总之,程序员想 ...

  8. 入行深度学习之前,要做好哪些准备?

    点击上方"CSDN学院精品课",选择"置顶公众号" CSDN学院精品课  IT人的职业提升平台 人工智能(AI).机器学习(ML).深度学习(DL)在当下的火热 ...

  9. rosdep不初始化到底行不行

    本系列教程作者:小鱼 公众号:鱼香ROS QQ交流群:139707339 教学视频地址:小鱼的B站 完整文档地址:鱼香ROS官网 版权声明:如非允许禁止转载与商业用途. 来龙去脉 标题说和别人吵架的事 ...

最新文章

  1. 如何阻止子元素触发父元素的事件
  2. python中split()进行多分割
  3. Git 技术篇 - GitHub克隆私有仓库方法,新主机绑定并同步github私有库实例演示
  4. Ruby版本管理(RVM)
  5. C#迭代器、装箱/拆箱、重载等
  6. not supported between instances of 'SafeText' and 'int' 问题出现以及解决
  7. android中读取properties文件
  8. maya 处理 linux 鼠标变X
  9. erstudio怎么导入mysql数据库?_使用ERStudio生成数据库设计文档。
  10. [R语言] R语言快速入门教程
  11. 全国哀悼日 灰色CSS滤镜
  12. 抖音SEO优化:最详细抖音视频SEO教程
  13. 【OCR】文本检测方案 TextFuseNet解读
  14. python关于函数作用的描述_Python函数的概念和使用
  15. Hexo博客配置笔记
  16. Android8.0 悬浮窗的实现
  17. MMA格斗包含UFC与ONE
  18. unix 简单的命令
  19. HBase原理 | HBase分区影响与合理分区设置
  20. 网络共享存储器巴法罗BUFFALO的LS-WXL/E出现EM模式的解决方案

热门文章

  1. 存款准备金率历次调整 对股市的影响
  2. 【JZOJ 省选模拟】6655.三国学者
  3. 苹果x屏幕出现一条绿线_部分用户反映苹果iPhone 12屏幕出现划痕
  4. Kappa架构与Lambda架构比较
  5. HackTheBox-BountyHunter靶场通关记录
  6. Vue 获取元素的宽度高度
  7. 2006新歌TOP100
  8. copy与deepcopy区别
  9. 详解js中的闭包(closure)以及闭包的使用
  10. 加码直播,百度二次增长