選股交易回測時,2018/01/01-2020/01/01 之間都有觸發進場,但交易回測時,同樣採用 2018/01/01-2023/07/07 的回測範圍,第一筆交易卻是 2020/01/31,2018-2019 的標的都沒有觸發進場。2020/01/31 之後有也不少標的沒有進場。
選股腳本回測報告
交易腳本回測報告
回測
使用的選股與交易腳本都已經寄信到 XQservice@xq.com.tw,請協助確認為什麼會有這種情況。
選股交易回測時,2018/01/01-2020/01/01 之間都有觸發進場,但交易回測時,同樣採用 2018/01/01-2023/07/07 的回測範圍,第一筆交易卻是 2020/01/31,2018-2019 的標的都沒有觸發進場。2020/01/31 之後有也不少標的沒有進場。
選股腳本回測報告
交易腳本回測報告
回測
使用的選股與交易腳本都已經寄信到 XQservice@xq.com.tw,請協助確認為什麼會有這種情況。
Hi 小幫手
您提供的腳本確實能夠在交易回測中觸發 2018/02/09 的進場
我剛用了另一個同樣進出場邏輯的腳本,裡頭沒有用到您提到的成交金額(元),回測結果依然是從 2020/01/31 才開始進場。成交金額(元) 這個參數之前只是應用在 print 裡,之前修改腳本忘了移掉,但腳本沒有使用這個參數作為進出場參考,感覺不是這個參數問題。
後來我把進場條件裡的 估計量 改成 成交量 (也移除了之前用於 print 的殘留參數),回測才能順利觸發 2018 的標的進場。
但我剛去 XS Help 確認過,估計量 說明並沒有提到是 2020 才提供的數據,而且有寫明是支援交易腳本&日頻率的使用。

請問是交易回測時透過 CurrentTime 指定進場時間,根據當下的估計量去計算是否要進場,此時判斷用的成交量就能拿來取代估計量嗎?還是估計量本身有Bug,無法如XSHelp說明一般用於日頻率回測呢?
我是把雷達腳本的進場條件改到交易腳本想做成自動化行為,預期是在每天 N 點之後、估計量超過條件即可進場,請問這個做法你們預期用戶應該怎麼寫,才能在交易腳本實際運作&回測時,符合我所描述的進場情況呢?
另外,我將 估計量 改成 成交量 後,雖然 2018 開始就能進場,但仍然沒有進場原問題中橘色框內的標的。請問這個沒有正確進場的情況是什麼原因導致的呢?

上述兩個問題相關的 交易腳本 & 交易回測報告 都 mail 到 XQ 信箱了,再麻煩確認一下。
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,故條件不會觸發。
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,還是為了效能或伺服器資源考量,只保存到某個小頻率的情況。這塊若方便做一下說明,用戶會比較知道怎麼應用該參數去跑回測或執行自動交易。
謝謝
Hello iker,
關於欄位歷史資料支援長度的部分,小幫手會將您的意見轉告相關人員。
XQ計算的估計量您可以參考此篇文章: 依成交量分佈情況而設計的預估量演算法
系統內建的估計量的統計天數參數為10。
估計量 欄位有提供分鐘頻率及日頻率,所以是有支援到1分鐘頻率沒錯。
實際上在自動交易回測時,選擇日頻率的話會以逐筆洗價 (每分鐘運算一次) 來運算,所以估計量也是會取得在該分鐘運算所對應的值。
估計量在盤中的時候一定會大於當下的日成交量,但是否會大於最後的日成交量則不一定。
小幫手不太確定您指的 "用估計量的時候回測結果更奇怪" 是什麼狀況,建議您在回測時若覺得腳本沒有如同所想的運作,將相關數值印出確認會比較容易理解,將相關的日期時間對應數值給小幫手的話也比較好確認。
Hi 小幫手
謝謝,我會試試看直接在交易腳本引用函式。
print 結果變得奇怪的問題今天測試後沒辦法復現,後續有再發生會再提供。
感謝小幫手回覆~
7 評論