您當前的位置:首頁 > 收藏

基金定投是最大的投資騙局(Python資料分析專題一)

作者:由 瑭宋元 發表于 收藏時間:2020-02-28

最近幾年微信公眾號、頭條、微博好多地方都有人餵雞湯,基金定投財富自由什麼的,我今天仔細做了下分析,根本就是騙人的。 先說結果,無腦基金定投別說跑不贏通脹,連銀行定期存款都跑不贏,不擇時不止盈的定投不可取。

這次專題就是利用python的資料分析功能計算基金定投的收益,這個專題比較簡單,適合python資料分析入門的夥伴,下個專題我再往深的做,研究如果用python計算最佳的基金定投策略。

資料來源:透過API介面從網易財經上進行調取

直接成為連結了,我加上引號‘

http://

quotes。money。163。com/se

rvice/chddata。html?code=0000016&start=19901219&end=20200228&fields=TCLOSE;HIGH;LOW;TOPEN;LCLOSE;CHG;PCHG;VOTURNOVER;VATURNOVER

’ 這裡0000001指的是上證指數。注意這串數字要分0和000001兩部分看。0代表sh,1代表sz。所以0000001其實是sh000001的意思。同理,0 000300也就是sh000300 滬深300的程式碼。後面的start和end沒什麼問題。fields選項中,TCLOSE,HIGH,LOW,TOPEN分別表示當日的收盤,最高,最低,開盤價;LCLOSE表示昨日收盤價。CHG,PCHG,VOTURNOVER,VAT分別表示漲跌額,漲跌幅,成交量,成交金額。

取到資料後,然後我們用python寫程式來計算定投的收益。

首先先把需要的模組呼叫起來

import operator as op

from datetime import datetime,timedelta

這兩句是呼叫兩個模組,op那個是運算子, datetime是時間 後面timedelta是時間格式 python最大的優點就是很多的模組裡面有很多的函式可以直接使用,不再需要自己編寫。

接下來需要一個讀取資料的函式,我把資料來源檔案都放到一個專門的資料夾裡方便調取。

(我直接截圖吧,程式黏貼過來格式就變了)

基金定投是最大的投資騙局(Python資料分析專題一)

這個函式主要就是讀取資料,並且取出我們需要的對應列的數值。

基金定投是最大的投資騙局(Python資料分析專題一)

這個函式是購買基金函式,date投資日期,amount投資金額,data指數的日誌

基金定投是最大的投資騙局(Python資料分析專題一)

索引函式,用來獲取最終的指數值

基金定投是最大的投資騙局(Python資料分析專題一)

投資函式,feq是幾天投資一次

前面三個函式其實都是給 invest函式服務的,我們最終的變數輸入也是直接傳遞到invest函數里面的,下面就是具體輸入和計算的程式碼。

基金定投是最大的投資騙局(Python資料分析專題一)

具體驗證時很簡單,我們就改start_date和end_date 還有1000和14這兩個值就可以,需要計算其他指數時就把第一個引數0000001改為對應的指數程式碼就可以

先看個10年的對比:

定投10年上證指數,累計的收益率僅僅10。33%,如果按照複利算,每年不到1%

基金定投是最大的投資騙局(Python資料分析專題一)

再看20年上證指數,收益率能高一點,但是20年累計不到40%,這不是在開玩笑麼?5年定期存款基準利率都年化3。6了。。。。。

基金定投是最大的投資騙局(Python資料分析專題一)

然後我們在看下深證指數10年累計收益19。26%比上證略高,20年達到了90%,恭喜終於跑贏了銀行定期存款。(其實銀行定期存款計算複利20年也能超過90%的)

基金定投是最大的投資騙局(Python資料分析專題一)

基金定投是最大的投資騙局(Python資料分析專題一)

接下來看下創業板,創業板就只有10年的了,創業板10年收益率達到了75%。

基金定投是最大的投資騙局(Python資料分析專題一)

好了,可以做個大概的總結了,有興趣的夥伴可以把上證50 滬深300 創業板50 中證100等等指數都算一遍,我簡單說下我的總結。

無腦定投不可取,波動越激烈的指數,定投收益率越高,如果不想操心建議定投創業板,未來有科創板基金建議定投科創板+創業板。

這期簡單介紹了一個python計算基金定投收益的方法,python還是挺好用的,如果你用excel自己算恐怕要算死了,程式碼其實很簡單也很好理解。下一期我計劃用python嘗試去找出最佳的定投投資策略。下面是本期的程式碼

import operator as op

from datetime import datetime,timedelta

def load(index_no, start_date, end_date):

file = ‘D:/python/’ + index_no + ‘。csv’

f = open(file,‘r’)

indices = {}

for line in f。readlines():

arr = line。strip()。split(‘,’)

dt = arr[0]

if Kontaktiniai lęšiai(start_date,dt) and Kontaktiniai lęšiai(dt,end_date) :

indices[arr[0]] = arr[3]

return indices

def purchase(date, amount, data):

index_value = data[date]

return amount/float(index_value)

def getIndexValue(date,data):

return data[date]

def invest(index_no,start_date, end_date, amount, feq):

data = load(index_no,start_date,end_date)

sd = datetime。strptime(start_date, ‘%Y-%m-%d’)

ed = datetime。strptime(end_date, ‘%Y-%m-%d’)

curr = sd

total_share = 0; total_amount = 0;total_profit=0

last_index = 0

while True:

#如果當天不是交易日,則往後延一天。

while curr。strftime(‘%Y-%m-%d’) not in data。keys():

curr += timedelta(days = 1)

if curr > ed: break

if curr > ed: # 超過結束日期則停止

break

last_index = float(getIndexValue(curr。strftime(‘%Y-%m-%d’),data))

#購買基金

shares = purchase(curr。strftime(‘%Y-%m-%d’), amount, data)

total_share += shares

total_amount += amount

#計算下一個投資日期

curr = curr + timedelta(days = feq)

total_profit = last_index*total_share - total_amount

return total_amount,total_profit

start_date = ‘2010-01-01’

end_date = ‘2020-02-28’

total_amount,total_profit = invest(‘399006’,start_date, end_date,500,7)

print(‘起投日期’,start_date)

print(‘結束日期’,end_date)

print(‘總投資額’,total_amount)

print(‘總收益’,round(total_profit))

print(‘投資收益率’,round(total_profit/total_amount*100,2),“%”)

標簽: date  total  amount  end  start