適合基金投資用的策略是??

By | 2016-06-17

有沒有什麼策略可以幫我做基金的再配置? 一位相識的理專來看我時,知道我在學寫策略,給了我這麼一個大題目。

以下我來報告一下對這個題目的研究過程

由於現在回測還只能測台股,無法測美股,也無法回測國際指數及外匯,所以我就以加權指數來先當研究的標的。

首先我試著用移動平均線週線突破月線來當進場點,腳本很好寫

if average(close,5) crosses above average(close,20)
then ret=1;

我用8%停利,3%停損來決定出場點,回測三年的報告如下:

061801

過去三年一共出現13次的進場訊號,平均一年進場四次,其中六次賺錢,七次虧錢,但合計三年的總報酬率是15.46%,這段時間如果買進後都不動,報酬率接近9%,所以這個策略雖然可以打敗大盤,但還不是可以拿去跟理專邀功。

於是,我把這七次虧錢的交易都拿出來看,我發現,輸錢的交易,有一部份是下降趨勢中的中級反彈,均線雖然黃金交叉,但還沒有到停利點,反彈就結束,這裡面有個現象就是這種反彈通常量是出不來的,所以我就加了一個量的過濾機制

if average(close,5) crosses above average(close,20)
and volume> average(volume,5)
then ret=1;

加完後跑回測,報告如下

061802

從回測報告來看,勝率過五成,三年出現九個交易訊號,其中五個賺錢,四個賠錢,合計賺了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;

附圖是回測報告

061803

 

從這個初步的回測來看,交易次數三年有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;

如果把它改成指標,畫出來的圖就如下圖

061805

實地跑回測的時候,由於我發現這個指標幾乎可以抓到每個大波段的進場點,但在長期下跌的反彈波也會有假訊號,所以我就把停利設高一點,停損設低一點,結果回測的效果變成大波段有賺到,但勝率不到五成,總報酬反而超過兩成

061804

我把那些失敗的交易訊號拿出來看,我發現出假訊號的時候通常是空頭反彈的強弩之末,其實出訊號後的隔兩天指數就已漲少跌多,所以我就加了以下的濾網

if average(count,10)[2] cross above 3
and close>close[3]*1.02
 
then ret=1;

一加之下,交易次數只剩三次

061806

每年報酬都有接近7%

這應該是我寫過回測三年勝率100%的策略了

不過三年只能交易三次,應該還是不符合理專的期待

只能在此跟大家分享了

要給理專的策略,容小弟再細細思考