繁体   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