萬年船 發表於 22-3-17 17:13

IB Reset對MC的影響與處理方式

本帖最後由 萬年船 於 22-3-17 19:08 編輯

IB(Interactive Brokers)每天都會Reset,請參考如下網頁
https://www.interactivebrokers.com/en/?f=%2Fen%2Fsoftware%2FsystemStatus.php
美國、瑞士、香港伺服器的Reset時間各自不同
(香港伺服器以前也只有一個時段,但這幾年突然變成兩個時段了,似乎IB對亞洲市場比較不重視)

這些時段在當地都屬於盤後的時段,所以對當沖交易者,沒差
但對留倉交易者就有影響了

官方的Reset允許期間雖然長達半小時或一小時,但真正Reset大概只會花2~3分鐘
但在這2~3分鐘內,是無法與IB伺服器連線的
委託單與成交回報有如下的影響
(1)直接掛在交易所的(native)委託單始終不受影響
(2)掛在IB伺服器的(simulated)委託單,如觸價時巧遇Reset那2~3分鐘,會延遲直到那2~3分鐘結束
(3)成交回報如巧遇Reset時,也會延遲直到那2~3分鐘結束

以上是上面的IB官方網頁上的描述,但真正對MC會有何影響呢?
簡單的答案是:有機會會產生延後送單、委託失敗、部位不受保護等的不良影響

(A)狀況一:
K棒完成時間巧遇Reset那2~3分鐘,而這2~3分鐘又可根據下圖所示的時間點,切割成兩種情況



上圖重新連線畫面會伴隨以下紀錄文字出現
"Connection between IB and Trader Workstation has been lost."

(A.1)如果K棒完成時間發生在重新連線畫面出現之前
所有新單、刪單、改單會全部暫時停在你的電腦,直到那2~3分鐘結束才真的送出去
此種情況比較輕微,只是延後送單而已
(A.2)如果K棒完成時間發生在重新連線畫面出現之後
所有新單、刪單、改單會直接委託失敗
(伴隨出現如上圖所示的The action cannot be performed, since the profile is disconnected)
此種情況稍微嚴重一點點,會導致策略變成圖部位與真實部位處在不同步狀態,如下所示



(B)狀況二:
當進場委託單成交後,如果策略有含如SetStopLoss等的Set開頭IOG指令
此時保護部位的出場委託單會試著立刻送出去,但此時如果巧遇Reset那2~3分鐘
則保護部位的出場委託單一樣會根據時間點,切割成兩種情況
如同(A.1)與(A.2)的情況,也會有(B.1)與(B.2)的情況
(B.1)的情況會導致延後送單的那段時間部位不受保護
(B.2)的情況則會導致在整個K棒的時間內,部位不受保護
如果是60分鐘K棒,那就是60分鐘內完全不會有停損出場的機會
所以狀況二是比較嚴重的

以上是IB Reset對MC的影響,那該如何處理以避免上述狀況呢?

應對IB Reset時的處理原則如下:
1.在官方規定的Reset時期,不要產生新單、刪單、改單等的訊號
2.在此時期只留保護部位的出場委託單
也就是此時期,不允許進場交易,允許保有當下既有的部位,且允許存在保護部位的出場委託單
根據此原則,我寫了一分MC的程式片段來處理IB Reset情況
只要把此程式片段加在你的原始訊號程式的前面即可
除此之外,你的原始訊號程式不用任何修改
就連商品的交易時段的設定也可維持原本的全時段

此程式的輸入參數
【IBResetStart1】第一段IB Reset開始時間,格式HHmm
【IBResetEnd1】第一段IB Reset結束時間,格式HHmm
【IBResetStart2】第二段IB Reset開始時間,格式HHmm
【IBResetEnd2】第二段IB Reset結束時間,格式HHmm
【IBResetRetracementStopRate】多頭部位(空頭部位)由高點(低點)拉回的多少百分點時出場,
               0.01表示1個百分點
               此出場委託單一旦下出去後,在整個IB Reset時期都不會變更出場價位
【IBResetUseStopLimit】出場委託單要使用停止限價單或停止單,建議使用交易所可預掛的類型
以上的IB Reset時段設定要依據你連接那個IB伺服器而決定(不清楚,可打電話給香港的IB客服詢問)
且IB Reset的時區如果與交易所不同,還要進一步轉換成交易所時區的時間
(如果你觀察IB真正Reset的時間總是落在某個區間,甚至也可以投機的縮小只設定那個區間
 但萬一哪天落在那個區間外,就賭賭運氣了)

程式下載如下



原始程式畫面如下

















萬年船 發表於 22-3-20 18:08

本帖最後由 萬年船 於 22-3-20 18:14 編輯

<<請更新最新版本>>



舊用戶:直接把【IB Reset Handling Template (Open Release Version 1.3)】程式
    放到你的訊號的最前面取代舊版即可

