2012年1月7日 星期六

通道突破系統

看到這標題,相信很多人會立即聯想到保力加通道。但這次我想介紹另一個簡單而有效的交易方法:移動平均線通道 (Moving Average Envelopes)。

顧名思義,移動平均線通道就是在平均線的上下兩端建立通道。由於價格不會長期大幅拋離移動平均線,因此人們便想到將移動平均線加減某一個固定百分比,作為價格波幅的上下限。例如,恆生指數現在的 20 天線位於 18528.03,若以 3% 作為固定百分比,則通道頂及通道底計算如下:

通道頂 = 18528.03 + ( 18528.03 * 3% ) = 19083.87
通道底 = 18528.03 - ( 18528.03 * 3% ) = 17972.19

恆生指數 - 移動平均線通道


短線及中線投資者一般以 20 天線的 + 3% 及 - 3% 作為通道的參數,長線投資者則可以採用 50 天線的 + 5% 及 - 5%。至於應用方面,當市況處於牛皮上落時,通道的頂底可作為阻力位及支持位,進行高沽低買;相反在趨勢市中,則可以突破通道頂順勢買入,跌破通道底順勢沽空。

到目前為止都是教科書式的介紹,現在該開始研究實際的操作了,以下我嘗試利用移動平均線通道來建立一個順勢系統:

買入訊號
收市價向上突破通道頂。

平好倉訊號
收市價跌穿通道中軸 (即移動平均線)。

沽空訊號
收市價跌穿通道底。

平淡倉訊號
收市價向上突破通道中軸。

至於通道的參數方面,由於價格要突破通道頂或通道底才會發出買賣訊號,若使用標準的 20 天線加減 3%,在現今瞬息萬變的金融市場中,系統的訊號會顯得較遲鈍。因此,我在這裡採用 10 天線加減 2%。

恆生指數 - 通道突破系統


MetaStock 的操作步驟如下:

1. 打開 Enhanced System Tester,再按 "New System...",輸入系統名稱:MA Envelopes System


2. 在以下標籤頁輸入程式碼:

     BUY ORDER
     UB:=Mov(C,10,S)+Mov(C,10,S)*0.02;
     LB:=Mov(C,10,S)-Mov(C,10,S)*0.02;
     Cross(C,UB)


     SELL ORDER
     Cross(Mov(C,10,S),C)

     SELL SHORT ORDER
     UB:=Mov(C,10,S)+Mov(C,10,S)*0.02;
     LB:=Mov(C,10,S)-Mov(C,10,S)*0.02;
     Cross(LB,C)


     BUY TO COVER ORDER
     Cross(C,Mov(C,10,S))

3. 完成 System Editor 的編輯後,按 "New Simulation..." 進行 back-testing,測試對象為恆指,測試期間是 2/1/2002 至 30/12/2011,為了令測試結果符合現實狀況,我將交易佣金設定為 5 點 (單邊),滑移價差為 2 點。

結果如下:


MA Envelopes System 在過去 10 年帶來 11220 點的淨獲利,在總共 162 筆交易中, 69 筆賺錢,93 筆輸錢,勝率為 42.6%。看上去似乎不錯,可惜 Profit Factor 只有 1.31,對我來說並不能接受 ( 請參考如何評估系統的測試結果 )。

在原本的設定中,系統並沒有理會訊號發出時,市場是牛市還是熊市。這意味著即使市場牛氣沖天,只要價格跌穿通道底,我們還是會入市持淡倉,而這顯然不是一個高明的動作。因此,為提高系統的績效,我嘗試為買賣訊號加上一個濾網:

1. 價格升穿通道頂時,10 天線必須在 150 天線之上,才構成買入訊號。
2. 價格跌破通道底時,10 天線必須在 150 天線之下,才構成沽空訊號。

MetaStock 的程式碼修改如下:

     BUY ORDER
     UB:=Mov(C,10,S)+Mov(C,10,S)*0.02;
     LB:=Mov(C,10,S)-Mov(C,10,S)*0.02;
     Mov(C,10,S)>Mov(C,150,S) AND
     Cross(C,UB)


     SELL SHORT ORDER
     UB:=Mov(C,10,S)+Mov(C,10,S)*0.02;
     LB:=Mov(C,10,S)-Mov(C,10,S)*0.02;
     Mov(C,10,S)<Mov(C,150,S) AND
     Cross(LB,C)


重新進行 back-testing,並比較兩者的測試結果:


加上濾網後,系統的總交易筆數由 162 筆減少至 80 筆,但淨獲利反而有所增加,證明過濾掉的都是些不理想的交易訊號。最大連續虧損筆數由 7 筆減至 4 筆,這能減輕投資者的心理負擔,因為沒有多少人能承受連輸 7 次的打擊 ( 即使你明白系統長期而言能為你帶來獲利 )。而最重要的是,Profit Factor 由 1.31 大幅提高至 1.88,這結果算是不錯的。

但是,這系統還有一點難以令人滿意。不知大家有沒有留意到,它的最大單筆獲利是 5657 點,無可否認這是非常振奮人心的全壘打,但過去 10 年以來就只發生一次而已。如果排除這筆交易,系統的淨獲利將由 12922 點減至 7265 點,這代表其餘的交易訊號並不怎樣出色。我認為,與其等待 10 年才發生一次的全壘打,還不如想辦法令每筆交易的獲利更平均。

解決方法很簡單,就是為每筆交易設定獲利目標,當賬面利潤達到 10% 後,系統就會平倉。

打開 System Editor ,在 "Stops" 標籤頁裡將 Profit Target 設為 10%:


進行 back-testing 後,比較結果如下:


總交易筆數和原先差不多,在最大單筆獲利減至 2562 點後,系統的平均獲利反而增加了,這是好現象。另外沒想到的是,我原以為淨獲利不會有太大變化,結果卻由 12922 點大幅增加至 19624 點,算是一個意外驚喜,連帶 Profit Factor 也提高至 2.34。

2 則留言:

Ah Lam 提到...

Hi, very good Blog, it definite inspire me a lot, thanks!

Bernie Lee 提到...

謝謝:)