[英]How to replicate bracket orders functionality using Interactive Brokers (IB) API (ib_insync) for 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 命令的響應,則您設置了一個循環,該循環會一直檢查直到您的連接恢復。
您可以在某個時間間隔內循環運行此檢查。
如果您斷開連接; 重新連接時:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.