使用交易腳本串上選股腳本進行回測時,兩邊進場的標的數量不同

  •   195 
  • 最後發表   iker  2023 七月 18
iker 發文於   2023/07/07

選股交易回測時,2018/01/01-2020/01/01 之間都有觸發進場,但交易回測時,同樣採用 2018/01/01-2023/07/07 的回測範圍,第一筆交易卻是 2020/01/31,2018-2019 的標的都沒有觸發進場。2020/01/31 之後有也不少標的沒有進場。

選股腳本回測報告

 

交易腳本回測報告

  回測

使用的選股與交易腳本都已經寄信到 XQservice@xq.com.tw,請協助確認為什麼會有這種情況。

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

Hello iker,

 

因為您的交易腳本中使用的 成交金額(元) 欄位只有從2020/01/02開始提供。

 

您可以用個簡單的交易腳本測試,舉例來說:

if position = 0 then setposition(1, market);

if time = 132000 and position = 1 then setposition(0, market);

這樣就可以跟選股一開始相同,2018/02/09 開始進場。

iker 發文於   2023/07/11

Hi 小幫手

您提供的腳本確實能夠在交易回測中觸發 2018/02/09 的進場

我剛用了另一個同樣進出場邏輯的腳本,裡頭沒有用到您提到的成交金額(元),回測結果依然是從 2020/01/31 才開始進場。成交金額(元) 這個參數之前只是應用在 print 裡,之前修改腳本忘了移掉,但腳本沒有使用這個參數作為進出場參考,感覺不是這個參數問題。

後來我把進場條件裡的 估計量 改成 成交量 (也移除了之前用於 print 的殘留參數),回測才能順利觸發 2018 的標的進場。
但我剛去 XS Help 確認過,估計量 說明並沒有提到是 2020 才提供的數據,而且有寫明是支援交易腳本&日頻率的使用。

請問是交易回測時透過 CurrentTime 指定進場時間,根據當下的估計量去計算是否要進場,此時判斷用的成交量就能拿來取代估計量嗎?還是估計量本身有Bug,無法如XSHelp說明一般用於日頻率回測呢?

我是把雷達腳本的進場條件改到交易腳本想做成自動化行為,預期是在每天 N 點之後、估計量超過條件即可進場,請問這個做法你們預期用戶應該怎麼寫,才能在交易腳本實際運作&回測時,符合我所描述的進場情況呢?

iker 發文於   2023/07/11

另外,我將 估計量 改成 成交量 後,雖然 2018 開始就能進場,但仍然沒有進場原問題中橘色框內的標的。請問這個沒有正確進場的情況是什麼原因導致的呢?

 

上述兩個問題相關的 交易腳本 & 交易回測報告 都 mail 到 XQ 信箱了,再麻煩確認一下。

XQ小幫手 發文於   2023/07/14

Hello iker,

 

小幫手和相關人員確認過,預估量和成交金額一樣,是從2020才開始提供資訊。

要確認資料長度最簡單的方法就是將其畫在執行商品的指標上,在沒有限制筆數 (ex. 日頻率) 的情況下預估量最早只有到2020年1月的資料。

或許您可以考慮自行估計計算預估量。

 

沒有進場的原因小幫手看腳本認為是條件沒有達成,建議您可以將相關數值印出檢查。

就以選股 2020/03/09 買進的 8930 為例。

8930 該日的開盤價為 12.25,成交量為 103張。

您longCondition中有個條件是日成交量要大於 perEntryPosition * 10,其中 perEntryPosition 會是 GetPerEntryPosition(30, 12.25) 而這計算出來的數值約為 24.38。

103 並沒有大於 24.38 * 10 = 243.8,故條件不會觸發。

iker 發文於   2023/07/14

Hi 小幫手

先感謝您回覆,以下還有一點建議跟疑問:

建議貴公司應該把這類從特定日期才開始提供(非2018/01/01開始就能正常提供的數據),在回測過程中都列在執行失敗的紀錄裡,這樣用戶才有辦法理解問題點只是在於資料庫支援長度不足,而不是腳本寫法或是伺服器運算問題。並盡量在 XS Help 裡寫明支支援的日期,或是能在 XS Help 這邊直接讓用戶針對不同腳本(雷達/選股/交易)去篩選有限日期的支援參數起始日。

或許您可以考慮自行估計計算預估量。

不太明白如果是日頻率的回測,使用者該怎麼自行計算 CurrentTime 當下的估計量,能請您提供一個可用的範例嗎?(計算公式希望是能符合貴公司的估計量,如果是用戶自定義的公式,當觸發結果與預期有出入時,會變得很難檢查)

沒有進場的原因小幫手看腳本認為是條件沒有達成,建議您可以將相關數值印出檢查。

就以選股 2020/03/09 買進的 8930 為例。

8930 該日的開盤價為 12.25,成交量為 103張。

您longCondition中有個條件是日成交量要大於 perEntryPosition * 10,其中 perEntryPosition 會是 GetPerEntryPosition(30, 12.25) 而這計算出來的數值約為 24.38。

103 並沒有大於 24.38 * 10 = 243.8,故條件不會觸發。

其實我真正想要條件是 估計量要大於  perEntryPosition * 10,只是因為取用估計量的時候回測結果更奇怪,所以暫時先用成交量判斷。但這樣與實際預期的情境會有誤差,因為估計量在盤中很容易超過當日最後實際的成交量,造成實際應該進場的時候不會進場。

ps. GetPerEntryPosition 也不是直接運算,而是最後有用 Floor 去捨去小數。

想確認一下交易腳本使用到估計量參數時,有什麼回測上該注意的細節嗎?或是有哪個頁面能詳細解釋一下這個參數實際支援的情況?
按目前 XS Help 的描述:

估計量是依照過去N日, 每日1分鐘累計成交均量(統計天期平均), 算出每分鐘累計成交量的分佈比例, 然後依照目前的累計日成交量以及分佈比例, 推算當日收盤估計成交量。

使用者很可能會理解成你們有按分鐘保存估計量的數據,才有可能支援分K到日K級別的回測。想確認是不是您說的 2020 年開始,後面的估計量都是支援到 1 分K,還是為了效能或伺服器資源考量,只保存到某個小頻率的情況。這塊若方便做一下說明,用戶會比較知道怎麼應用該參數去跑回測或執行自動交易。

謝謝

XQ小幫手 發文於   2023/07/18

Hello iker,

 

關於欄位歷史資料支援長度的部分,小幫手會將您的意見轉告相關人員。

 

XQ計算的估計量您可以參考此篇文章: 依成交量分佈情況而設計的預估量演算法

系統內建的估計量的統計天數參數為10。

 

估計量 欄位有提供分鐘頻率及日頻率,所以是有支援到1分鐘頻率沒錯。

實際上在自動交易回測時,選擇日頻率的話會以逐筆洗價 (每分鐘運算一次) 來運算,所以估計量也是會取得在該分鐘運算所對應的值。

估計量在盤中的時候一定會大於當下的日成交量,但是否會大於最後的日成交量則不一定。

小幫手不太確定您指的 "用估計量的時候回測結果更奇怪" 是什麼狀況,建議您在回測時若覺得腳本沒有如同所想的運作,將相關數值印出確認會比較容易理解,將相關的日期時間對應數值給小幫手的話也比較好確認。

iker 發文於   2023/07/18

 Hi 小幫手

謝謝,我會試試看直接在交易腳本引用函式。

print 結果變得奇怪的問題今天測試後沒辦法復現,後續有再發生會再提供。

感謝小幫手回覆~

發表回覆
Close