2008年8月18日 星期一

程式合併

當要使用一個以上的當沖程式時

最簡單的方法

就是在HTS開一個以上的畫面分開跑

不過這樣會有問題

就是 兩個程式訊號不同

下的單可能會被沖掉

或是保證金不足 程式都出現方向相同的訊號時

會有一口無法下單

所以 把程式寫在一起

方法很簡單

先宣告一個變數 每天歸零

vars:count(0);
if date[0] <> date[1] then begin
count = 0;
end;


再來是程式的訊號

if time<1345.00 and count=0 then begin

if signalBuy then begin
buy next bar at market;
count=count+1;
end;

if signalSell then begin
sell next bar at market;
count=count+1;
end;

end;

"signalBuy","signalSell"就是程式的交易訊號了
而count=count+1這一段
目的是要對應停損...

訊號對應的停損

if time<1345.00 and count=1 then begin

if signalStopBuy and marketposition>0 then begin
exitlong next bar at market;
end;

if signalStopSell and marketposition<0 then begin
exitshort next bar at market;
end;

end;


以上
signalBuy條件成立後且count=0(表示空手)
就會進場 進場後count變成1
而signalStopBuy要成立..有一個條件就是count=1
所以 signalBuy(or signalSell)對應停損signalStopBuy(or signalStopSell)

若是有第二個程式且停損訊號不同
就用同樣的方法...
只是第二個程式進場後 count要加2
停損要確認count=2
這樣不管有幾個程式 都可以寫在一起

若是有兩個不同的程式 用相同的停損條件
也很簡單
程式1和2在進場後count加相同的數字(假設是9好了)
那停損就判斷count=9
這樣 不管是程式1或2 都會跑到count=9這停損條件去

因為是當沖程式 所以開盤一定是空手
所以count=0 表示空手
當然也可以加一個 marketposition=0去判斷(不過沒差)
所以在進場前判斷count 就是判斷是否空手

以上...
這樣做的好處就是 有多少程式都可以放在一起
但是也是有缺點...
就是 程式會搶訊號..
假設2個程式A和B 在2008/1/1都有訊號
不過程式A先出現
結果A在收盤是虧損的...
程式B慢出現 但產生獲利

這是把程式放在一起的缺點
當然 還有一種情況
兩個程式 A和B
但A的篩選條件比較嚴格
所以都是B成交
這樣A有放或是沒放都沒差...

所以當數個程式放在一起時
對合併後的程式還要作修改

不過這是沒錢的作法
有錢當然讓程式自由發揮啦
HEMiDEMi Technorati Del.icio.us MyShare?犖?貊惜 Yahoo