自動交易回測不準

  •   367 
  • 最後發表   Noodle  2021 七月 09
Noodle 發文於   2021/07/07

撰寫一分鐘當沖腳本

實際上線後

每日回測對照

發現進出場時間並不相同

而且點位也有問題

例如在一根K棒內成交

回測可能總是成交在最低價

所以實際上績效是落差相當大

實際運作並對照回測了幾天

發現非常不準....

排序方式: 標準 | 最新
Noodle 發文於   2021/07/07

相關紀錄已經mail至信箱XQ信箱

XQ小幫手 發文於   2021/07/09

Hello Noodle,

 

小幫手認為兩者的差別來自回測與實際運作時的差異,以下解釋。

 

回測時的1分鐘逐筆會將1分鐘的 Bar 分成四個Tick: OHLC 或是 OLHC。

前者或後者視演算法判斷: (H-O) < (O-L) 的話OHLC,反之OLHC

假設是OHLC順序的話四個Tick的運算值會分別是:

(open, open, open, open) 第一次運算

(open, high, open, high) 第二次運算

(open, high, low, low)   第三次運算

(open, high, low, close) 第四次運算

所以當您的腳本觸發的時候(像是setposition(1,close)),必定會觸發成在OHLC這四個價位中的某個價位的限價單。

所以也只能成交在那個價位之下。

 

實際運作時1分鐘逐筆洗價的設定下,除非是快市,不然每根tick都會洗到。

所以實際上觸發的價格很可能不是1分鐘Bar 的 OHLC。

那麼觸發的限價單價格也會不一樣,最後成交價也會不同。

 

如果您希望兩者盡量相同的話,小幫手建議您可以作以下修改:

腳本內進出場改為用市價進場。(像是setposition(1, market))

然後回測與即時交易都改為1分鐘頻率非逐筆,如此兩者應該就會很相似。

小幫手下週也會測試看看。

 

另外補充,建議您可以在判斷進出場的時候把position也納入考量。

像是 if Filled = 0 and position = 0 and inCondition_long then setposition(1, market);

這樣的話就不會有那麼多的交易指令與 原因:目標部位與目前部位相同且價格不變 以下指令不予執行 發生。

 

最後跟您提一下,小幫手不確定 Min Chun 這位寄信者是不是您,因為裡面並沒有付討論區的文章連結。

但是寄信來的題目中最相似的就是這一封,所以小幫手是以裡面的資訊來回覆您。

發表回覆
Close