別人投資基金是長期持有,咱們台灣郎投資基金是把它當股票來波段操作,所以平均持有一檔基金的天數遠低於歐美國家的投資人,知道我工作內容的理專朋友,時不時就會希望我給她一個指標,讓她可以據以建議客戶轉換基金,我陸陸續續有寫了一些,有的回測的效果還OK,拿來作台股期指波段也有不錯的勝率,所以接下來這一系列,就來跟大家分享我寫過用來作指數或基金波段投資的交易策略。
首先跟大家介紹的是以SAR這個指標為基礎的交易策略。 SAR的意義及計算方法,請參考以下的這個連結,裡面有Moneydj財經百科針對這個指標的完整說明。
簡單來說,這個指標的優點是,在波段上漲時,透過先買後賣,可以賺到完整波段,但如果是盤整盤時,會被巴來巴去,在空頭市場,則得採取先賣後買,也可以賺到完整波段。
在XS裡,有把SAR寫成一個內建的技術指標函數,腳本如下
// SAR function (for SAR指標) // Input: AFInitial(numericsimple); Input: AFIncrement(numericsimple); Input: AFMax(numericsimple); variable: presar(0), ep(0), upTrend(false), af(0); if CurrentBar = 1 then begin if Close > Close[1] then // 上漲 begin upTrend = true; sar = Low[1]; ep = High[1]; end else // 下跌 begin upTrend = false; sar = High[1]; ep = Low[1]; end; af = AFInitial; presar = sar; end else begin sar = presar + af * (ep - presar); presar = sar; if upTrend = true then begin if High > ep then // 繼續破high begin ep = High; af = minlist(af + AFIncrement, AFMax); end; if sar >= Low then // 反轉 begin presar = ep; ep = Low; af = AFInitial; upTrend = false; end; end else begin if Low < ep then // 繼續破low begin ep = Low; af = minlist(af + AFIncrement, AFMax); end; if sar <= High then // 反轉 begin presar = ep; ep = High; af = AFInitial; upTrend = true; end; end; end;
從腳本裡的演算,也可以理解這個指標的設計思維 。
基於這個指標,我寫了一個當SAR出現買進訊號時就進場的腳本,但為了避免過於短線,頻率是用週線,且為了避開盤整盤,所以加了一個短期上漲的仰角要高於30度的條件,寫出來的腳本如下:
input:AFIncrement(0.02,"加速因子"); input:AFMax(0.2,"加速因子最大值"); variable: sarValue(0); sarValue = SAR(AFIncrement, AFIncrement, AFMax); if close crosses over sarValue and linearregangle(close,5)>30 then ret=1;
我拿這個腳本去回測一群代表產業及國家的ETF,出場的訊號是用SAR出現賣出訊號的腳本
input:AFIncrement(0.02,"加速因子"); input:AFMax(0.2,"加速因子最大值"); variable: sarValue(0); sarValue = SAR(AFIncrement, AFIncrement, AFMax); if close crosses under sarValue then ret=1;
過去五年的回測報告如下圖
大家可以留意到因為我是用先買後賣,所以在空頭市場這麼做是不會賺錢,但由於在多頭市場很賺錢,所以長期下來還是會賺到錢。 如果只在多頭市場用這腳本,例如只回測過去一年,那麼回測的結果如下圖
在50次的交易機會裡,只有12次輸錢,勝率達到74%。
由於基金投資只能先買後賣,所以這個策略適用於挑股票型基金的進場及出場時點,至於股債比的配置要怎麼安排,那就是另外一個議題了,但至少使用這個腳本來判斷單一國家或單一產業基金的進場點,我覺得是ok的。