回測與實際交易差異

  •   413 
  • 最後發表   NICK TZ  2022 五月 04
NICK TZ 發文於   2022/04/02

您好

在4/1程式執行中

實際觸發如下圖在9:40觸發 與12:25觸發

 

但是在回測過程中只有觸發一次

在設定上回測與實際都使用逐筆觸發

 

 

 

 

請問如何改善?

此外我設定k線內單筆觸發

實際k線內卻多次觸發 

 

請問如何改善?

 

謝謝

排序方式: 標準 | 最新
NICK TZ 發文於   2022/04/07
XQ小幫手 發文於   2022/04/13

Hello NICK TZ,

 

回測的逐筆洗價和即時的逐筆洗價並不同。

就您的圖上來看,使用的應該是5分鐘頻率,回測的逐筆洗價會使用1分鐘頻率的Bar來組成,換句話說,就是一根Bar會運算5次。

跟即時的逐筆洗價是每次洗價就運算會有所不同,進而影響是否有觸發。

 

視您回測出場的方式而定,當根Bar內可能沒辦法同時進出場。

這樣的話雷達多次觸發,回測因設定可能導致觸發後還沒出場而無法再度進場 (觸發) 的狀況。

 

若您上面的部分還有問題,和關於雷達設定K棒內單次觸發卻有多次觸發的部分,需要麻煩您提供 策略雷達匯出檔勾選(包含)警示腳本、回測的相關設定(截圖或回測報告皆可) 以及 XQ Log 來檢驗。

Log資料夾(預設路徑:C:\SysJust\XQLite\LOG)直接壓縮後提供即可。

您可以直接將檔案上傳,如果檔案過大的話也可以Mail至客服信箱 XQservice@XQ.com.tw 且務必附上 討論文章連結網址(小幫手才能盡早處理)。

 

另外小幫手補充說明,小幫手回覆時都是由討論區的後面往前面回覆。(優先回覆較早發問的用戶)

所以如果您在同一篇文章推文的話會造成您的文章被往前推,反而讓小幫手看到問題的時間變晚。

由於近來問題量很多,麻煩發問後多等待一陣子。

非常感謝。

NICK TZ 發文於   2022/04/20

小幫手您好

已將資料寄至該信箱

再麻煩協助

另外"使用的應該是5分鐘頻率,回測的逐筆洗價會使用1分鐘頻率的Bar來組成,換句話說,就是一根Bar會運算5次。"

也就是說 如果執行要與回測(逐筆回測)相符程度高執行與程式編寫建議都以一分鐘(不逐筆執行)較為準確嗎?

NICK TZ 發文於   2022/04/20

補充剛剛信件內容

4/13是回測沒有 實際上有交易

 

4/18 是選k棒內單次交易 實際連續觸發10次

XQ小幫手 發文於   2022/04/27

Hello NICK TZ,

 

您寄來的檔案裡面沒有使用 策略雷達匯出檔勾選(包含)警示腳本,截圖上的策略也只有 condition1 = False。

小幫手這樣沒辦法確認問題原因。(小幫手無法取用用戶的任何腳本資訊,除非用戶提供)

另外您在提供Log時會建議您提供完整的Log,因為工程師要確認的東西可能會比較多,屆時如果每需要什麼資訊就要再跟您索求。

 

如果要執行和逐筆回測相符程度高的話,會建議您不要使用逐筆洗價會比較好,這樣就會是每根Bar運算一次。

到不一定需要用1分鐘頻率,這看您的交易策略而定。

 

小幫手舉個很簡單的例子來說明為什麼回測和即時的逐筆洗價會有差別。

 

舉例來說,警示條件是: if close cross over average(close, 5) then ret = 1;

在5分鐘頻率即時逐筆洗價的時候,會是每次洗價都運算,所以您可以想成會運算到這根Bar中出現的所有價位。

假設價格在這根Bar high 附近的時候條件會符合,那麼即時因為每次洗價都會運算,那麼在洗到高價出現的時候就會警示。

 

相對的,回測5分鐘頻率逐筆洗價只會運算5次,每次運算的價格都會是對應的1分鐘收盤價,那麼自然就不會算到該根5分鐘Bar的High,也就不會觸發。

NICK TZ 發文於   2022/04/27

感謝小編

""

舉例來說,警示條件是: if close cross over average(close, 5) then ret = 1;

在5分鐘頻率即時逐筆洗價的時候,會是每次洗價都運算,所以您可以想成會運算到這根Bar中出現的所有價位。

假設價格在這根Bar high 附近的時候條件會符合,那麼即時因為每次洗價都會運算,那麼在洗到高價出現的時候就會警示。

""

以上描述可以理解

我目前設定的策略是五分鐘 "逐筆回測"效果是好的

因您有提到回測的逐筆實際上是1分抓一次 我的想法是在同樣的策略中讓他進行一分鐘不逐筆

也就是說我改為一分鐘不逐筆策略執行 與五分鐘的逐筆回測理論上可以相符

但不知可以如何快速設定達到此效果或更改寫法

更改寫法時就會遇到另一個新的問題

比如說 high[5] 改為一分鐘應該怎麼寫才正確

或者

getsymbolfield("tse.TW", "Close","1")[5]

volume[5]

因為時間軸的位置不是現在 起始點是之前

請小編指導

XQ小幫手 發文於   2022/05/04

Hello NICK TZ,

 

五分鐘逐筆 和 一分鐘不逐筆 並不相同。

五分鐘逐筆是每分鐘運算一次腳本,但使用的還是5分鐘頻率的資料。

而一分鐘不逐筆雖然也是每分鐘運算一次腳本,但使用的會是1分鐘頻率的資料。

舉例來說:

五分鐘逐筆 在 9:03 運算時使用open的話,取得的會是 09:00 開始的價格。(該根5分鐘Bar的開始價格)

而一分鐘不逐筆其得的會是 09:03 開始的價格。(該根1分鐘Bar開始的價格)

如果您在一分鐘不逐筆使用Getfield("Open", "5") 的話,就會和五分鐘逐筆一樣,取得 09:00 開始的價格。

 

在您理解這一點後,就可以知道 high[5] 在回測5分鐘逐筆運算中,取得的會是5根Bar前的high,就算您一根Bar會運算5次,取到的值都會是相同的。

要在1分鐘頻率上取得相同的值,要使用 GetField("High", "5")[5]。

發表回覆
Close