請教2

  •   87 
  • 最後發表   SHOHEI  3 週前
SHOHEI 發文於   2026/08/03

您好,我在自動交易腳本(XS語法)裡遇到一個現象,想請教。

我在部位平倉的當下(Filled從非0變成0的那個時間點),對一個自訂的日期時間變數賦值,並且用Print確認賦值當下的數值是正確的(例如正確顯示當天日期)。

但緊接著,不到1秒後,在下一次程式重新運算時,同一個變數卻讀到初始值(變成0,像是被重置了),而且這個現象會持續到後續每一次讀取,不會恢復。我用的是一般的variable宣告方式,也試過加上intraBarPersist關鍵字宣告,兩種都遇到一樣的狀況。

想請教,這是即時自動交易模式下的已知限制或設計行為嗎?如果是,請問有沒有其他不透過自訂變數的方式,可以取得類似「上一筆交易結束的時間」這種資訊?

 

謝謝

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

若程式執行過程中,邏輯上沒有機會讓變數重置,那應該是變數沒有用Intrabarpersist宣告。若你加了Intrabarpersist還是一樣,可能需要提供程式碼才可幫忙找出問題。

SHOHEI 發文於   2026/08/03

謝謝回覆,我已經有用 intraBarPersist 宣告,但問題仍然一樣。附上一份最小化的重現範例(如附件),已經排除多個腳本實例同時掛載的可能性。麻煩幫忙看一下,LastExitDate/LastExitTime 這兩個變數,為什麼在出場當下賦值確認是對的,但下一次(空手狀態)讀取又變回0?

附加文件

SHOHEI 發文於   2026/08/03

第二份交易和第三份執行紀錄 我已做完測試 但不知為何一直上傳不了...

虎科大許教授 發文於   2026/08/04

請直接將程式碼貼文。這樣我們也可以複製到測試腳本檢視,比較容易判讀。

你提及的出場之後,用intrabarpersist宣告的兩個變數會變成0,在這個範例不會成立。應該有其他程式碼修改了這兩個變數的數值。

虎科大許教授 發文於   2026/08/04

很顯然你是用交易腳本且使用30分鐘頻率進行自動交易。不過,你有提及同一根K棒最多進場N次,這種觸發模式的安控,只有在警示腳本才有。執行交易腳本並沒有這種安控,交易腳本的系統安控只能控制每日最多進場次數而非每根K棒進場次數。當然,你可以用程式結合變數控制。若你用變數控制每根K棒進場次數,則變數一樣要用intrabarpersist宣告。

我只能說,按照你上面提供的程式,出場之後,日期與時間都會被記錄為今天及出場當下的時間,且策略啟動期間都不會被改變,除非程式其他部份有針對這兩個變數修改。另外,你沒有提供核心控制單根K棒最多進場次數的程式碼(問題很可能出在這裡),我們就無從幫你找出問題。

SHOHEI 發文於   2026/08/04

抱歉 我原本還想重貼腳本和測試結果 但一直貼不上附件... 您有看到腳本了嗎? 還需要我再貼一次嗎?

SHOHEI 發文於   2026/08/04

已根據您的說明修改 等模擬結果後再跟您報告 謝謝

虎科大許教授 發文於   2026/08/04

若附件無法貼上,則直接當作內文貼上。

發表回覆
Close