2022-04-13

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

IB(Interactive Brokers)每天都會Reset,請參考如下網頁(最下方有Reset時間)
https://www.interactivebrokers.com/en/?f=%2Fen%2Fsoftware%2FsystemStatus.php
美國、瑞士、香港伺服器的Reset時間各自不同
這些時段在當地都屬於盤後的時段,所以對當沖交易者,沒差
但對留倉交易者就有影響了

官方的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)
此種情況稍微嚴重一點點,會導致[AA]策略變成圖部位與真實部位處在不同步狀態,如下所示


(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.在此時期只留保護部位的出場委託單
也就是此時期,不允許進場交易,但允許保有當下既有的部位
且允許存在保護該部位的出場委託單(但期間不改單)

根據此原則,我寫了一分MultiCharts的程式片段來處理IB Reset情況
只要把此訊號的程式片段複製貼入到你的原始訊號程式的前面即可
【IB Reset Handling Template (Open Release Version 1.4)】
除此之外,你的原始訊號程式不用任何修改
就連商品的交易時段的設定也可維持原本的全時段



此程式的輸入參數
【EnableIBResetProcedure】是否啟用本程序,上線交易時,設為True
             在回測時或暫時切到其他Broker時,設為False
             不啟用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】出場委託單要使用停止限價單或停止單
           建議使用交易所可預掛的類型
IBResetStopLimitTicks】停止限價的讓價tick數
以上的IB Reset時段設定要依據你連接那個IB伺服器而決定
(不清楚,可打電話給香港的IB客服詢問)

且IB Reset的時區如果與圖表的交易所不同,還要進一步轉換成交易所時區的時間


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

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





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

測試程式下載:Test IB Reset.pla

匯入後,會有兩個訊號
(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數)

3 則留言:

  1. 雖然如果主機在台灣都是接IB HK的server, 但HK server有兩段時間會reset, 那我們從台灣直接接US (New Jersey) server會比較好嗎 (當與接HK server比較)

    回覆刪除
    回覆
    1. 應該反問,由台灣到美國之間網路的穩定度,你可以接受嗎,請花時間自行測試看看

      刪除

(僅顯示與本文切題的留言)