基金定投是最大的投資騙局(Python資料分析專題一)
最近幾年微信公眾號、頭條、微博好多地方都有人餵雞湯,基金定投財富自由什麼的,我今天仔細做了下分析,根本就是騙人的。 先說結果,無腦基金定投別說跑不贏通脹,連銀行定期存款都跑不贏,不擇時不止盈的定投不可取。
這次專題就是利用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最大的優點就是很多的模組裡面有很多的函式可以直接使用,不再需要自己編寫。
接下來需要一個讀取資料的函式,我把資料來源檔案都放到一個專門的資料夾裡方便調取。
(我直接截圖吧,程式黏貼過來格式就變了)
這個函式主要就是讀取資料,並且取出我們需要的對應列的數值。
這個函式是購買基金函式,date投資日期,amount投資金額,data指數的日誌
索引函式,用來獲取最終的指數值
投資函式,feq是幾天投資一次
前面三個函式其實都是給 invest函式服務的,我們最終的變數輸入也是直接傳遞到invest函數里面的,下面就是具體輸入和計算的程式碼。
具體驗證時很簡單,我們就改start_date和end_date 還有1000和14這兩個值就可以,需要計算其他指數時就把第一個引數0000001改為對應的指數程式碼就可以
先看個10年的對比:
定投10年上證指數,累計的收益率僅僅10。33%,如果按照複利算,每年不到1%
再看20年上證指數,收益率能高一點,但是20年累計不到40%,這不是在開玩笑麼?5年定期存款基準利率都年化3。6了。。。。。
然後我們在看下深證指數10年累計收益19。26%比上證略高,20年達到了90%,恭喜終於跑贏了銀行定期存款。(其實銀行定期存款計算複利20年也能超過90%的)
接下來看下創業板,創業板就只有10年的了,創業板10年收益率達到了75%。
好了,可以做個大概的總結了,有興趣的夥伴可以把上證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),“%”)
上一篇:綠豆治療溼疹
下一篇:文玩核桃如何盤玩上色快?