尾盤出清

  •   232 
  • 最後發表   股海無涯  2025 十月 30
股海無涯 發文於   2025/10/19

Value1 = FilledAtBroker;

Value2 = GetQuote("漲停價");

Value3 = GetQuote("跌停價");

 

if Time = 132510 then

begin

    // 僅在收盤前統一一次動作

    CancelAllOrders();

 

    if Value1 < 0 then

        // 空單回補至 0:用漲停價模擬市價買回

        SetPosition(0, Value2)

    else if Value1 > 0 then

        // 多單賣出至 0:用跌停價模擬市價賣出

        SetPosition(0, Value3);

    // Value1 = 0 則不動作

end;

以上是我設定的腳本
並且將排程設定在13:20啟動 13:40結束

但無法如預期的將我當日庫存出清
會偵測到我庫存並在洗價後得到實際部位、成本都是0

我的想法是帳戶通常是以當沖為主,並且擔心會有忘記出掉的問題
想要在收盤時先取消所有委託單,並出清所有庫存

希望有大神能幫忙解惑,感激不盡

 

排序方式: 標準 | 最新
虎科大許教授 發文於   2025/10/19

使用什麼頻率?若是日頻率,則Time永遠為0,你就無法平倉。若是分鐘頻率,則Time不會有秒鐘,亦即不會有132510,也是無法平倉。

XS小編 發文於   2025/10/21

Hello 股海無涯,

 

小編補充,策略啟動時的部位庫存會依照您的策略部位設定。

若您選擇不設定的話,則啟動時的策略部位庫存會是0。

該值和 FilledAtBroker 取得的實際庫存數量並不一定相同。

若要將實際庫存出掉,可參考 如何使用函數取得商品的實際庫存數量 中的範例。

另外,分鐘頻率的情況下 time 回傳的是K棒開始的時間,就算是使用 currenttime,也要剛好在本機時間 132510 這一秒有洗價的情況下,currenttime = 132510 才會符合。

股海無涯 發文於   2025/10/22

Value1 = FilledAtBroker;

Value2 = GetQuote("漲停價");

Value3 = GetQuote("跌停價");

 

 

    // 僅在收盤前統一一次動作

    CancelAllOrders();

 

    if Value1 < 0 then

        // 空單回補至 0:用漲停價模擬市價買回

        SetPosition(0, Value2)

    else if Value1 > 0 then

        // 多單賣出至 0:用跌停價模擬市價賣出

        SetPosition(0, Value3);

    // Value1 = 0 則不動作


我修正成這樣
頻率設定1分鐘
並且將排程設定在13:25啟動 13:30結束
但還是無法如預期
我的想法是帳戶通常是以當沖為主,並且擔心會有忘記出掉的問題
想要在收盤時先取消所有委託單,並出清所有庫存

(通常我部位都是手動下單,不是自動交易下的策略部位)

是我哪邊沒弄好嗎

虎科大許教授 發文於   2025/10/22

(1)若要讓策略得知你有手動下單的部位,策略部位必須設定『與庫存同步』,且將『庫存新增時自動加入執行』及『庫存異動時自動同步數值』(這個功能要更新版本到17.01才行)打勾。

(2)由於132500到130000之間沒有Tick成交,因此必須勾選自動洗價才能執行策略的交易指令。

股海無涯 發文於   2025/10/23

非常感謝許教授
我嘗試了這些設定 但仍然跑出安控失敗的錯誤,是我仍然有哪些地方沒注意到嗎
再次感謝~

虎科大許教授 發文於   2025/10/23

 if position<0 and Value1 < 0 then

        // 空單回補至 0:用漲停價模擬市價買回

        SetPosition(0, Value2)

    else if position>0 and Value1 > 0 then

        // 多單賣出至 0:用跌停價模擬市價賣出

        SetPosition(0, Value3);

XS小編 發文於   2025/10/29

Hello 股海無涯,

 

小編補充,交易腳本每次運算只會執行一個交易指令。

您上面的腳本每次都會執行 CancelAllOrders,導致其他交易指令無法執行。

建議可以加上其他條件作限制。

股海無涯 發文於   2025/10/30

也謝謝許教授的回覆,感謝你
小編你好,我確實遇到這問題

 

我該怎麼設限制可以去達到在尾盤時檢視一次所有委託單,並先做取消後,在下出清單。這應該只會有一次性操作,但卻每秒都在運作...設定在上面的圖片有提供,我不太知道該如何設限制去達到我的效果

我目前語法是用這

Value1 = FilledAtBroker;

 

Value2 = GetQuote("漲停價");

 

Value3 = GetQuote("跌停價");

 

 

 

 

 

    // 僅在收盤前統一一次動作

 

    CancelAllOrders();

 

 

 if position<0 and Value1 < 0 then

 

        // 空單回補至 0:用漲停價模擬市價買回

 

        SetPosition(0, Value2)

 

    else if position>0 and Value1 > 0 then

 

        // 多單賣出至 0:用跌停價模擬市價賣出

 

 

        SetPosition(0, Value3);




虎科大許教授 發文於   2025/10/30

若你都是策略下單,沒有手動下單,則不需要CancelAllOrders();因為setposition就會自動刪單或改價。

若你有手動下單,策略並無法得知手動下單的委託,當然也就無法取消,只能手動取消。

 

發表回覆
Close