2011年7月24日 星期日

程式編寫入門7 - HHV

這次介紹一下 HHV function,其實 HHV 的意思就是 Highest High Value,它能協助我們找出特定期間內的最高值,這個最高值所指的可以是價格、成交量、甚至 RSI 。

HHV(DATA ARRAY, PERIODS)

以下為 HHV() 的一些例子:

HHV(C,20)
解釋:最近 20天的最高收市價(包括今日)。

HHV(V,10)
解釋:最近 10天的最高成交量(包括今日)。

現在我們嘗試用 HHV function 來建立以下的突破系統:

買入訊號
收市價高於過去 40天的最高價

平好倉訊號
收市價低於過去 15天的最低價

沽空訊號
收市價低於過去 40天的最低價

平淡倉訊號
收市價高於過去 15天的最高價

止蝕
設定為 2%

MetaStock 的操作步驟如下:

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


2. 在 "Buy Order" 裡輸入以下程式:

     C>Ref(HHV(H,40),-1)


留意如果將程式寫成 C>HHV(H,40) 的話,雖然在語法上沒有問題,但卻違反了邏輯。因為 HHV(H,40) 是指包括今日在內的 40天最高價,而今日收市價 ( C ) 無論如何是不可能高於今日最高價的。

3. 在 "Sell Order" 裡輸入:

     C<Ref(LLV(L,15),-1)

LLV function 就是 HHV 的相反,用來找出特定期間內的最低值,至於 Ref function 可參考程式編寫入門 6 的介紹。

4. 在 "Sell Short Order" 裡輸入:

     C<Ref(LLV(L,40),-1)

5. 在 "Buy to Cover Order" 裡輸入:

     C>Ref(HHV(H,15),-1)

6. 在 "Stops" 標籤頁裡,勾選 Maximum Positions 的 "Long" 和 "Short" 方格,與及將 Maximum Loss 設定為 2%,完成後按 "確定" 關閉 System Editor。


7. 現在可以按 "New Simulation..." 進行 back-testing,我所選的對象為恆指,測試期間為 2/1/2001 至 31/12/2010,為了令測試結果符合現實狀況,將交易佣金設定為 5點 (單邊)。


結果如下:


從上圖可見,這個突破系統在過去 10年產生了 64筆交易,當中獲利交易佔 20筆,虧損交易則佔 44筆,勝率只有 31.3%,但卻帶來 11228點的淨獲利 (Profit),Profit Factor 有 1.73,這要歸功於系統的平均獲利 (1335點) 遠高於平均虧損 (351點) 之故。

沒有留言: