XS 進場後停損立即觸發

  •   82 
  • 最後發表   34264331  2025 七月 08
34264331 發文於   2025/07/02

INPUT first_tp_point(0, "第一止盈點"),

    first_sl_point(80, "第一止損點"),

    trailing_sl_point(80, "移動停損間距");

if shortSignal[0]and filled >= 0 then begin

   setposition(-1, Market,label:= "空頭趨勢");

stoploss_point = 0;

end;

//空單停利

if Position = -1 and Filled = -1 then begin

 

    // 初次設置固定停損點

    if stoploss_point = 0 then begin

        stoploss_point = FilledAvgPrice + first_sl_point;

        print("時間=", NumToStr(date,0), NumToStr(Time,0), 

              "空單初始止損=", NumToStr(stoploss_point, 2));

    end;

 

    // 停損觸發(包含回漲)

    if Close >= stoploss_point then begin

        if Close > FilledAvgPrice then

            SetPosition(0, label:= "空單止損")

        else

            SetPosition(0, label:= "空單移動停利");

        stoploss_point = 0;

    end;

 

    // 啟動或更新移動停損

    if Close <= FilledAvgPrice - first_tp_point then begin

        if Close + trailing_sl_point < stoploss_point then begin

            stoploss_point = Close + trailing_sl_point;

            print("時間=", NumToStr(date,0), NumToStr(Time,0),

                  "空單移動停損價格=", stoploss_point);

        end;

    end;

 

end;

截圖圖片
腳本設定 頻率15分鐘 無逐筆、無自動 ,想請問教授或小編,有無設定上的疏漏,為何會造成被立即觸發停損的情況(理論:close>22372)
20:30 收 22294 20:45 收22297 21:00 開 22295

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

應該是stoploss_point變數沒有用intrabarpersist宣告所致。

虎科大許教授 發文於   2025/07/03

不清楚你所謂的『但後續的print卻顯示為1』指的是什麼,請配合貼圖說明清楚。你貼上來的圖,看起來Print的數據都正常。

34264331 發文於   2025/07/03

我以為Setposition-1後,再跑後面的程式碼位置就會變成-1,但希望是運行整個程式等到單子出了完才會變= =

,大概知道哪裡要修改了,謝謝教授
更1: 因為前面#2跑完後跑#4 有一個多單停損>>然後倉位重置時變化時沒有重置>>導致 停損點用的是多單的

虎科大許教授 發文於   2025/07/03

Position在SetPosition指令執行的當次洗價並不會改變,要到下一次洗價才會改變。

XS小編 發文於   2025/07/08

Hello 34264331,

 

小編補充,您可以在 SetPosition 的函數說明中確認交易指令的執行方式。

除了交易指令是在腳本運算完後才執行外,另一個需注意的狀況是當腳本同一次運算碰到多個交易指令時,腳本只會執行第一個觸發的交易指令。

發表回覆
Close