跳转到内容

接收配置更新

调用 updateConfigProtoBuf() 后,TWS 会通过 updateConfigResponseProtoBuf() 返回更新结果。这个回调必须认真处理,因为配置更新失败时,TWS 不一定会抛出普通异常,而是把原因放在响应字段里。

from google.protobuf.json_format import MessageToDict
def updateConfigResponseProtoBuf(self, updateConfigResponseProto):
"""接收 TWS 配置更新结果。"""
payload = MessageToDict(
updateConfigResponseProto,
preserving_proto_field_name=True,
always_print_fields_with_no_presence=True,
)
status = payload.get("status")
message = payload.get("message")
errors = payload.get("errors", [])
warnings = payload.get("warnings", [])
print("更新状态:", status)
print("说明:", message)
print("错误:", errors)
print("警告:", warnings)
字段中文意思处理方式
reqId请求编号对应这次 updateConfigProtoBuf()
status更新状态常见为 successerror。必须检查。
messageTWS 返回的说明适合翻译后展示给用户。
changedFieldsTWS 处理的字段列表可用于日志记录,但不要把它当成唯一成功依据。
warnings警告列表有警告时应展示给用户。
errors错误列表非空时说明至少有部分字段没有被接受。
UPDATE_RESPONSE_KEYS=changedFields,errors,message,reqId,status,warnings
UPDATE_status=success
UPDATE_message=Configuration updated
UPDATE_changedFields=['configuration.api.settings.socketPort', 'configuration.api.settings.readOnlyApi']
UPDATE_warnings=[]
UPDATE_errors=[]

这种响应表示 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']

这种响应表示请求被 TWS 拒绝。常见原因包括:

  • 字段只能读取,不能通过 API 修改。
  • 字段类型不正确,例如把端口写成字符串。
  • 新值不符合 TWS 的配置规则。
  • TWS 版本不支持该字段的写入。

交易系统可以按下面的方式处理:

if status != "success":
# 把 TWS 原始 message 记录到日志,同时给用户展示更易懂的中文说明。
raise RuntimeError(f"TWS 配置更新失败: {message}; errors={errors}")

如果配置更新失败,不要继续假设配置已经生效。正确做法是停止相关流程,提示用户检查 TWS 设置或手动调整。