2010年10月5日 星期二

踏出第一步

要建立技術分析交易系統,往往需要將買賣規則轉化為電腦看得懂的程式語言,以便進行歷史測試 (back-testing),看看自己設計的系統往績到底如何 。雖然歷史測試也可以人手進行,但卻要耗費大量時間,因此,除非你覺得自己的交易規則很難化做程式語言,否則可能的話還是盡量用電腦幫忙的好。

要把交易系統化做程式語言,需要用到技術分析軟件幫忙,較出名的有 MetaStock、TradeStation 及 Wealth-Lab,而我所用的是 MetaStock 11。現在讓我們來牛刀小試,以MetaStock 建立一個簡單的系統。

今次我們要建立一個移動平均線系統,買賣規則如下:

(1)  2天線升穿19天線買入。
(2)  2天線跌穿19天線沽出。

這個系統會讓我們一直留在市場裡,即買入後若發出沽出訊號,會平倉兼反手做淡;相反做淡後出現買入訊號則平倉兼反手做好。

步驟一:打開 MetaStock 後,選 "Enhanced System Tester..."。


步驟二:我們可看到左邊已經有一堆內建的系統,由於我們要建立一個新系統,所以按左上角的 "New System..."。


步驟三:在 "Name" 那裡輸入 Moving Average System,下方 "Limit number of simultaneous positions to 1" 是指同一時間只會持有一個部位合約。


步驟四:點選 "Buy Order" 標籤頁,在 "Formula" 裡輸入 Cross(Mov(C,2,S),Mov(C,19,S)),稍為解釋一下,"Mov" 在 MetaStock 中是移動平均線的語法,括號內的 "C" 指用收市價去計算平均線、"2" 指2天期、"S" 指我們所用的是簡單移動平均線 (SMA)。因此全句的意思就是:當2天 SMA 升越19天 SMA 即買入 (建立好倉)。


步驟五:點選 "Sell Order" 標籤頁,在 "Formula" 裡輸入 Cross(Mov(C,19,S),Mov(C,2,S)),意思是當2天 SMA 跌穿19天 SMA 即平好倉。

步驟六:點選 "Sell Short Order" 標籤頁,在 "Formula" 裡輸入 Cross(Mov(C,19,S),Mov(C,2,S)),意思是當2天 SMA 跌穿19天 SMA 即建淡倉。

步驟七:點選 "Buy to Cover Order" 標籤頁,在 "Formula" 裡輸入 Cross(Mov(C,2,S),Mov(C,19,S)),意思是當2天 SMA 升越19天 SMA 即平淡倉。跟著按 "確定" 完成。

步驟八:我們的平均線系統已建立好了!現在可以對系統做 back-testing,按下方的 "New Simulation..."。


步驟九:點選我們剛建立的 Moving Average System,然後按下一步。


步驟十:這裡我選擇以恆指來作 back-testing ,測試期間為 3/1/2000 至 31/12/2009。設定好後按 "Start" 立即進行 test。


結果如下:


上圖顯示我們的平均線系統在過去10年產生了196筆交易,當中獲利交易佔71筆,虧損交易則佔125筆。一般人只重視勝率,見到這系統「輸多贏少」一定不太樂意,但其實勝率並不是想像中那麼重要,由於這系統的獲利交易中平均每單賺894點,遠較虧損交易中的平均每單385點為多,所以總體依然產生15316點的淨獲利(未計交易成本)。

4 則留言:

Unknown 提到...

師傅,這個metastock系統是否適用於港股呢?我可否用來設定港股移動平均線上穿信號?

Bernie Lee 提到...

你可以叫我Bernie,不用叫師傅:)

這篇文章只是說明如何用MetaStock建立和測試系統,雖然這系統在測試期間內產生淨獲利,但它的Profit Factor只有1.32,而且還未考慮交易成本,所以並不算理想。另外,亦要留意最大單筆獲利高達8321點,這代表若扣除這筆交易,餘下的70筆獲利交易中,總共只帶來6995點利潤。

有關如何評估系統的測試結果,可參考以下文章:
http://technical-analysts.blogspot.hk/2011/01/blog-post.html

Unknown 提到...

你好,我跟你的back test做,但result內的profitable/unprofitable trade均為0。是否中間還要set些甚麼?

Bernie Lee 提到...

你好,你的情況應該是系統在測試期間內沒有產生任何交易,請檢查買賣訊號的程式碼是否正確,與及測試期間是否設定過短。