[英]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.