跳转到内容

请求配置更新

updateConfigProtoBuf() 用来请求修改 TWS 配置。它和 reqConfigProtoBuf() 的区别很大:读取配置只会返回状态,更新配置会改变 TWS 设置,可能影响连接、下单和日志行为。

建议先读取配置,再只提交需要修改的字段。不要为了“保存完整配置”把所有字段原样写回。

from ibapi.protobuf.UpdateConfigRequest_pb2 import UpdateConfigRequest
# 创建配置更新请求。
update = UpdateConfigRequest()
update.reqId = 98502
# 示例:关闭只读 API,并指定 Socket 端口。
# 注意:端口必须和程序 connect() 使用的端口保持一致。
update.api.settings.readOnlyApi = False
update.api.settings.socketPort = 7497
# 发送后,结果会从 updateConfigResponseProtoBuf() 回调返回。
app.updateConfigProtoBuf(update)
参数 / 字段类型说明
UpdateConfigRequest()Protobuf 请求对象配置更新请求本身。
reqId整数请求编号。
api.settings.readOnlyApi布尔值是否开启 API 只读模式。False 表示允许程序提交订单。
api.settings.socketPort整数TWS API Socket 端口。修改端口后,代码连接端口也要同步修改。

更新成功时,回调里会看到类似结果:

UPDATE_status=success
UPDATE_message=Configuration updated
UPDATE_changedFields=['configuration.api.settings.socketPort', 'configuration.api.settings.readOnlyApi']
UPDATE_warnings=[]
UPDATE_errors=[]

changedFields 表示 TWS 接收并处理了哪些字段。即使新值和旧值相同,TWS 也可能把字段列在这里;程序不要只靠 changedFields 判断用户是否真的改了配置。

不是所有能读取到的字段都能通过 API 修改。例如 allowLocalhostOnly 可以读取,但在配置更新请求里可能被 TWS 拒绝:

UPDATE_status=error
UPDATE_message=Validating configuration update request has failed. This setting is read-only and cannot be modified via API
UPDATE_errors=['configuration.api.settings.allowLocalhostOnly']

面向用户的程序应把这类错误翻译为:这个设置可以从 API 读取,但不能通过 API 修改;请在 TWS 的图形界面里调整。

  1. 调用 reqConfigProtoBuf() 获取原配置。
  2. 只允许用户修改明确支持写入的字段。
  3. 发送 updateConfigProtoBuf()
  4. updateConfigResponseProtoBuf() 里检查 statuserrorswarnings
  5. 修改端口、只读模式、日志等关键项后,提示用户重新确认连接状态。

配置更新会影响 TWS 行为:

  • 修改 socketPort 可能导致已有程序连接失败。
  • 关闭 readOnlyApi 后,程序可以提交订单。
  • 调整日志相关字段可能增加日志文件体积。
  • 跳过订单风险提示类字段可能让高风险订单更容易被发送。

因此,交易系统里应把配置更新做成明确的人工操作,而不是程序启动时自动执行。