程式交易在基金投資上的應用之一~SAR

By | 2017-07-12

別人投資基金是長期持有,咱們台灣郎投資基金是把它當股票來波段操作,所以平均持有一檔基金的天數遠低於歐美國家的投資人,知道我工作內容的理專朋友,時不時就會希望我給她一個指標,讓她可以據以建議客戶轉換基金,我陸陸續續有寫了一些,有的回測的效果還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;

過去五年的回測報告如下圖

2017071202

大家可以留意到因為我是用先買後賣,所以在空頭市場這麼做是不會賺錢,但由於在多頭市場很賺錢,所以長期下來還是會賺到錢。 如果只在多頭市場用這腳本,例如只回測過去一年,那麼回測的結果如下圖

在50次的交易機會裡,只有12次輸錢,勝率達到74%。

2017071201

 

由於基金投資只能先買後賣,所以這個策略適用於挑股票型基金的進場及出場時點,至於股債比的配置要怎麼安排,那就是另外一個議題了,但至少使用這個腳本來判斷單一國家或單一產業基金的進場點,我覺得是ok的。