警示腳本回測問題

  •   87 
  • 最後發表   Hiyang  3 週前
Hiyang 發文於   2025/09/10

小編你好

我用還原日頻率回測台股的策略

我在進場條件加入了condition1 = GetField("月營收年增率", "M") > 10;

結果回測會發生 "無指定欄位權限" 的錯誤

請問我該怎麼寫才可以把月營收YOY加入選股策略去回測呢?

謝謝

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

你可能是使用免費版本,有受到限制。需要訂購模組才可使用。

Hiyang 發文於   2025/09/11

我有購買盤中量化交易模組

虎科大許教授 發文於   2025/09/12

若你的腳本是選股腳本,沒有購買盤後量化選股模組,一樣有權限的問題。

XS小編 發文於   2025/09/17

Hello Hiyang,

 

小編補充,您可以在 比較各模組的不同 中確認各個模組提供的功能。

另外,XSHelp 中的選股欄位會需要盤後量化選股模組才能夠使用。

Hiyang 發文於   2025/09/22

Hi, 

我又遇到一個相關的問題

我有一個警示腳本 這一年多我每天都會執行回測 跟盤中雷達的訊號作比對確認

今天執行回測卻有一半的股票出現"不合法的欄位資料" 錯誤

我後來debug發現是GetField("月營收", "M") > 0 這個條件造成的

這一年多就只有今天回測會出錯 是雲端回測那邊出了什麼問題嗎?

 

小編可以試試看這個簡單的警示腳本

condition1 = GetField("月營收", "M") > 0;

 

ret = condition1;

回測台股普通股全部 就可以複製出問題了 

從今天開始出錯的, 昨天晚上回測都還正常

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

condition1 = GetField("月營收", "M", Default:=0) > 0;

Hiyang 發文於   2025/09/23

Hi all,

condition1 = GetField("月營收", "M", Default:=0) > 0;

上面這行似乎沒辦法編譯過 會有以下錯誤

在 ":=" 之前可能少了')'。

函數 GetField:第 3 個參數不能是 Numeric。

">" 左右兩邊的型態不同。

"=" 左右兩邊的型態不同。

 

另外想請問如何在警示腳本寫出回測當天"最新"月營收YOY > 0% 的判斷式?

既然"月營收年增率"是選股欄位, 那我只好使用資料欄位的"月營收" 去計算

 

假設回測的股票是9月5號發布8月的月營收, 那我的需求是回測9月1號到9月4號時

使用七月月營收去計算YOY, 而9月5號後 使用最新8月月營收去計算YOY

 

以下是我的寫法

if GetField("月營收", "M")[12] <> 0 then 

condition1 = GetField("月營收", "M") / GetField("月營收", "M")[12] > 1;

不知道是否正確? 我自己之前回測起來 雖然看起來是正確的,

但是我擔心GetField("月營收", "M") 實際上並不是抓到最新的YOY 

或是有些情況這個判斷式會有預期外的錯誤

另外如我前面所述, 從昨天開始回測只要用到GetField("月營收", "M") 去回測

就會有一半的股票出現異常

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

(1)我測試以下的警示腳本,並沒有問題。

condition1 = GetField("月營收", "M", Default:=0) > 0;

ret=condition1;

(2)你不需要特別判斷月營收是否更新。若9/5才更新,GetField("月營收", "M", Default:=0)就會抓到8月份營收。9/1-9/4會抓到7月份營收。若要判斷新的月營收已更新,可以用GetField("月營收", "M", Default:=0)<>GetField("月營收", "M", Default:=0)[1]判斷。

(3)以下比較月營收YOY,是OK的。

condition1 = GetField("月營收", "M") / GetField("月營收", "M")[12] > 1;

Hiyang 發文於   2025/09/23

我後來把XQ版本更新到最新以後

就可以編譯使用 Default:=0 參數了

回測起來問題也解決了

謝謝許教授的解惑!

XS小編 發文於   2025/09/30

Hello Hiyang,

 

小編補充,您可以使用 GetFieldDate 來判斷資料是否更新。

若尚未更新的話 GetFieldDate 會回傳0。

Default 參數會讓當然為不存在或是尚未更新的時候,回傳所設定的值。

發表回覆
Close