簡體   English   中英

如何使用 IB API 或 ib_insync 為 Interactive 代理設置錯誤處理程序? Python

[英]How to set up an error handler for Interactive brokers using IB API or ib_insync? Python

• 我的腳本一直運行到“錯誤 10182,reqID 1639:無法請求實時更新(斷開連接)” ,這表示歷史數據農場處於非活動狀態。 • 此錯誤在通常認為的下班后彈出(我正在交易FX). • 我嘗試添加 print(util.globalErrorEvent)。它會在 10 秒左右打印所有內容,但在 10182 錯誤之前或之后都沒有檢測到錯誤。
• 我通過網關連接,目前使用紙質帳戶進行測試。 • 如果我查看我的IB Gateway 應用程序,則在發生錯誤后– 除了歷史數據農場之外,所有內容都是綠色的。 此行為黃色且狀態為非活動:cashhmds • 如果我隨后停止我的程序並重新啟動它,網關歷史數據農場將切換為綠色,並且一切都重新開始工作(無需網關重新啟動)。

我的大問題是如何標記歷史數據農場處於非活動狀態,以便我可以“優雅地”斷開連接並重新連接以重置實時更新? 如果我可以注冊歷史數據場處於非活動狀態,那么我可以實現邏輯來重新啟動連接。 • 如果Historical Data Farm == inactive 或error = 10182,那么我可以重新啟動連接。

一旦我遇到這個錯誤,實時數據更新就會永遠停止,直到我停止我的 python 腳本並重新啟動它(基本上重新啟動連接過程)。 程序不會退出或出錯,其他邏輯將繼續(例如檢查時間以注冊何時關閉程序)。

您正在尋找的是一種和解邏輯,根據定義,它因策略而異。 在與您提到的情況類似的情況下,其中一種方法可以如下:

  • 在運行的每次迭代中,您應該使用 app.isConnected() 方法檢查您是否連接到 IB TWS。 例如,如果您的交易頻率為 5 分鍾,您將在策略邏輯執行前每 5 分鍾檢查一次。

  • 上述要點負責您的客戶和 IB TWS 之間的連接。 要實施的另一項檢查是查看您是否已連接到互聯網。 在這種情況下,您可以 ping 到您的經紀人的服務器(如果他們提供)或任何公共網站。

    • 如果您沒有收到來自 ping 命令的響應,則您設置了一個循環,該循環會一直檢查直到您的連接恢復。

    • 您可以在某個時間間隔內循環運行此檢查。

  • 如果您斷開連接; 重新連接時:

  1. 該算法應檢查賬戶中的所有未平倉頭寸。 理想情況下,這些頭寸應該存在於賬戶中。 如果不是,您需要根據您的策略邏輯定義要做什么。 例如,調整算法中的位置。
  2. 獲取算法斷開連接的任何時間的歷史數據。 這是為了確保您的算法不會計算出不正確的技術或統計指標(如果有)。
  3. 再次設置流數據。 TWS 將自行完成; 您需要取消當前訂閱並重新訂閱。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM