基金定投選星期幾更划算?[python統計分析]

基金定投常見的一種方式是定期定額投資,即每週或每月固定的時間段,向基金公司申購固定份額的基金。基金定投可以平均成本、分散風險,實現自動投資,所以基金定投又稱爲“懶人投資術”。今天主要用python帶大家分析一下,從統計數據上來看,到底什麼時候定投獲得收益的概率最大。

(本文爲學習討論,不作爲投資建議)

整體思路:選取一定的時間段,分別模擬週一至週五定投,比較最終受益情況,確定基金定投最適宜的時間。

下面開始詳細介紹:

第一步:網站分析,分析數據交換url

以天天基金網爲例,隨便找一隻基金

打開Chrome自帶的開發者工具,點擊下一頁,從 Network 分頁裏找到數據傳輸接口(關於開發者工具的使用,可參見 Crossin:爬蟲必備工具,掌握它就解決了一半的問題

點擊此請求,打開響應數據

就是它沒錯了,接着我們看看該url的參數

Callback可以忽略,fundcode爲該基金代碼,pageIndex爲當前頁碼,pageSize爲返回數據條數,這裏一次返回20條,startData和endData分別爲起始時間和終止時間,但是都爲空值,最後一個參數也不用管。

第二步:requests模擬請求,得到數據

正常情況,應該是for循環,一頁一頁的取數據,但是我們從第一步可以看到,該url參數中含有起始、截止時間,那我們可以試試,能不能忽略頁碼信息,以時間爲截點得到返回數據,改一下url結構,開始模擬請求:

startDate = '2018-01-13'  #起始時間
endDate = '2020-02-28'   #截止時間
header = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:69.0) Gecko/20100101 Firefox/69.0',
    'Referer': 'http://fundf10.eastmoney.com/jjjz_{0}.html'.format(fundCode)
}
url = 'http://api.fund.eastmoney.com/f10/lsjz?fundCode={0}&pageIndex={1}&pageSize=5000&startDate={2}&endDate={3}&_=1555586870418?'.format(fundCode, pageIndex, startDate, endDate)
response = requests.get(url, headers=header)
result=json.loads(response.text)
print(result)
for j in result['Data']['LSJZList']:
    print(j)

返回數據爲

確實能按此url結構返回數據,但是貌似只有20條,起初還以爲是網站接口限制問題,最後發現是pageSize沒有設置,索性直接設置爲5000,再來一次

這樣就全出來了。

第三步:構造模型,模擬定投計算最終收益

具體過程如下:

先將日期轉換爲星期,然後將週一至週五分類,以週五定投爲例,每次定投100,將每次定投金額按當天淨值轉化爲份額,然後與之前份額累加:

total = [0] * 5   # 到期後總份額
count = [0] * 5   # 每日定投次數
for j in result['Data']['LSJZList'][::-1]:
    if j['JZZZL']=='':
        pass
    else:
        weekday = int(datetime.strptime(j['FSRQ'], '%Y-%m-%d').weekday())
        DWJZ = float(j['DWJZ'])   # 淨值        
        total[weekday] = total[weekday]+money/DWJZ
        count[weekday] += 1

最後根據最後的淨值將份額轉化爲金額:

total_money=[]   #根據份額算出總金額
for t, i in enumerate(total):
    total_money.append(i*DWJZ)
    print("周{0}定投最終金額{1}".format(t+1, i*DWJZ), "定投{0}次".format(count[t]))

返回結果:

周1定投最終金額10702.031523199748 定投87次
周2定投最終金額10916.721436831616 定投89次
周3定投最終金額10762.509365370352 定投87次
周4定投最終金額10880.683965470516 定投88次
周5定投最終金額10375.517539233546 定投84次

第四步:用matplotlib畫柱狀圖

1.首先設置正常顯示中文標籤,SimHei爲中文字體,用plt.figure建1個15x8的畫布,設置標題內容、字體顏色、字體粗細及大小

plt.rcParams['font.sans-serif'] = ['SimHei']  # windows 用來正常顯示中文標籤
# plt.rcParams["font.family"] = 'Arial Unicode MS'  # mac 用來正常顯示中文標籤
plt.figure(figsize=(15, 10), dpi=80)
plt.title('{0}基金模擬定投收益圖'.format(fundCode), color='blue', fontweight=800, size=50)
profit_list = [round((i-100*j)/(100*j), 4) for i, j in zip(total_money, count)]  # 到期後總收益率

效果如下:

2.然後用plt.bar畫柱狀圖大小,第一個代表該日增長的概率,第二個爲該日累計增長的收益,plt.bar內的label參數爲圖籤,但是要用plt.legend放止圖籤與圖像重合顯示不出來,調整y軸座標範圍以便於查看,最後設置座標軸粗細。

name_list = ['週一', '週二', '週三', '週四', '週五']
x = range(len(name_list))
minytick=int(min(total_money))-1000
maxytick=int(max(total_money))+1000
plt.bar(x, [i for i in total_money], label='該日定投最終收益', width=0.4, color='y')
# 參數 m、m2、r 用來調整高度比例
m = sum(total_money) / 5
m2 = min(profit_list)
r = 50000
plt.bar([i+0.4 for i in x], [(i-m2)*r + m for i in profit_list], label='該日定投收益率', width=0.4, color='r')
plt.legend(loc="upper left")  # 防止label和圖像重合顯示不出來
plt.xticks(x, name_list, size=20)   # x座標
plt.ylim(minytick, maxytick)
plt.yticks(range(minytick, maxytick, 200), size=20) # y座標
ax = plt.gca();#獲得座標軸的句柄
ax.spines['left'].set_linewidth(3) ; ####設置左邊座標軸的粗細
ax.spines['bottom'].set_linewidth(3) ; ###設置底部座標軸的粗細

3.完善標籤、網格、文字等設置

for a, b, c in zip(x, total_money, count):
    plt.text(a, b+0.05, '%.1f' % b, ha='center', va='bottom', fontsize=15)
    plt.text(a, b+100, '定投{}次'.format(c), ha='center', va='bottom', fontsize=15, color='r')
for a, b in zip(x, profit_list):
    plt.text(a+0.4, (b-m2)*r + m, '%.4f' % b, ha='center', va='bottom', fontsize=15)

plt.text(2, maxytick+300, '時間:{0}{1}'.format(startDate, endDate), fontsize=20)
plt.grid(axis="y")  #生成網格'''

第五步:統計分析

我們先多嘗試幾隻不同基金不同時段的情況,畫出直方圖:

僅從幾個個例很難看出什麼規律。所以進一步的,我們隨機選10支基金,再隨機選10個時間段,畫出收益分佈的散點圖,並計算出平均值:

從上述的統計結果中來看,週四、五定投的收益通常要大於週一、週二定投的收益。

不過我們這裏選取的數據量並不多,你也可以自己在代碼中增加更多的基金代碼和時間來測試。

當然咯,此演示結果僅作爲參考,股市變化莫測,不可能完全預測,請大家謹慎操作。

------

歡迎搜索及關注:Crossin的編程教室

這裏還有更多精彩。一起學,走得遠

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章