撰寫一分鐘當沖腳本
實際上線後
每日回測對照
發現進出場時間並不相同
而且點位也有問題
例如在一根K棒內成交
回測可能總是成交在最低價
所以實際上績效是落差相當大
實際運作並對照回測了幾天
發現非常不準....
撰寫一分鐘當沖腳本
實際上線後
每日回測對照
發現進出場時間並不相同
而且點位也有問題
例如在一根K棒內成交
回測可能總是成交在最低價
所以實際上績效是落差相當大
實際運作並對照回測了幾天
發現非常不準....
相關紀錄已經mail至信箱XQ信箱
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 這位寄信者是不是您,因為裡面並沒有付討論區的文章連結。
但是寄信來的題目中最相似的就是這一封,所以小幫手是以裡面的資訊來回覆您。
2 評論