預掛單的問題

  •   321 
  • 最後發表   無情卻慈悲  2022 十月 11
無情卻慈悲 發文於   2022/09/29

你好, 

我在腳本指令在進場成功後,有部位後會先預掛停利單,如下

 

if position > 0 and FilledAvgPrice > 0

then begin

SetPosition( 0, AddSpread(FilledAvgPrice, win_tick),label:="預掛停利") ;

end;

有開逐筆,但會發現它會一直重新刪除委託再重新掛,請問這樣我該怎麼改較好?謝

有辦法判斷「 是否已有委託過了」而不會再重新刪單再重新委託同一價位?

而不是只要有委託成立,position就會是0了嗎?既然是0,上面的判斷式應就不會反覆成立,不是嗎?

 

補充2,

我後來加了一個變數來記錄是否已送出過停利委託單,但仍會一直反覆刪單再送單,不知為何?

var:done_w(false);

if position > 0 and done_w = false

then begin

SetPosition( 0, AddSpread(FilledAvgPrice, win_tick),label:="預掛停利") ;

done_w = true;

end;

補充3

當我的預掛停利單有成交後,它仍會反覆再重送委託,

一開始會先這樣的錯誤

 補充4

交易安控有設定持有最大部位是1,但在當日的成交記錄中卻有4筆,

可是在我的策略介面,它仍是尚有部位1,感覺非常奇怪!

 

 

 LGO檔 :

https://drive.google.com/file/d/1n8oESDfuvfU7lKiRT4hdsUiQEf5X-753/view?usp=sharing

 

 

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

Hello 無情卻慈悲,

 

小幫手會請相關人員確認您的 XQ Log。

 

理論上來說如果委託價沒有改變的話,同樣部位的委託單掛上去後是不會作刪單處理。

且在腳本該次執行完畢後 position 就會被設為0,這段腳本應該就不會在執行。

要確認問題原因,可能會需要您的腳本。

小幫手推測可能腳本中其他地方的交易指令造成了不斷刪單送單。

 

關於用變數來記錄是否已送出單停利單的部分,您使用逐筆洗價的話,變數要設為 intrabarpersist 才能紀錄每次洗價變數的變化。

 

那個錯誤訊息應該是在洗價過程中,委託已經成交但交易中心還沒收到回報時,運算出要刪改單的狀況。

此時交易中心送出刪改單指令,但由於已經成交導致無效。

 

安控的部分則要確認過 Log 才能得知。

無情卻慈悲 發文於   2022/10/05

你好,我發問文中本就有附LOG檔,

而腳本我後來有再更動,這樣若附上來,會準嗎?

 

再麻煩您,感謝

無情卻慈悲 發文於   2022/10/05

因今日仍會發生,我跑60分K,我重新附上最新的腳本與LOG,

LOG與腳本的檔案如下 :

https://drive.google.com/drive/folders/1dDh_SDPfkvkyucri8TP9D6X2z2EWYJVM?usp=sharing

XQ小幫手 發文於   2022/10/06

Hello 無情卻慈悲,

 

就您的log來看,您發生的狀況是 預掛停利單 => 因為符合進場條件,所以刪單 => 又預掛停利單 這樣的迴圈。

建議您在判斷時可以加上filled來當作條件。

 

持有最大部位的單次交易的最大數量,但不會限制多次進場。

您的狀況是當日有進場4次每次1張,所以會顯示4000。

如果要避免這樣的狀況,可以設定每日最多進場次數。

無情卻慈悲 發文於   2022/10/06

我原本有加上filled判斷,如

//多單停利預掛

if position > 0  //and Filled = 1 

and FilledAvgPrice > 0 

and close > AddSpread(FilledAvgPrice, 1)

then begin

SetPosition( 0, AddSpread(FilledAvgPrice, win_tick)) ;

end;

但仍然一樣,我才把Filled 拿掉試試。

我昨日附的code與log,麻煩您以「金象電」那個狀況再幫我確認一下是哪裡有問題,可以嗎

它掛單後postition應是0了,怎麼if判斷就無效仍會一直送出掛單呢

 

無情卻慈悲 發文於   2022/10/06

然後我昨日 「補充」的發問,可以順便幫我回覆 下原因嗎?謝

XQ小幫手 發文於   2022/10/11

Hello 無情卻慈悲,

 

filled 的判斷在進場的邏輯中也要判斷,只有出場部分判斷是不夠的。

不然就會發生刪了停利單後 (position = 0, filled = 1) 的狀況下,符合進場條件所以再度進場 (position = 0 filled = 1,進場後變回 position = 1 filled = 1),然後又下出預掛停利單,部位就一直在1和0循環。(一直刪單下單)

也就是說,在下 預掛停利 後,下次洗價若讓多單進場的條件成立,所以就又讓position變成非零。

接著在下下次洗價,因為position非零,就又踩進去 預掛停利 的邏輯。

因此建議您所有的進出場條件中最好都用position 和 filled來判斷。

您可以實際將相關條件用 print 印出,就會更容易理解。

 

您"補充"發問,是指 腳本我後來有再更動,這樣若附上來,會準嗎? 這個問題嗎?

說實話,這要看您如何修改而定。

如果是像腳本裡加入了print印出資訊,這樣當然不會有影響。

但如果是像上述的條件改變的話,腳本運作就會有差別。

因此建議您,附上問題發生的腳本,這樣最容易找出錯誤。

 

 

發表回覆
Close