2010年11月28日 星期日

程式編寫入門4 - Cross()

當我們編寫交易系統時,最常用到的也許就是穿越訊號,例如 10天線升穿 50天線,或 9天 RSI 升穿 30。在 MetaStock 中,這時就要用到 Cross() function:

Cross(DATA ARRAY 1, DATA ARRAY 2)

假設我們現在要建立一個移動平均線系統,買賣規則如下:

買入訊號
5天線升穿 20天線

沽出(平倉)訊號
5天線跌破 20天線

在 MetaStock 的操作步驟如下:

1. 首先打開 Enhanced System Tester,然後按 "New System...",輸入系統名稱:Moving Average Cross System。


2. 點選 "Buy Order" 標籤頁,在 "Formula" 裡輸入 Cross(Mov(C,5,S),Mov(C,20,S)),意思是 5天線由下往上升穿 20天線就買入,程式中的 "S" 代表我們採用簡單移動平均線。


3. 點選 "Sell Order" 標籤頁,在 "Formula" 裡輸入 Cross(Mov(C,20,S),Mov(C,5,S)),意思是 5天線由上往下跌破 20天線就沽出(平倉)。由於建立這系統只為了說明 Cross() function,因此我就省略了 "Sell Short Order"的設定,即是系統不會做淡倉。

4. 接下來可以進行 back-testing,這次我選了黃金作為測試對象,結果如下:


在 3/1/2000 至 31/12/2009這段期間,系統產生了 82筆交易,總獲利 371.2 Pts(未計交易成本)。以一張合約 100安士計算,利潤為 $289,536。

Cross() function 並不只應用於移動平均線,以下為其他例子:

Cross(RSI(9),30)
解釋:9天 RSI 由下往上升越 30。

Cross(MACD(),Mov(MACD(),9,E))
解釋:MACD線升穿其訊號線。

3 則留言:

Unknown 提到...

師傅,你是否仍在寫blog? 好想請教你呀!!!

Unknown 提到...

師傅,我想問,呢個系統是否適合港股交易?

Bernie Lee 提到...

抱歉最近很少登入自己的blog,所以這麼遲才回答你的問題。

請看「踏出第一步」文章中的回覆。