成交後掛委託,但未成交會掛到死?

  •   681 
  • 最後發表   無聊Q  2024 二月 29
無聊Q 發文於   2022/09/21

成交後掛委託,但未成交會掛到死?

雖然有【刪單】這個語法,  但是我刪掉出場的委託單,他就無法在進行下一個觸發並且掛單動作了是嗎?
只能等到我們自己人工發現,然後人工出場?

有沒有辦法是我設定2根K棒後刪單,並且在刪單後繼續執行觸發動作及重新掛委託單出場

 

不然我的停利單一直觸碰不到  然後也沒辦法觸發停損點?

排序方式: 標準 | 最新
XQ小幫手 發文於   2022/09/27

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) 的狀況下刪除委託。

fredchang 發文於   2023/07/31

小幫手 您好,

1. ((_num - currentbar) > 2) 試過算不出來, 是否要這樣才對 (( currentbar -_num) > 2) 

2. 如上該 bar 刪除委託,是否會將所有已掛單 委買 / 委賣 未成交的 都刪單,

    如果是的話,是否有方法刪除 該筆 委買 或 委賣 。

 

XQ小幫手 發文於   2023/08/02

Hello fredchang,

 

1.是的,小幫手寫反了,應該是(currentbar - _num) > 2才對。

 

2.setposition(filled)會將所有的未成交的委託單都刪除。

正確說法是,系統會將策略的部位調整成和策略的庫存相同,這樣就會把尚未成交的委託給刪除。

小幫手不懂您詢問的 刪除 該筆 委買 或 委賣 是什麼意思。

 

fredchang 發文於   2023/08/20

 小幫手 您好,

感謝您的回覆~
如上 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;

 

XQ小幫手 發文於   2023/08/23

Hello fredchang,

 

就以您上面的例子,當下position為5,filled 為3 ,有2張委託。

若只要刪除一張的話,此時可下 setposition(4),此指令會刪除一張,另一張則視委託價是否有改變來決定是否刪掉重掛。

可以參考 setposition 的函數說明。

 

如果您刪除了啟動中策略所下出的委託,會導致策略直接中斷。(參考附圖)

附加文件

XQ小幫手 發文於   2023/08/29

Hello fredchang,

 

小幫手補充,因為沒有看清楚問題中有提到是不同商品。

策略執行的每個商品都有各自的部位庫存,所以要只針對某個商品作部位調整是辦的到的。

就以上面的例子而言,要將乙尚未成交的2張委託刪除,可以用 symbol 來判斷。

舉例來說:

if symbol = "乙" and position <> filled then setposition(filled);

這樣若商品代號為 "乙" 且部位不等於庫存的話,將乙的委託給刪除。

fredchang 發文於   2024/02/28

小幫手 您好,

如上您所回覆的用 symbol 來判斷,

當 setposition(1) 甲 和 乙 ,讓程式自動記錄 symbol ,該如何寫?

var: aa (" ")

if symbol = "aa" and position <> filled then setposition(filled);

 

XS小編 發文於   2024/02/29

Hello fredchang,

 

小編不太理解您想要作什麼,麻煩更詳細的描述下想達到的目標。

該策略同時執行甲和乙商品的話,本身就會分別獨立運作。

所以您用變數保存symbol的話,會因為相關數值與變數都是該商品獨立自有的,故保存到的 symbol 就只會是該商品。

若是有兩個不同進場條件,要分別對應不同的出場條件,那麼可以考慮這麼作,但其實可以用更簡單的變數來控制,而非使用symbol。

發表回覆
Close