请求配置更新
updateConfigProtoBuf() 用来请求修改 TWS 配置。它和 reqConfigProtoBuf() 的区别很大:读取配置只会返回状态,更新配置会改变 TWS 设置,可能影响连接、下单和日志行为。
建议先读取配置,再只提交需要修改的字段。不要为了“保存完整配置”把所有字段原样写回。
from ibapi.protobuf.UpdateConfigRequest_pb2 import UpdateConfigRequest
# 创建配置更新请求。update = UpdateConfigRequest()update.reqId = 98502
# 示例:关闭只读 API,并指定 Socket 端口。# 注意:端口必须和程序 connect() 使用的端口保持一致。update.api.settings.readOnlyApi = Falseupdate.api.settings.socketPort = 7497
# 发送后,结果会从 updateConfigResponseProtoBuf() 回调返回。app.updateConfigProtoBuf(update)| 参数 / 字段 | 类型 | 说明 |
|---|---|---|
UpdateConfigRequest() | Protobuf 请求对象 | 配置更新请求本身。 |
reqId | 整数 | 请求编号。 |
api.settings.readOnlyApi | 布尔值 | 是否开启 API 只读模式。False 表示允许程序提交订单。 |
api.settings.socketPort | 整数 | TWS API Socket 端口。修改端口后,代码连接端口也要同步修改。 |
更新成功时,回调里会看到类似结果:
UPDATE_status=successUPDATE_message=Configuration updatedUPDATE_changedFields=['configuration.api.settings.socketPort', 'configuration.api.settings.readOnlyApi']UPDATE_warnings=[]UPDATE_errors=[]changedFields 表示 TWS 接收并处理了哪些字段。即使新值和旧值相同,TWS 也可能把字段列在这里;程序不要只靠 changedFields 判断用户是否真的改了配置。
只读字段边界
Section titled “只读字段边界”不是所有能读取到的字段都能通过 API 修改。例如 allowLocalhostOnly 可以读取,但在配置更新请求里可能被 TWS 拒绝:
UPDATE_status=errorUPDATE_message=Validating configuration update request has failed. This setting is read-only and cannot be modified via APIUPDATE_errors=['configuration.api.settings.allowLocalhostOnly']面向用户的程序应把这类错误翻译为:这个设置可以从 API 读取,但不能通过 API 修改;请在 TWS 的图形界面里调整。
推荐更新流程
Section titled “推荐更新流程”- 调用
reqConfigProtoBuf()获取原配置。 - 只允许用户修改明确支持写入的字段。
- 发送
updateConfigProtoBuf()。 - 在
updateConfigResponseProtoBuf()里检查status、errors和warnings。 - 修改端口、只读模式、日志等关键项后,提示用户重新确认连接状态。
配置更新会影响 TWS 行为:
- 修改
socketPort可能导致已有程序连接失败。 - 关闭
readOnlyApi后,程序可以提交订单。 - 调整日志相关字段可能增加日志文件体积。
- 跳过订单风险提示类字段可能让高风险订单更容易被发送。
因此,交易系统里应把配置更新做成明确的人工操作,而不是程序启动时自动执行。