程式買賣:恆指對沖策略分析與設計實例(2)

{Signal Name : HK_AMAF}
Inputs: Period(10), Pcnt(.15);
Vars: AMAVal(0), AMAFVal(0), AMALs(0), AMAHs(0);
AMAVal = AMA(Period);
AMAFVAl = AMAF(Period, Pcnt);
IF CurrentBar = 1 Then Begin
AMALs = AMAVal;
AMAHs = AMAVal;
End Else Begin
IF AMAVal < AMAVal[1] Then AMALs = AMAVal;
IF AMAVal > AMAVal[1] Then AMAHs = AMAVal;
IF AMAVal – AMALs Crosses Above AMAFVal Then Buy This Bar on Close;
IF AMAHs – AMAVal Crosses Above AMAFVal Then Sell This Bar on Close;
End;

首先讓我們先做一些修改…

AMAVal = AMA(Period);
AMAFVAl = AMAF(Period, Pcnt);

改為

AMAVal = SS_AMA(Period);
AMAFVAl = SS_AMAF(Period, Pcnt);

 

別忘了,這是我們更動過的函式名稱。其次、更重要的是把下面這兩行給改了,因為這是一個不好的習慣。

IF AMAVal – AMALs Crosses Above AMAFVal Then Buy This Bar on Close;
IF AMAHs – AMAVal Crosses Above AMAFVal Then Sell This Bar on Close;

改為

IF AMAVal – AMALs Crosses Above AMAFVal Then Buy Next Bar at Market;
IF AMAHs – AMAVal Crosses Above AMAFVal Then Sell Next Bar at Market;

使用This Bar on Close是一種指令書寫的不良習慣。試問當收盤時我們如何能進場交易呢?這是絕對不合情理的,甚至未來對回測產生不實的交易記錄,誤導我們。所以正確的進場指令應該下在下一根Bar的開盤或市價,使用Next Bar at Open或Next Bar at Market表示。

 

parksondow94
圖9-4 開啟編輯一個新的訊號模組…Signal

 

parksondow95
圖9-5

 

輸入我們的訊號名,進入PowerEditor的編輯頁後把我們的訊號程式碼輸入,打完後不要忘了要按Verify一下,如此我們便順利的建立了一個訊號,名為HK_AMAF。
parksondow96
圖9-6 再來我們點選右上方的策略建構器StrategyBuilder。

 

parksondow97
圖9-7點選New新建策略,在Name的地方輸入策略名稱,我們仍延用HK_AMAF。

 

parksondow98
圖9-8 選擇我們的策略裡要加入的訊號,按Add…

 

 

parksondow910
圖9-10 找到我們剛編譯的HK_AMAF訊號。

 

parksondow911
圖9-11

 

上頁確定之後,這頁會顯示我們剛選擇的訊號。我們會發現,這個訊號只在Long Entry(多頭進場)與Short Entry(空頭進場)的欄位有打勾。沒錯我們的訊號裡目前是只有多空的進場指令,並沒有寫入出場平倉的一些條件。這樣合法嗎?是的這樣完全沒問題的,這樣將是一種永遠持有倉位的狀態,改變的只有倉位的方向。
parksondow912
圖9-12 這頁確認我們策略中須要輸入的外部參數,其個數與初值。

 

parksondow913
圖9-13 這頁設定我們的策略訊號產生時,是否允許複式倉位同時進場;比如同向的加碼進場方式。

 

parksondow914
圖9-14 這裡設定倉位的數量上限。

 

parksondow915
圖9-15

 

這裡設定的是跳過資料開始的多少天數,才開始代入訊號運做。一般我們知道指標需要一段時間之後才可能成熟可用,這便是條整避開先端的那段不成熟時間。一般我們使用內定的50Bars即可,但當遇到特殊情況時,則應該適當的增加;比如使用200天均線的場合。完畢後點完成即可,我們現在已經成功的建立了一個策略。

以上提供資訊僅供參考,不應視為任何投資之建議或邀請,投資涉及風險,應先考慮個人因素,如有疑問請諮詢專業意見。
%d bloggers like this: