交易回測問題

  •   205 
  • 最後發表   阿貝勳  2023 二月 21
阿貝勳 發文於   2023/01/20

XQ 小幫手你好

我目前撰寫一個交易腳本,裡面的程式為計算前 30 天的 RSI 後,輸出執行腳本的商品、日期與時間、RSI 到文字檔中,腳本如下:

input: n_day_RSI(30,"RSI 天數(30)");

variable: instant_time(0); // 腳本執行的時間

variable: instant_volume(0); // 腳本執行時的成交量

instant_time = getField("Time");

instant_volume = getField("Volume");

value1 = xf_RSI("D", GetField("收盤價","AD"), n_day_RSI);

print(file("D:\XQ_Files\RSI 指標.log"), symbol, symbolName, date, instant_time, instant_volume, close, value1);

回測的設定為執行頻率: 1 分鐘,日期區間: 2022/12/16 ~ 2023/01/16,預先執行比數為 200,設定畫面如下:

執行後,資料輸出結果(如下圖),從 2022/12/28 開始才會執行腳本,不只沒有從 2022/12/16開始,連預先200筆也都沒有執行,而且在我多次測試的經驗中,腳本開始執行的日期似乎回隨著程式或執行頻率變動,(例如: 1 分鐘、五分鐘或十分鐘開始的日期都不一樣)。懇請解答(附上當天執行log)。

附加文件

排序方式: 標準 | 最新
XQ小幫手 發文於   2023/01/31

Hello 阿貝勳,

 

這是因為您所取用的歷史資料長度不夠,所以會壓縮到回測區間的資料。

關於資料讀取範圍的相關資訊,您可以參考 資料讀取範圍與腳本執行的關係 裡面的說明。

建議您可以使用 setbackbar 來取得足夠長度的歷史資料,像是 setbackBar(n_day_RSI, "D");

 

需注意RSI是種需要前期運算值的指標,您的範例中RSI的長度為30天,則所需的資料讀取筆數會是30*9 = 270 天才能夠計算出正確的數值。

由於您回測在1分鐘頻率上,經過換算後的所需筆數將會是 270 * 60 * 4.5 = 72900 筆相當大。

或許可以考慮使用日頻率搭配逐筆洗價計算,這樣所需的資料讀取筆數就會縮減到 270 筆。

阿貝勳 發文於   2023/02/17

XQ 小幫手你好

謝謝你的回覆,不過以下還有幾個問題懇請解答,

(1) 在我的程式中,函數 xf_RSI(.) 的頻率是 日,且天數是 30,

根據 RSI 指數的定義,不是應該是 (30 天上升幅度總和) / ( 30 天上升幅度總和+ 30 天下降度總和) * 100,

所以應該需要 30 筆資料(30天)即可,為何是你回覆中所提 30 * 9 = 270 筆資料。

(2) 根據你回覆的建議,我在 xf_RSI(.) 函數上面加入一行 setbackBar(.)  設定最大引用範圍,程式如下

      setbackBar(n_day_RSI, "D");

      value1 = xf_RSI("D", GetField("收盤價","AD"), n_day_RSI);

並設定回測時間為 2023 / 1/17 ~  2023/02/16, 頻率為日(預設為逐筆洗價),預先執行比數 300 (如下圖)

可是輸出結果(如下圖),

可以發現他開始洗價的日期是從 2023/02/09 號開始,而不是所設定的回測開始時間 2023 / 1/17,這真的讓我很困擾。

麻煩XQ 小幫手回覆,感謝萬分

阿貝勳

 

阿貝勳 發文於   2023/02/17

XQ 小幫手你好,

附上 log 壓縮檔案,謝謝

阿貝勳

附加文件

XQ小幫手 發文於   2023/02/21

 Hello 阿貝勳,

 

1. 關於KD的計算您可以參考此網站上的說明。

由於計算時有用到威爾德平滑法,所以會需要經過一段區間的運算才會收斂取得正確的數值。

至於這區間是多長您可以參考內建的RSI選股腳本中的 settotalbar。

您的狀況 (30天) 就會是30*9 = 270天。

 

2. 您可以參考資料讀取範圍與腳本執行的關係

setbackbar只是讓您設定引用的筆數,還需要另外設定資料讀取筆數 (settotalbar)。

就回測設定圖中來看有300筆讀取筆數應該是不會計算錯誤,實際上小幫手這邊測試是可以正常的從1/17號開始印出逐筆洗價資訊。(參考附圖)

麻煩您提供回測的腳本讓小幫手這邊搭配Log測試看問題為何。

附加文件

發表回覆
Close