成交後掛委託,但未成交會掛到死?
雖然有【刪單】這個語法, 但是我刪掉出場的委託單,他就無法在進行下一個觸發並且掛單動作了是嗎?
只能等到我們自己人工發現,然後人工出場?
有沒有辦法是我設定2根K棒後刪單,並且在刪單後繼續執行觸發動作及重新掛委託單出場
不然我的停利單一直觸碰不到 然後也沒辦法觸發停損點?
成交後掛委託,但未成交會掛到死?
雖然有【刪單】這個語法, 但是我刪掉出場的委託單,他就無法在進行下一個觸發並且掛單動作了是嗎?
只能等到我們自己人工發現,然後人工出場?
有沒有辦法是我設定2根K棒後刪單,並且在刪單後繼續執行觸發動作及重新掛委託單出場
不然我的停利單一直觸碰不到 然後也沒辦法觸發停損點?
Hello 無聊Q,
在自動交易改變position、下出委託後,除非有新的setposition來改變position或是改變委託價,不然原本的委託單都會掛在那邊,直到成交或當天結束時清除委託。
如果您在當次洗價腳本運算時刪單,那麼最快也要等到下次洗價腳本運算時才能重新掛單。(單次執行腳本中只會有一個setposition執行)
或是您可以直接下出新的委託,如果和之前的委託不同的話,系統會先將之前的委託刪除,然後在下出新的委託。
如果您要經過一定 bar 數後刪單的話,可以用變數紀錄bar的位置來當作條件。
舉例來說:
var: intrabarpersist _num(0);
condition1 = 您的進場條件;
if condition1 and position = 0 and filled = 0 then begin
setposition(1);
_num = currentbar;
end;
if position <> filled and (_num - currentbar) > 2 then begin
setposition(filled);
_num = 0;
end;
這樣就會在未成交 (position <> filled) 且經過2根Bar以上 ((_num - currentbar) > 2) 的狀況下刪除委託。
小幫手 您好,
1. ((_num - currentbar) > 2) 試過算不出來, 是否要這樣才對 (( currentbar -_num) > 2)
2. 如上該 bar 刪除委託,是否會將所有已掛單 委買 / 委賣 未成交的 都刪單,
如果是的話,是否有方法刪除 該筆 委買 或 委賣 。
Hello fredchang,
1.是的,小幫手寫反了,應該是(currentbar - _num) > 2才對。
2.setposition(filled)會將所有的未成交的委託單都刪除。
正確說法是,系統會將策略的部位調整成和策略的庫存相同,這樣就會把尚未成交的委託給刪除。
小幫手不懂您詢問的 刪除 該筆 委買 或 委賣 是什麼意思。
小幫手 您好,
感謝您的回覆~
如上 2. 的問題
假如自動交易 已送出 5 張 委賣的 "不同股票",3 張已成交,2 張還掛在委賣(名稱為 甲 和 乙)
如果下 setposition(filled) 此時會將 甲 和 乙 的委賣,尚未成交的委託全給刪除,setposition 有辦法 刪除 乙 ,
保留 甲 嗎 ? 乙 刪除後會再自行掛出委賣 ,這是沒問題的。
如果 setposition 無法解決上面問題 ,用手動去刪除 乙 的委賣 ,這樣程式自動交易會再自動送出 乙 的委賣嗎?
if Position > 0 and Filled > 0 and condition1 then begin
SetPosition(0);
num = CurrentBar;
if Position = 0 and Filled > 0 and ((CurrentBar - num) > 10) then
setposition(filled);
num = 0;
end;
Hello fredchang,
就以您上面的例子,當下position為5,filled 為3 ,有2張委託。
若只要刪除一張的話,此時可下 setposition(4),此指令會刪除一張,另一張則視委託價是否有改變來決定是否刪掉重掛。
可以參考 setposition 的函數說明。
如果您刪除了啟動中策略所下出的委託,會導致策略直接中斷。(參考附圖)
Hello fredchang,
小幫手補充,因為沒有看清楚問題中有提到是不同商品。
策略執行的每個商品都有各自的部位庫存,所以要只針對某個商品作部位調整是辦的到的。
就以上面的例子而言,要將乙尚未成交的2張委託刪除,可以用 symbol 來判斷。
舉例來說:
if symbol = "乙" and position <> filled then setposition(filled);
這樣若商品代號為 "乙" 且部位不等於庫存的話,將乙的委託給刪除。
小幫手 您好,
如上您所回覆的用 symbol 來判斷,
當 setposition(1) 甲 和 乙 ,讓程式自動記錄 symbol ,該如何寫?
var: aa (" ")
if symbol = "aa" and position <> filled then setposition(filled);
Hello fredchang,
小編不太理解您想要作什麼,麻煩更詳細的描述下想達到的目標。
該策略同時執行甲和乙商品的話,本身就會分別獨立運作。
所以您用變數保存symbol的話,會因為相關數值與變數都是該商品獨立自有的,故保存到的 symbol 就只會是該商品。
若是有兩個不同進場條件,要分別對應不同的出場條件,那麼可以考慮這麼作,但其實可以用更簡單的變數來控制,而非使用symbol。
8 評論