天天看點

python爬天天基金_python模拟基金定投

最近市場行情比較火爆,但是對于股票小白來說,很容易被割韭菜。但是看着火爆的行情又心癢癢,那麼投一支主動型基金未嘗不是一個不錯的選擇。畢竟基金不需要你天天盯着打理,風險還相對較小。

那麼,對于基金小白來說,又該怎麼投資呢?對于基金投資小白來說,定投無疑是最佳方案,它可以平攤風險,适合長期投資。

下面我就用python來模拟一下基金定投的過程以及最終收益。

我模拟了三種投資方案,分别是定時定投,逢跌定投和智能定時定投。顧名思義,定時定投就是定時幾天,幾周或者幾月加一次倉,加倉金額每次一樣,逢跌定投就是跌的時候加倉,加倉金額每次也一樣,智能定時定投就是在定時定投的基礎上,逢漲的時候加倉金額減小,逢跌的時候加倉金額增加。

我這裡設定的每次定投金額都是100元,持倉時間是一年,定時定投和智能定時定投間隔都是每10天一投,其中智能定投時,逢漲加50元倉,逢跌加100元倉。

所選基金為随機選擇,基金所有淨值是通過天天基金接口爬取。

完整代碼如下:

import requests #導入爬蟲庫import csv  #導入csv庫fundCode = '110003' #基金代碼pageIndex = 1url = 'http://api.fund.eastmoney.com/f10/lsjz'# 參數化通路連結,以dict方式存儲params = {     'fundCode': fundCode,  #基金代碼    'pageIndex': pageIndex,    'pageSize': 242  #定投天數}# 裝飾頭檔案headers = {    'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36',    'Referer': 'http://fundf10.eastmoney.com/jjjz_%s.html' % fundCode}response = requests.get(url=url, headers=headers, params=params).json()  # 發送請求,将擷取到的json資料轉化成dictdaylists = response["Data"]["LSJZList"]daylists.reverse()with open("JZ.csv","w+",newline="",encoding="utf8") as f: #将所爬取的基金資料儲存成csv檔案    writer = csv.writer(f)    writer.writerow(["日期","當天淨值","淨值日增率"])    for daylist in daylists:        writer.writerow([daylist["FSRQ"],daylist["DWJZ"],daylist["JZZZL"]])# 每10天定投money = 100 #每次定投金額step = 10 #定投間隔sum_share = 0 #初始份額sum_money = 0 #初始本金for i in range(1,len(daylists)+1,step): #設定循環,從第一天開始,每10天加倉100塊    share = money/float(daylists[i]["DWJZ"]) #每次買入的份額    sum_share += share # 加上每次定投買入d額份額    sum_money += money #加上每次的本金final_money = sum_share*float(daylists[len(daylists)-1]["DWJZ"]) #定投完後的總金yields = (final_money-sum_money)/sum_money  #持有收益率print("本金:",sum_money,"總金:",final_money,"持有收益:",final_money-sum_money,"持有收益率:",yields)# 逢跌定投money = 100  #每次定投金額sum_share = 0 #初始份額sum_money = 0 #初始本金for daylist in daylists:    try: #有的淨值日增率是空值,是以設定了一個異常處理        if float(daylist["JZZZL"])<0: #判斷淨值日增率小于0為跌時            share = money/float(daylist["DWJZ"])            sum_share += share            sum_money += money    except Exception as e:            print(daylist["FSRQ"]) #有淨值日增率空值時抛出空值日期final_money = sum_share*float(daylists[len(daylists)-1]["DWJZ"])yields = (final_money-sum_money)/sum_moneyprint("本金:",sum_money,"總金:",final_money,"持有收益:",final_money-sum_money,"持有收益率:",yields)# 定時智能定投money1 = 100 money2 = 50sum_share = 0sum_money = 0j = 0m=0for i in range(1,len(daylists)+1,step):    try:        if float(daylists[i]["JZZZL"])<0:            share = money1/float(daylists[i]["DWJZ"])            sum_share += share            sum_money += money1        elif float(daylists[i]["JZZZL"])>=0:            share = money2/float(daylists[i]["DWJZ"])            sum_share += share            sum_money += money2    except Exception as e:            print(daylist["FSRQ"])final_money = sum_share*float(daylists[len(daylists)-1]["DWJZ"])yields = (final_money-sum_money)/sum_moneyprint("本金:",sum_money,"總金:",final_money,"持有收益:",final_money-sum_money,"持有收益率:",yields)
           

運作結果:

python爬天天基金_python模拟基金定投

可以看出,按受益率來看的話,逢跌定投是最高的。但是本金要花不少,适合有錢的大佬。

那假如我不是每10天一投,而是一個月一投呢?這裡把step的值改成30

step = 30
           

結果如下:

python爬天天基金_python模拟基金定投

可以看出,定投間隔對受益還是有影響的,每10天定投和智能定投的收益率都有所下降。

下面再看定投時間,上面分析的是定投一年,假如定投兩年呢?這裡把pageSize: 242改成pageSize: 484,結果如下:

python爬天天基金_python模拟基金定投

收益率明顯提高不少,是以基金值得長期持有。投資基金跑赢通脹還是不難的。上圖中有兩個列印的日期是因為該日期的日增長率為空值,有空值是因為前一天未交易。

看完以上模拟是不是對基金定投有一個大概的認識了呢?最後再補充一點,市場有風險,投資需謹慎!尤其是現在市場處在高位!