分配方法 XML 格式
FA 配置通过 XML 表达。requestFA() 返回 XML,replaceFA() 也需要提交 XML。对开发者来说,最重要的是理解:XML 不是展示文本,而是 TWS 的配置数据。
非 FA 账户无法取得真实 FA XML。下面的 XML 用于说明常见结构,真实节点和字段必须以 FA 账户 requestFA() 返回为准。
<ListOfGroups> <Group> <name>Group_Equal</name> <defaultMethod>EqualQuantity</defaultMethod> <ListOfAccts> <String>DU_ACCOUNT_1</String> <String>DU_ACCOUNT_2</String> </ListOfAccts> </Group></ListOfGroups>| 节点 | 中文含义 | 说明 |
|---|---|---|
ListOfGroups | 账户组列表 | 顶层容器,可能包含多个组。 |
Group | 单个账户组 | 一组参与分配的账户。 |
name | 组名 | 订单中的 order.faGroup 要匹配它。 |
defaultMethod | 默认分配方法 | 订单未指定 faMethod 时通常使用它;真实名称以 requestFA() 返回为准。 |
ListOfAccts | 账户列表 | 组内参与分配的账户集合。 |
String | 账户项 | 单个账户编号;日志中应脱敏。 |
import xml.etree.ElementTree as ET
def parse_groups(cxml): root = ET.fromstring(cxml) groups = []
for group in root.findall(".//Group"): groups.extend([{ "name": group.findtext("name"), "defaultMethod": group.findtext("defaultMethod"), "accountCount": len(group.findall(".//String")), }]) return groups这里只返回账户数量,避免把客户账户号写入普通日志。真正需要展示账户号时,应只在受控后台或调试工具中展示。
| 检查项 | 为什么重要 |
|---|---|
| XML 能被解析 | 语法错误会直接导致替换失败。 |
每个组都有 name | 下单字段需要引用组名。 |
| 每个组都有账户 | 空组无法完成有效分配。 |
| 默认方法和订单方法一致 | 避免 TWS 使用了不同分配语义。 |
| 已备份原 XML | replaceFA() 是替换配置,不是增量补丁。 |
| 模拟账户检查 | 观察分配结果是否符合业务预期。 |
如果 XML 中包含客户账户号,页面展示、日志和错误上报都应脱敏。上面的 DU_ACCOUNT_1 只是示例账户编号,不能当作真实账户号提交。
不推荐的做法
Section titled “不推荐的做法”# 不推荐:直接用字符串替换 XML。cxml = cxml.replace("Group_1", "Group_2")更稳妥的方式是用 XML 解析器修改节点:
root = ET.fromstring(cxml)group = root.find(".//Group")group.find("name").text = "Group_2"new_xml = ET.tostring(root, encoding="unicode")修改后仍要再次解析 new_xml,确认它是合法 XML,再考虑提交给 replaceFA()。