使用Python回測10年A股指數定投收益,原來應該這麼投資

最近A股跌的媽都不認識了,從去年開始的基金定投收益率也都變成了負的,把人打擊的人不行。

為了給自己增加繼續定投的信心(或者及時把我勸退),本人考察A股十年的數據(從2008-07-31到2018-07-31),想看看發生什麼。

之所以選擇這十年,是因為2008-07-31日,上證指數為2844.2,十年後的2018-07-31,上證指數為2866.2,所以如果十年前買入股票,十年後大概率不會賺錢,那如果改為定投,即每月投入固定數額的錢呢?

本文主要選取滬深300,中證50,中證500等指數,測試持續定投是否會盈利。

測試開發工具python,編寫了定投指數基金的回測程序,並測試了定投過程中相關參數對收益的影響,包括指數選擇,止盈率,定投日期等。

1. 定投策略

使用止盈的定投策略,實施要點如下

1. 按月定投,每月固定日期(任選)投入4000元人民幣,十年總投入48萬;2. 設置止盈率x%,如果定投盈利大於x%,則全部賣出;

如果止盈率設置的非常高,比如超過300%,則可能過程中一次都不會贖回,此時可以當做無止盈的定投。

3. 賣出得到的錢,再平均分為Y份,追加到下個月定投中;

這條這麼理解,比如如果止盈後得到總額為a的資金,將其平均分為20份,則從下個月開始,定投金額為4000+a/20,直到20個月後再恢復為4000元

2. 代碼:talk is cheap, show me the code

測試指數數據使用tushare包獲得,非常簡單易用:

Tushare是一個免費、開源的python財經數據接口包。主要實現對股票等金融數據從數據採集、清洗加工到數據存儲的過程,能夠為金融分析人員提供快速、整潔、和多樣的便於分析的數據,為他們在數據獲取方面極大地減輕工作量,使他們更加專注於策略和模型的研究與實現上。考慮到Python pandas包在金融量化分析中體現出的優勢,Tushare返回的絕大部分的數據格式都是pandas DataFrame類型,非常便於用pandas/NumPy/Matplotlib進行數據分析和可視化。當然,如果您習慣了用Excel或者關係型數據庫做分析,您也可以通過Tushare的數據存儲功能,將數據全部保存到本地後進行分析。應一些用戶的請求,從0.2.5版本開始,Tushare同時兼容Python 2.x和Python 3.x,對部分代碼進行了重構,並優化了一些算法,確保數據獲取的高效和穩定。

比如十年滬深300指數數據,可以通過如下命令獲得,並儲存為CSV格式:

import tushare

df000300=tushare.get_k_data('000300',Index=True,start='2008-07-31',end='2018-07-31')

df000300.to_csv('000300.csv')

其他數據可以通過類似命令獲得,把指數代碼替換就行,比如中證500是‘000905’,上證50是‘000016’,上證大盤指數為‘000001’,分別存入相應的CSV文件中。

重頭戲的指數定投回測程序代碼可以聯繫小編提供,在這裡就不提供了

3. 定投參數對收益的影響

01 關鍵參數影響:止盈率、止盈資金再投入的分配次數(分割次數)、定投日期

以滬深300指數為例,測試這幾個參數對收益的影響。

首先是止盈率,它對收益率影響最大,下圖給出固定定投日期為每月25號,分割次數為20次時,總資產與總投入的比值隨止盈率的變化:

圖1 收益隨止盈率的變化,注意計算收益要減掉1

可以看到,在止盈率小於100%時,隨止盈率增加收益率增加,當止盈率為100%時,收益率最高,可達85%;而當收益率繼續增大時,中間並未有任何贖回行為,相當於不止盈的定投,收益率迅速回落到20%。

圖2 贖回次數與止盈率的關係

圖2給出了贖回次數與止盈率的關係,當止盈率為10%時,中間贖回了12次之多,但收益率只有30%多一些;而當止盈率為100%時,中間只贖回一次(2015年5月21日,那個大牛市中),收益率竟高達85%。

2. 再看分割次數的影響

下圖給出了每次止盈後資金再分配多少個月追加定投對收益率的影響,固定止盈率80%,定投日期每月25號。可以看到收益率變化不大,均在60%左右波動,波動不會超過5%。所以當分割次數大於10時,怎麼使用資金影響不會很大。

圖3 收益率隨分割次數的影響

3. 定投日期的影響

下圖給出定投日期對收益率的影響,固定止盈率80%,分割次數20,可以看到收益率不會有太大變化,均在60%左右,上下波動不會超過5%。

所以,每個月選擇哪個日期定投無所謂,只要固定一個日子都不會差很多。

當然,如果要心理好受點,可以安排在月末,收益率能高個2-3%。

圖4 定投日期的影響

02 應該選擇哪個指數進行定投?

下面三幅圖,分別給出定投中證500、上證50和上證大盤指數時,收益率隨止盈率的變化,回測過程中均固定每月定投日期為25號,分割次數20次。

圖5 中證500收益率歲止盈率的變化

圖6 上證50收益率歲止盈率的變化

圖7 上證指數收益率歲止盈率的變化

可以看到,收益率最高的是中證500指數,最高可達100%,其次為滬深300、上證50,最低為大盤指數。

所以比較好的指數基金委中證500,但需要注意的是,中證500波動非常大,需要設定非常高的止盈率,而且一不小心就會止盈率過高轉為不止盈的定投方式,極大影響資金收益。

但是,不管選擇哪種指數,最高收益率都沒有超過100%,而10年100%對應的年化收益率僅為7.2%,不能說是一個很高的數,所以基金定投只能當成資金保值的手段,增值是遠遠不夠的。

要想增值,還是要買房呀。輕輕鬆鬆10年10倍收益,sah。。。

03 個股會更好嗎?

在回測中發現,這些指數基金定投並未有特別高的收益,反而個股定投收益率更高。

下圖為中國石化收益率隨止盈率的變化,當止盈率為50%時,10年收益率可為150%,對應年化收益率9.5%,很高很高。

看來,定投指數不如定投個股啊,就連中國石化這種大黑洞都比指數基金高。

選股去吧,少年!

圖8 中國石化10年定投收益隨止盈率的變化

4. 總結是個好習慣

從本文的分析中可以發現,幾個結論如下:

定投指數基金可以使資金一定程度上增值,比放在銀行強;定投是個長期的行為,收益僅與選擇標的和止盈率設置有關;定投在每月1號和每月30號收益不會差很多;但收益率不會太高,最多為100%,過去十年還是不如買房;定投時資金保值的方法,不能指望賺錢;選好個股定投比指數定投可能更好,比如萬人唾罵的中國石化;本文不代表任何投資行為,僅供參考