我們還是舉上證指數(shù)、滬深300、中證500三個指數(shù)均線定投和均線輪動定投的例子:
1、從通達信等系統(tǒng)導出每天的收盤,按下“3”再按“4”,數(shù)據(jù)導出格式選excel。
2、導出的日期還不能馬上用,因為是字符格式而不是數(shù)字格式,而且通達信導出的日期前面還多了一個空格,我們用trim(日期)+0做個轉換,trim是去空格函數(shù),而+0就講字符型的函數(shù)最簡單的變成日期型了,然后把格式變成日期型就可以了。
3、同樣的方法把三個指數(shù)的日期和每天的收盤做在一張表上了
4、我們把三個指數(shù)按照日期排成3列,分別是在B\C\D上,而A列是日期,這個sheet我們起名為“指數(shù)”,我們再建立一個“參數(shù)”的sheet,在B2填寫的是均線日期,在B3填寫的是我們每天定投的金額,初始我們暫定B2=1218(5年交易天數(shù)),B3=100元。
5、然后我們再建立一個名字叫BIAS的sheet,格式也是和“指數(shù)”一樣,在A列是日期,B\C\D列分別是50、300、500的bias值,為了計算動態(tài)的bias,我們先來計算動態(tài)的均值,在excel里均值函數(shù)是average,但如果簡單的用average,天數(shù)就是一個固定值,如何隨著“參數(shù)”中的B2天數(shù)的變化而變化呢?我們這里還要引進一個不太常用的函數(shù)offset,offset函數(shù)是一個引用區(qū)域函數(shù),這個區(qū)域的位置由以下參加決定,offset(r,y0,x0,y,x)中的五個函數(shù),r表示這個區(qū)域的起始位置單元,y0表示位置下移多少單元格,x0表示位置右移多少單元格,y表示向上包含多少高度的單元格,x表示向右包含多少寬度的單元格。那么我們在“bias”這個sheet中的B1219這個單元格(就是上證50在11年12月30日)輸入:=AVERAGE(OFFSET(指數(shù)!B1219,0,0,-參數(shù)!$B$2,1))就表示從指數(shù)的B1219(就是50在11年12月30日的收盤)這個單元格開始,保持起始點不變,區(qū)域寬度是1,高度是往上的參數(shù)!$B$2(也就是5年均線天數(shù)1218個交易日)這個區(qū)域的平均值,這樣就把上證50在11年12月30日的5年平均值計算出來了,而且是動態(tài)的,隨著“參數(shù)”B2的變化也會一起變化,注意這里之所以要用$B$2這樣的絕對引用,完全是為了復制公式的方便,把這個單元格的公式復制到整個表里,我們可以得到動態(tài)的50、300、500從2011年年底到最新的2018年8月14日的每天的均線值了。
6、直到現(xiàn)在,我們還只計算了每天的均線,bias=收盤/均線-1,我們很方便的繼續(xù)在bias這個sheet的B1219單元里寫出動態(tài)的bias:= AVERAGE(OFFSET(指數(shù)!B1219,0,0,-參數(shù)!$B$2,1))/指數(shù)!B1219-1,然后把公式復制到所有指數(shù)的每一天上。
7、建立一個“份額”的sheet,也是A列是日期,BCD列分別是50、300、500的在當天的定投份額,以B1220的50在2012年1月4日為例,=IF(BIAS!B1220<0,參數(shù)!$b$3>
8、再建立一個“收益率”的sheet,也是A列是日期,BCD列分別是50、300、500的定投收益率,還是以B1220的上漲50為例子,=IFERROR(SUM(份額!B$1220:B1220)*指數(shù)!B1219/(COUNTIF(份額!B$1220:B1220,'>0')*參數(shù)!$B$3)-1,0),這里的iferror函數(shù)主要是用來遇到分母為0的異常情況的,而分子上的sum函數(shù)就是累計從2012年1月4日開始買入的份額,所以開始的1200需要絕對引用$,而結束的1200不能用絕對引用。而分母的countif是統(tǒng)計從2012年1月4日開始定投的次數(shù),乘上定投金額B3就是定投的累計成本,這樣就分別把50、300、500三個指數(shù)每天的均線定投收益率計算出來了。
9、你試試修改一下“參數(shù)”中的B2天數(shù),每天的定投收益率也一起變化了,怎么樣,方便吧?
10、然后我們再計算一個輪動策略,策略很簡單,就是BIAS當天在均線線下而且是三個指數(shù)中最小值,就定投這個品種,為此我們再建立一個“輪動份額”的sheet,同樣A列是日期,BCD列分別是50、300、500在輪動策略下的份額,和前面那個份額比,不同的是前面那個份額的sheet里,有可能同一天50、300、500三個指數(shù)同時滿足均線下的條件而定投,而輪動定投策略中永遠只選bias最小的那個指數(shù)品種來定投。在B1220單元格的公式為=IF(AND(BIAS!B1220=MIN(BIAS!B1220:D1220),BIAS!B1220<>
11、在“收益率”的第E列建立每天的輪動收益率公式,在2012年1月4日這個E1220的單元格里寫上=IFERROR((SUM(輪動份額!B$1220:B1220)*指數(shù)!B1220+SUM(輪動份額!C$1220:C1220)*指數(shù)!C1220+SUM(輪動份額!D$1220:D1220)*指數(shù)!D1220)/(COUNTIF(輪動份額!B$1220:D1220,'>0')*參數(shù)!$B$3)-1,0),iferroe是用來處理分母為0的情況的,分子之和就是三個指數(shù)在輪動定投策略下的定投累計到當天的現(xiàn)值,而分母就是累計定投的成本。
12、最后把50、300、500和輪動策略每天的定投做個圖出來,因為2013年2月1日前沒有滿足條件的,所以從這個時間開始,而500從2013年5月開始滿足條件定投,300一直到2015年年初才開始。從結果來看,如果選一個還是500相對比較好,但事先你怎么知道呢?所以輪動策略還是一個比較好的策略。
我這么說印象肯定不深刻,給大家一個福利,到我的網(wǎng)盤上去下載這個定投模板的明細,相信你看了這個模板再對照上面的文章后會更加深刻的理解定投、量化回測和excel的應用的:https://pan.baidu.com/s/1hQUxe-z2C7KLop7b9iE5eQ