連續內外盤成交的回測問題

  •   227 
  • 最後發表   HeroTrader  2024 九月 13
HeroTrader 發文於   2024/09/06

我在程式進出場判斷中加入了連續內外盤成交筆數做為篩選 

例如: TrueAll(getField("內外盤","Tick")=1,5) 連續5次外盤成交且滿足其他條件(假設條件是成交價>35.7)即進場 

然而當我進行回測的時候 勾選非逐筆交易回測進場條件的則為  剛好在下一個1分K (ex. 09:09)開始之前的"前5筆"滿足連續5次外盤成交且成交價大於(35.7)才會觸發

像這張圖  

如果在下一個1分K (09:09) 的"前5筆" 沒有滿足條件  則不會觸發

但實戰上 如果開啟這隻程式  09:08-09:09當中如果有連續5次外盤成交且成交價大於35.7  似乎就會觸發進場了

甚至如果在更早之前滿足成交價>35.7與連續外盤成交 則實戰上也會進場 (09:01)就進場了

但這個在回測上是測不出來的 因為09:01分的前5筆 並沒有達成連續5次外盤成交(如下圖) 所以回測沒觸發

這樣就會導致回測的結果跟實戰上有很大的落差

 實戰上09:01就會進場 但回測只會觸發09:09的那一次

幾個問題

1. 有沒有辦法在實戰上做到跟回測一致的操作  我只要偵測1分K之前的5筆 滿足連續外盤成交的條件 (似乎不太可能達成)

2. 另一種方式是有沒有辦法讓回測接近實戰  也就是讓回測也能觸發09:01那一筆  而不要剛好是1分K的前五筆滿足才觸發

3. 我程式中加入 TrueAll(getField("內外盤","Tick")=1,5)  以後進行回測  回測就沒辦法勾選逐筆交易 會出錯

 

排序方式: 標準 | 最新
HeroTrader 發文於   2024/09/06

我突然想到一種解法 如果增加一個條件 Second(GetField("Time", "Tick"))>55  是否可以避免實戰跟回測過於失真的狀況?

雖說可能沒辦法達到100%複製回測的狀況  但至少能強迫最後一筆的tick成交的秒數必須要>55秒 

也就是快達到下一個1分K之前 根據當下的連續外盤次數  來逼近回測的結果

當然是可以設定>=59秒最接近回測  但最後一筆tick不一定會發生在剛好59秒  所以就大概抓個55秒 應該不會漏掉太多

虎科大許教授 發文於   2024/09/06

1.由於回測的逐筆洗價與自動交易的逐筆洗價概念不同,因此使用Tick資料回測,無法像實戰一樣。

2.你若希望新K棒出現時,判斷前一根K棒的最後5筆是否連續外盤成交,可在新K棒出現時,使用TrueAll或使用迴圈往前跑5圈判斷。

  • 按讚來自於
  • Pingzz0719
HeroTrader 發文於   2024/09/07

許教授 感謝您的回覆

如果只要往前數五筆 那我可以只用這個條件就好嗎?  countif(getField("內外盤","Tick")[1]>0,6)>5

那我實戰下單程式設定介面的部分  是否需要勾選逐筆洗價 才能夠正確讀取到tick的資訊? 

還是可以不勾選也能讀到新K棒的前五筆tick數據?

虎科大許教授 發文於   2024/09/07

若在新K棒開始時往前抓前一根K最後5筆Tick,可以不用逐筆洗價。用TrueAll(getField("內外盤","Tick")[1]=1,5);

HeroTrader 發文於   2024/09/07

還有一個問題  用這個方式回測的話  如果此標的在新K棒的前五個tick剛好被緩搓 

可能會導致不到59秒之前就沒有了tick交易紀錄  (例如9:02:35進緩搓  下一筆9:04:35) 回測時候是數9:02:35前五個tick

實戰的時候也同樣能做到嗎? 

虎科大許教授 發文於   2024/09/07

往前的五個Tick若遇到緩撮,應該會繼續往前抓緩撮前的Tick。

XS小編 發文於   2024/09/13

Hello HeroTrader,

 

小編補充,您可以利用變數在逐筆洗價的狀況下取前期值會是該根Bar最後的結果。

condition1 = TrueAll(getField("內外盤","Tick")=1,5);

 

這樣 condition1[1] 就會是判斷前一根Bar結束時最近5個Tick是否為外盤成交。

若該根Bar沒有Tick或不滿5筆的話會取到更早之前的Tick。

感謝 虎科大許教授 的熱心回覆。

發表回覆
Close