【问题标题】:How to set up an error handler for Interactive brokers using IB API or ib_insync? Python如何使用 IB API 或 ib_insync 为 Interactive 代理设置错误处理程序? Python
【发布时间】:2020-06-02 22:08:43
【问题描述】:

• 我的脚本一直运行到 “错误 10182,reqID 1639:无法请求实时更新(断开连接)”,这表示历史数据场处于非活动状态。 • 通常在下班后(我在交易外汇)期间会弹出此错误。 • 我尝试添加 print(util.globalErrorEvent)。它会在 10 秒左右打印所有内容,但在 10182 错误之前或之后未检测到错误。
• 我通过网关连接,目前使用纸质帐户进行测试。 • 如果我查看我的 IB Gateway 应用程序,则在发生错误之后 – 除了历史数据农场之外,所有内容都是绿色的。此行为黄色,状态为 Inactive:cashhmds • 如果我随后停止我的程序并重新启动它,Gateway Historical Data Farm 将切换为绿色,并且一切都重新开始工作(无需重新启动 Gateway)。

我的大问题是如何标记历史数据场处于非活动状态,以便我可以“优雅地”断开连接并重新连接以重置实时更新? 如果我可以注册历史数据场处于非活动状态,那么我可以实现逻辑以重新启动连接。 • 如果Historical Data Farm == inactive 或error = 10182,那么我可以重新启动连接。

一旦我遇到这个错误,实时数据更新就会永远停止,直到我停止我的 python 脚本并重新启动它(基本上是重新启动连接过程)。程序不会退出或出错,其他逻辑将继续(例如检查时间以注册何时关闭程序一周)。

【问题讨论】:

  • 我不使用 ib-insync。试试groups.io/g/insync
  • 感谢您的建议。我也试过在那里发帖,但没有运气。
  • 您是否偶然找到了解决这个问题的方法?

标签: python error-handling interactive-brokers


【解决方案1】:

您正在寻找的是一种协调逻辑,根据定义,它因策略而异。在与您提到的情况类似的情况下,其中一种方法可以如下:

  • 在运行的每次迭代中,您应该使用 app.isConnected() 方法检查您是否连接到 IB TWS。例如,如果您的交易频率为 5 分钟,您将在策略逻辑执行前每 5 分钟检查一次。

  • 以上要点负责您的客户和 IB TWS 之间的连接。要实施的另一项检查是查看您是否已连接到互联网。在这种情况下,您可以 ping 到您的经纪人的服务器(如果他们提供)或任何公共网站。

    • 如果您没有收到来自 ping 命令的响应,则您会设置一个循环,一直检查直到您的连接恢复。

    • 您可以在一定间隔内循环运行此检查。

  • 如果您断开连接;重新连接时:

  1. 算法应检查账户中的所有未平仓头寸。理想情况下,这些头寸应该存在于账户中。如果不是,您需要根据您的策略逻辑定义要做什么。例如,调整算法中的位置。
  2. 获取算法断开连接时的历史数据。这是为了确保您的算法不会计算出不正确的技术或统计指标(如果有)。
  3. 再次设置流数据。 TWS 将自行完成;您需要取消当前订阅并重新订阅。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-01-21
    • 1970-01-01
    • 1970-01-01
    • 2015-03-18
    • 2022-10-04
    • 2021-11-29
    • 1970-01-01
    • 2015-07-13
    相关资源
    最近更新 更多