跳转到内容

请求配置

reqConfigProtoBuf() 用来读取 TWS 里与 API 相关的一组配置。它适合放在程序启动前的环境检查流程里:先看 TWS 是否允许 Socket 连接、端口是否一致、是否处于只读模式,再决定能不能继续连接、请求行情或提交订单。

这个接口使用 Protobuf 对象,不是普通字符串参数。官方说明里,设置管理从 TWS API 10.44 开始用于读取或修改订单、预防和 API 设置;如果要通过 API 修改配置,TWS 里的只读模式必须先在图形界面手动关闭。

官方参考:

from ibapi.protobuf.ConfigRequest_pb2 import ConfigRequest
# 创建配置读取请求。reqId 用来把请求和回调对应起来。
request = ConfigRequest()
request.reqId = 98501
# 发送请求后,结果会从 configResponseProtoBuf() 回调返回。
app.reqConfigProtoBuf(request)
参数类型说明
ConfigRequest()Protobuf 请求对象配置读取请求本身。这个对象来自 ibapi.protobuf.ConfigRequest_pb2
reqId整数请求编号。建议每次请求使用不同编号,方便日志排查。

reqConfigProtoBuf() 没有合约、账户、订单等业务参数。它读取的是 TWS 配置状态,不读取账户资金、持仓或行情。

一次正常响应的顶层结构类似:

CONFIG_TOP_KEYS=api,lockAndExit,messages,orders,reqId

常用字段会出现在 api.settings 下:

SETTING_readOnlyApi=False
SETTING_socketPort=7497
SETTING_allowLocalhostOnly=True
SETTING_trustedIPs=[]
SETTING_maintainAndResubmitOrdersOnReconnect=True
SETTING_maintainConnectionOnIncorrectFields=True
SETTING_loggingLevel=error
字段中文意思使用建议
readOnlyApiAPI 是否处于只读模式True 时程序不能提交订单;要下单必须在 TWS API 设置里关闭只读。
socketPortTWS Socket 端口模拟交易常见为 7497,实盘常见为 7496;程序 connect() 使用的端口必须一致。
allowLocalhostOnly是否只允许本地连接True 时只有同一台机器上的程序能连;服务器远程连接需要额外配置受信 IP。
trustedIPs受信 IP 列表用于允许指定远程 IP 连接 TWS。空列表通常表示没有额外受信 IP。
maintainAndResubmitOrdersOnReconnect连接恢复后维护并重新提交订单和网络断开后的订单恢复行为有关,适合在交易系统启动检查中展示。
maintainConnectionOnIncorrectFields字段格式错误时是否保持连接开发阶段建议知道这个值,避免一个格式错误导致连接被断开。
loggingLevelAPI 日志级别常见值如 error。排查问题时可结合 TWS 图形界面调整。

建议在程序启动时做三步检查:

  1. 先调用 reqConfigProtoBuf() 读取配置。
  2. 检查 socketPort 是否和代码里的 connect(host, port, clientId) 一致。
  3. 检查 readOnlyApiallowLocalhostOnlytrustedIPs,再决定是否允许程序进入下单流程。

如果只是开发行情、合约查询、历史 K 线功能,readOnlyApi=True 不一定会阻止你继续;如果要提交订单、修改订单或取消订单,必须确认只读模式已经关闭。