指数定投(行不行学习)

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/449548.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

centOS安装python3.7.2

1.查看centos中自带的Python地址:which python(一般在 /usr/bin/python) 2.切换到python安装目录:cd /usr/bin 3.查看对应的Python版本指向:ls -l python* 4.创建一个空目录:mkdir /usr/local/python3 5.…

有进度条圆周率Π计算

圆周率π的计算 一、圆周率π的简介 圆周率的介绍圆周率用希腊字母 π(读作pi)表示,是一个常数(约等于3.141592654),是代表圆周长和直径的比值。它是一个即无限不循环小数,在日常生活中&#xf…

期权制作回测数据

将指定的档位的期权,指定阶段剩余到期日的期权数据合并,用于回测 import pandas as pd import numpy as np import akshare as ak pd.set_option("display.max_rows",None) pd.set_option("display.max_columns",None)nh_price ak…

HEVC/H265 HM10.0 分析(一)NALread.cpp

下面分析 NALread.cpp 函数和代码。 void read(InputNALUnit& nalu, vector<uint8_t>& nalUnitBuf) {/* perform anti-emulation prevention */TComInputBitstream *pcBitstream new TComInputBitstream(NULL);convertPayloadToRBSP(nalUnitBuf, (nalUnitBuf[0]…

Docker run 命令 参数说明

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 docker run &#xff1a;创建一个新的容器并运行一个命令 语法 docker run [OPTIONS] IMAGE [COMMAND] [ARG...][OPTIONS] IMAGE [COM…

【云周刊】第205期:阿里云重磅开源实时计算平台Blink,挑战计算领域的“珠峰”...

本期头条 阿里云重磅开源实时计算平台Blink&#xff0c;挑战计算领域的“珠峰” 信息爆炸的时代&#xff0c;智能推荐已经被应用到各类互联网产品中&#xff0c;但为千万级甚至亿级规模的用户实时做精准的推荐难度极高。这一难题已经被阿里攻克了&#xff1a;双11的第1分钟&…

凯特勒通道(backtrader)

import backtrader as bt import datetime import pandas as pd import matplotlib.pyplot as plt import backtrader.analyzers as btanalyzers#定义指标 class Ketler(bt.Indicator):params dict(ema20,atr 17)lines (expo,atr,upper,lower)plotinfo dict(subplot False)p…

MYSQL安装报错 -- 出现Failed to find valid data directory.

运行环境&#xff1a;windows10数据库版本&#xff1a;mysql.8.0.12安装方式&#xff1a;rpm包直接安装 问题描述&#xff1a;mysql初始化的时候找不到对应的数据库存储目录 报错代码&#xff1a; 2018-10-13T03:29:24.179826Z 0 [System] [MY-010116] [Server] D:\Program Fil…

Mysql 取用逗号分隔的字串的子串的方法:SUBSTRING_INDEX

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 有一张部门表&#xff1a;appbricks_department &#xff0c;有 id 字段和 rank_tree 字段。 rank_tree&#xff1a;记录的是当前部门的…

UCloud首尔机房整体热迁移是这样炼成的

2019独角兽企业重金招聘Python工程师标准>>> 2018年下半年&#xff0c;UCloud首尔数据中心因外部原因无法继续使用&#xff0c;需要在很短时间内将机房全部迁走。为了不影响用户现网业务&#xff0c;我们放弃了离线迁移方案&#xff0c;选择了非常有挑战的机房整体热…

akshare双均线backtrader

# -*- coding: utf-8 -*- """ Created on Tue Aug 4 16:52:23 2020author: 四屏 """from datetime import datetime %matplotlib inline import backtrader as bt import matplotlib.pyplot as plt import akshare as akplt.rcParams["fon…

与python相关计算机基础知识

一、编程与编程的目的1、什么是语言&#xff1f;什么是编程语言&#xff1f; 语言是一种事物与另外一个事物沟通的介质 编程语言是程序员与计算机沟通的介质 2、什么是编程&#xff1f; 程序员把自己想让计算机做的事用编程语言表达出来 编程的结果就是一系…

HEVC/H265 HM10.0 分析(二)TComDataCU.cpp

以下分析TComDataCU.cpp。这个cpp是很重要的&#xff0c;要分几次分析完&#xff0c;这是分析TComDataCU.cpp&#xff08;一&#xff09;。 Void TComDataCU::getPartPosition( UInt partIdx, Int& xP, Int& yP, Int& nPSW, Int& nPSH) {UInt col m_uiCUPelX;…

定制化你的ReactNative底部导航栏

前言 ​ 接触过ReactNative(以下简称RN)的大概都知道,react-navigation提供了两种开箱即用的导航栏组件 createBottomTabNavigatorcreateMaterialBottomTabNavigator分别是这样的 尽管官方提供了导航栏的开箱即用方案,但是实际开发里面,我们会遇到各种各样的导航栏,各种各样的动…

backtrader入坑1

烦死我了&#xff0c;不想玩backtrader&#xff0c;因为它只是个回测框架&#xff0c;数据库&#xff0c;下单界面和国内都不能有效对接&#xff0c;早期就是玩玩&#xff0c;图个乐子。还有学习它的代码编写逻辑&#xff0c;大概玩通了以后&#xff0c;完全不想碰它。感觉现在…

PHP 处理金额

导语 涉及到金额的代码&#xff0c;一定要谨慎处理。刚好最近做了相关的功能&#xff0c;下面大概说一下。 存储 PHP 的浮点数是不能精确计算的&#xff0c;具体的可以看这篇文章。所幸的是&#xff0c;金额一般不会有太多的小数。那么存储的时候呢&#xff0c;一言以蔽之&…

HEVC/H265 HM10.0 分析(三)TAppDecTop.cpp

在TAppDecTop.cpp ,最重要的是decode 函数&#xff0c;下面将对其进行分析&#xff0c;是解码上层的一个重要函数。 代码如下&#xff0c;代码后将进行分析。 Void TAppDecTop::decode() {Int poc;TComList<TComPic*>* pcListPic NULL;ifstream bits…

windows下xmllib2使用简介 64位

1&#xff1a;环境配置 包含目录下 包含include libxml2_64\include     包含xmllib库路径  libxml2_64 注意 libxml分为32位程序和64位程序&#xff0c;这两种的环境需要的lib不一样&#xff0c;需要分别下载 需要使用库 libxml2.lib 注意&#xff1a…

backtrader2

backtrader的基本策略构成&#xff1a; #构成 #Backtrader 回测代码编写流程如下&#xff1a; import backtrader as bt # 导入 Backtrader import backtrader.indicators as btind # 导入策略分析模块 import backtrader.feeds as btfeeds # 导入数据模块# 创建策略 class T…

解决浏览器 Provisional headers are shown 无法向后台发送请求问题

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 我的情况和下面情况一样&#xff0c;有一个断点。 今天调试项目BUG&#xff0c;页面的一个按钮点击后页面无反应&#xff0c;去后台找对…