最簡單的方法
就是在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有放或是沒放都沒差...
所以當數個程式放在一起時
對合併後的程式還要作修改
不過這是沒錢的作法
有錢當然讓程式自由發揮啦