有沒有什麼策略可以幫我做基金的再配置? 一位相識的理專來看我時,知道我在學寫策略,給了我這麼一個大題目。
以下我來報告一下對這個題目的研究過程
由於現在回測還只能測台股,無法測美股,也無法回測國際指數及外匯,所以我就以加權指數來先當研究的標的。
首先我試著用移動平均線週線突破月線來當進場點,腳本很好寫
if average(close,5) crosses above average(close,20) then ret=1;
我用8%停利,3%停損來決定出場點,回測三年的報告如下:
過去三年一共出現13次的進場訊號,平均一年進場四次,其中六次賺錢,七次虧錢,但合計三年的總報酬率是15.46%,這段時間如果買進後都不動,報酬率接近9%,所以這個策略雖然可以打敗大盤,但還不是可以拿去跟理專邀功。
於是,我把這七次虧錢的交易都拿出來看,我發現,輸錢的交易,有一部份是下降趨勢中的中級反彈,均線雖然黃金交叉,但還沒有到停利點,反彈就結束,這裡面有個現象就是這種反彈通常量是出不來的,所以我就加了一個量的過濾機制
if average(close,5) crosses above average(close,20) and volume> average(volume,5) then ret=1;
加完後跑回測,報告如下
從回測報告來看,勝率過五成,三年出現九個交易訊號,其中五個賺錢,四個賠錢,合計賺了17.52%。
我再去檢視那四個賠錢的交易,其實黃金交叉後,指數是有上揚,只是目前的出場機制不能設為均線死亡交叉,否則這個策略的勝率及報酬率會更高。
所以最單純的基金進場策略就是
1.週線突破月線
且
2.成交量比五日均量大時
進場
均線變成死亡交叉時出場。
不過我擔心這樣一年交易三次的次數對理專來說太少了,所以我就又試了另一個交易策略
這個交易策略的背後邏輯是,每個市場都有一些技術分析操作者,如果我們把常用的技術分析指標都列出來,然後定出多空的分野,當愈多指標呈現多頭時,代表有愈多的技術分析操作者會進場作多,相反的,一旦愈來愈多技術指標翻空,代表愈來愈多的技術分析操作者會出清部位,根據這樣的邏輯,我寫了以下的腳本
// 利用多種指標, 計算多空分數 // variable: count(0); // 每次計算都要reset count = 0; //------------------ RSI指標 -------------------// variable: rsiShort(0), rsiLong(0); rsiShort=rsi(close,5); rsiLong=rsi(close,10); if rsiShort > rsiLong and rsiShort < 90 then count=count+1; //----------------- MACD指標 -------------------// variable: Dif_val(0), MACD_val(0), Osc_val(0); MACD(Close, 12, 26, 9, Dif_val, MACD_val, Osc_val); if osc_val > 0 then count=count+1; //----------------- MTM指標 -------------------// if mtm(10) > 0 then count=count+1; //----------------- KD指標 --------------------// variable:rsv1(0),k1(0),d1(0); stochastic(9,3,3,rsv1,k1,d1); if k1 > d1 and k1 < 80 then count=count+1; //----------------- DMI指標 -------------------// variable:pdi_value(0),ndi_value(0),adx_value(0); DirectionMovement(14,pdi_value,ndi_value,adx_value); if pdi_value > ndi_value then count=count+1; //----------------- AR指標 -------------------// variable: arValue(0); arValue = ar(26); if linearregslope(arValue,5) > 0 then count=count+1; //----------------- ACC指標 -----------------// if acc(10) > 0 then count=count+1; //----------------- TRIX指標 ----------------// if trix(close,9) > trix(close,15) then count=count+1; //----------------- SAR指標 ----------------// if close > SAR(0.02, 0.02, 0.2) then count=count+1; //----------------- 均線指標 ----------------// if average(close,5) > average(close,20) then count=count+1; //----------------- 均量指標 ---------------// if average(volume,5)>average(volume,10) then count=count+1; if count cross above 4 then ret=1;
附圖是回測報告
從這個初步的回測來看,交易次數三年有19次,平均兩個月有一次,但總報酬率不高,我看了一下,出現的訊號過多,有些在很短的時間內出現兩次,所以我把它取了十日移動平均,腳本如下:
// 利用多種指標, 計算多空分數 // variable: count(0); // 每次計算都要reset count = 0; //------------------ RSI指標 -------------------// variable: rsiShort(0), rsiLong(0); rsiShort=rsi(close,5); rsiLong=rsi(close,10); if rsiShort > rsiLong and rsiShort < 90 then count=count+1; //----------------- MACD指標 -------------------// variable: Dif_val(0), MACD_val(0), Osc_val(0); MACD(Close, 12, 26, 9, Dif_val, MACD_val, Osc_val); if osc_val > 0 then count=count+1; //----------------- MTM指標 -------------------// if mtm(10) > 0 then count=count+1; //----------------- KD指標 --------------------// variable:rsv1(0),k1(0),d1(0); stochastic(9,3,3,rsv1,k1,d1); if k1 > d1 and k1 < 80 then count=count+1; //----------------- DMI指標 -------------------// variable:pdi_value(0),ndi_value(0),adx_value(0); DirectionMovement(14,pdi_value,ndi_value,adx_value); if pdi_value > ndi_value then count=count+1; //----------------- AR指標 -------------------// variable: arValue(0); arValue = ar(26); if linearregslope(arValue,5) > 0 then count=count+1; //----------------- ACC指標 -----------------// if acc(10) > 0 then count=count+1; //----------------- TRIX指標 ----------------// if trix(close,9) > trix(close,15) then count=count+1; //----------------- SAR指標 ----------------// if close > SAR(0.02, 0.02, 0.2) then count=count+1; //----------------- 均線指標 ----------------// if average(close,5) > average(close,20) then count=count+1; //----------------- 均量指標 ---------------// if average(volume,5)>average(volume,10) then count=count+1; if average(count,10) cross above 3 then ret=1;
如果把它改成指標,畫出來的圖就如下圖
實地跑回測的時候,由於我發現這個指標幾乎可以抓到每個大波段的進場點,但在長期下跌的反彈波也會有假訊號,所以我就把停利設高一點,停損設低一點,結果回測的效果變成大波段有賺到,但勝率不到五成,總報酬反而超過兩成
我把那些失敗的交易訊號拿出來看,我發現出假訊號的時候通常是空頭反彈的強弩之末,其實出訊號後的隔兩天指數就已漲少跌多,所以我就加了以下的濾網
if average(count,10)[2] cross above 3 and close>close[3]*1.02 then ret=1;
一加之下,交易次數只剩三次
每年報酬都有接近7%
這應該是我寫過回測三年勝率100%的策略了
不過三年只能交易三次,應該還是不符合理專的期待
只能在此跟大家分享了
要給理專的策略,容小弟再細細思考