指數定投(行不行學習)

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.pswp.cn/news/449548.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/449548.shtml
英文地址,請注明出處:http://en.pswp.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;去后臺找對…