接收配置更新
调用 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 | 更新状态 | 常见为 success 或 error。必须检查。 |
message | TWS 返回的说明 | 适合翻译后展示给用户。 |
changedFields | TWS 处理的字段列表 | 可用于日志记录,但不要把它当成唯一成功依据。 |
warnings | 警告列表 | 有警告时应展示给用户。 |
errors | 错误列表 | 非空时说明至少有部分字段没有被接受。 |
UPDATE_RESPONSE_KEYS=changedFields,errors,message,reqId,status,warningsUPDATE_status=successUPDATE_message=Configuration updatedUPDATE_changedFields=['configuration.api.settings.socketPort', 'configuration.api.settings.readOnlyApi']UPDATE_warnings=[]UPDATE_errors=[]这种响应表示 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']这种响应表示请求被 TWS 拒绝。常见原因包括:
- 字段只能读取,不能通过 API 修改。
- 字段类型不正确,例如把端口写成字符串。
- 新值不符合 TWS 的配置规则。
- TWS 版本不支持该字段的写入。
错误处理建议
Section titled “错误处理建议”交易系统可以按下面的方式处理:
if status != "success": # 把 TWS 原始 message 记录到日志,同时给用户展示更易懂的中文说明。 raise RuntimeError(f"TWS 配置更新失败: {message}; errors={errors}")如果配置更新失败,不要继续假设配置已经生效。正确做法是停止相关流程,提示用户检查 TWS 设置或手动调整。