新用戶:直接使用最新版,無須下載舊版


Version 1.3 Release note:
(1)新增輸入欄位【EnableIBResetProcedure】,可在回測時或暫時切到其他Broker時,
 不啟用IB Reset的保護程序(設為false)
(2)再次精簡主程式(去掉前面的使用說明,只有65行)



萬年船 發表於 22-3-18 11:13

本帖最後由 萬年船 於 22-3-18 11:16 編輯

<<請更新最新版本>>



升級方法:直接把【IB Reset Handling Template (Open Release Version 1.2)】程式放到你的訊號的最前面取代舊版即可

Version 1.2 Release note:
(1)修正K棒期間大於IB Reset期間的問題
(2)修正Session交替時的次根K棒時間錯誤問題
(3)加入交集函數以精簡主程式



Option 發表於 22-3-18 21:33

我現在的處理方式是文中的第1點
「1.在官方規定的Reset時期,不要產生新單、刪單、改單等的訊號」
我在session template處理,放棄這段數據,這段時間美盤波動不大
優點是簡單暴力,缺點是如果這段時間內有單,剛好行情往反向波動...

萬年船 發表於 22-3-18 22:14

Option 發表於 22-3-18 21:33
我現在的處理方式是文中的第1點
「1.在官方規定的Reset時期,不要產生新單、刪單、改單等的訊號」
我在sess ...


如果只是利用自訂Session的方式,把IB Reset時段排除掉的話
但訊號程式完全沒變的話,則仍有可能會產生本文中提到的【(B)狀況二:】的情況
(雖然因為Session處理,進入IB Reset時段K棒就不會跳動了)

也就是在進入IB Reset時段前的最後一根K棒,如果仍會執行類似以下的下單指令的話
buy next bar at 1000 stop;
settoploss(100 * minmove points * bigpointvalue);
或其他set指令

Option 發表於 22-3-19 07:13

next bar market應該不受影響,可能有1個情況是在下1根開盤產生信號(reset完那1瞬間),不曉得這樣會什麼情況,不然就自己再把reset session多加1分鐘
我想到有另一種解法是reset session前出場,結束後再進場,不過這樣會增加交易成本

萬年船 發表於 22-3-21 15:45

在加入本【IB Reset Handling Template (Open Release Version 1.3)】新版程式後
可進行回測,藉由把【EnableIBResetProcedure】欄位設為false或true
以比較有進行IB Reset處理程序與否的績效差異
重點在於【IBResetRetracementStopRate】這個值要設定得宜,以配合原本策略的特性
雖然有進行IB Reset處理程序與否的確會有差異
但因為IB reset時段是該地區冷清的時段,所以這差異理當不該太大才是
(當然前提是K棒週期不是非常大,大到足以讓影響的時間太長)

我的策略有處理與沒處理的差異如下(K棒週期60分鐘)










betula0402 發表於 22-3-22 23:06

非常感謝分享
我對MC在IB reset時的行為完全不了解,這個資訊真的很有幫助。

萬年船 發表於 22-3-24 13:38

本帖最後由 萬年船 於 22-3-24 13:46 編輯

新版1.3已移至頂端這篇,請用最新版!


如果有興趣想實際測試看看IB Reset時期的這兩種情況(a)延後送單、(a)委託失敗
可以使用以下的測試程式來體驗
(如果不處理的話,IB Reset時期會對MC造成四種不良影響
 而在(a)延後送單、(b)委託失敗的基礎上
 即可自然可推導出(c)部位不受保護、(d)圖與策略部位不同步的情況)



匯入後,會有兩個訊號
(1) Test IB Reset - Order Delayed:此訊號可以測試延後送單的情況
  訊號行為是自啟動後,會第一秒下單,第二秒刪單,第三秒下單,第四秒刪單...
  只要在IB Reset時期前開起即可
  ***測試完記得確認最後一筆已刪單***
(2) Test IB Reset - Order Rejected:此訊號可以測試委託失敗的情況
  訊號行為是自啟動後,會在指定的日期時間開始時下一筆單(且只下一筆單)
  請在IB Reset時期前開起,但輸入參數所指定的日期與開始時間必須是IB Reset時期的中間
  當測時到委託失敗時會出現這行紀錄
  【The action cannot be performed, since the profile is disconnected】
  並且會不斷重送,也就是不斷出現上面這行
  因為本訊號有用到IOG(AllowSendOrdersAlways)的緣故,所以才會不斷重送單
  但你實際的交易訊號在當下那根K棒是不會重送單的
  ***測試完記得確認最後一筆已刪單***
(兩個訊號,請設定SafeLimitTicks為遠離會實際成交的Ticks數)


頁: [1]
查看完整版本: IB Reset對MC的影響與處理方式