8200 自動交易錯誤

  •   29 
  • 最後發表   stone77  2 週前
stone77 發文於   2025/11/20

8200 自動交易錯誤,從2024開始問,回報問提,送了N次log,都沒答案

請問如何寫才正確?請大神幫忙

截圖圖片

 

If Position = 0 Then Begin
    If _long_ok Then Begin
        SetPosition(1, Market, label:="多單進場");
        _entry_price = Close;
        _stop_price  = _entry_price - (_stop_points * _min_move / _price_scale);  // 分開計算,避免錯誤
        Return;
    End
    Else If _short_ok Then Begin
        SetPosition(-1, Market, label:="空單進場");
        _entry_price = Close;
        _stop_price  = _entry_price + (_stop_points * _min_move / _price_scale);  // 分開計算,避免錯誤
        Return;
    End;
End;

// 多單出場
If Position > 0 Then Begin
    If Close <= _stop_price or _exit_long Then Begin
        SetPosition(0, Market, label:="多單出場(含停損)");
        _entry_price = 0; _stop_price = 0;
        Return;
    End;
End;

// 空單出場
If Position < 0 Then Begin
    If Close >= _stop_price or _exit_short Then Begin
        SetPosition(0, Market, label:="空單出場(含停損)");
        _entry_price = 0; _stop_price = 0;
        Return;
    End;
End;

附加文件

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

從錯誤訊息研判,問題應該是送出的委託已成交,卻又嘗試刪單或改價。從買進1口的同時,出現此錯誤,研判不是改價的問題(因為你有用position=0控制,不會重複送出setposition(1,market)進行改價),看起來應該是刪單的問題。當你送出買進1口,下一個Tick馬上符合Close <= _stop_price or _exit_long條件,而送出setposition(0,market)指令,由於送出此指令在買進的指令未成交時會做刪單的動作,但要刪單時,因為已經成交而無法刪單,才造成此錯誤。請檢查送出買進1口時,Close <= _stop_price與 _exit_long這兩個條件有沒有可能其中一個是True。

若還是沒辦法解決問題,可提供完整的程式碼,這樣才有助於解決問題。

XS小編 發文於   2025/11/24

Hello stone77,

 

小編補充,除了position外您可以一併加上 filled當作條件,如 If Position = 0 and Filled = 0 Then ...,這樣就會是要委託成交後才會繼續下出交易指令。

就不會發生快市洗價運算開始時委託尚未成交,運算結束時委託成交的情況導致交易指令無法變更委託的情況。

發表回覆
Close