跳转到内容

系统消息代码

系统消息代码用于告诉程序 TWS 和 IBKR 后端服务的连接状态。它们经常出现在 error() 回调里,但大多数不是失败。

代码常见含义新手解释
2103行情服务器连接断开行情服务暂时不可用,需要等待恢复或重连。
2104行情服务器连接正常正常信息,通常不用处理。
2105历史数据服务器连接断开历史数据请求可能暂时失败。
2106历史数据服务器连接正常正常信息,通常不用处理。
2107历史数据服务空闲不代表错误。
2108行情数据服务空闲不代表错误。
2158安全定义数据服务器连接正常合约定义服务正常。

这些消息常在刚连接 TWS 后集中出现。程序不应因为收到 21042106 就退出。

INFO_CODES = {2103, 2104, 2105, 2106, 2107, 2108, 2158}
def error(self, reqId, errorTime, errorCode, errorString, advancedOrderRejectJson=""):
if errorCode in INFO_CODES:
print("系统信息:", errorCode, errorString)
return
print("请求错误:", reqId, errorCode, errorString)

过滤信息码不是忽略它们,而是把它们放进正确的日志级别。21032105 这类断开消息仍然值得记录,因为它们会影响接下来的行情或历史数据请求。

TWS 模拟账户连接成功后,收到的信息码如下:

INFO_CODES=2104,2104,2104,2104,2106,2106,2158

这说明行情服务、历史数据服务和安全定义服务都向 API 报告了可用状态。随后如果某个请求返回错误,应优先排查该请求本身,而不是先怀疑 TWS 连接已经断开。

日志级别适合记录的代码
INFO21042106210721082158
WARN21032105
ERROR合约、行情、订单等请求级失败

如果做面向用户的调试工具,可以把系统消息折叠显示,只把请求级错误高亮给用户。