當沖交易腳本回測時無法出場

  •   22 
  • 最後發表   BEN0341  6 天前
BEN0341 發文於   2025/11/24

以下是當沖交易腳本,回測3450聯鈞 2024-01-01~2024-12-31,在2024-02-16 10:47 應該會停損出場,腳本中也有要在13:24時出場,但兩者皆沒有觸發出場,請問腳本哪裡錯了?

vars: entry_price(0);

if
    Position = 0 and
    time = 090000 and  
    open > getfield("close", "D")[1]
then begin
    SetPosition(-1, close, label:="entry");
    entry_price = close;
end;

//停利
if Position = -1 and low <= (entry_price * 0.98)
then begin
    SetPosition(0, entry_price * 0.98, label:="停利");
end;

//停損
if Position = -1 and high >= (entry_price * 1.02)
then begin
    SetPosition(0, entry_price * 1.02, label:="停損");
end;

// 收盤強制平倉
if Position = -1 and Time = 132400
then
    SetPosition(0, MARKET, label:="收盤");

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

問題出在你停損出場是採用限價單,一直沒機會成交,直到132400,仍然沒有出場,原因是非逐筆洗價會在收盤時洗價,而132400收盤時已進入試撮,因此最後會在尾盤132900出場(因為你勾選了「每日部位歸零」)。

SetPosition(0, entry_price * 1.02, label:="停損");

改成

SetPosition(0, market, label:="停損");

即可。

XS小編 發文於   2025/11/25

Hello BEN0341,

 

小編補充,XQ標示時間的方式是K棒開始的時間,所以 132400 這根1分鐘Bar代表著 132400 ~ 132500 這段時間的交易資訊。

非逐筆洗價是在Bar結束時洗價,因此 132400 運算時商品已進入搓合階段。

您可以勾選 觸發即判斷成交,這樣只要交易指令一觸發就會以當根收盤價判斷是否成交,或是在132300時就送出交易指令。

發表回覆
Close