跳转到内容

分配方法 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 使用了不同分配语义。
已备份原 XMLreplaceFA() 是替换配置,不是增量补丁。
模拟账户检查观察分配结果是否符合业务预期。

如果 XML 中包含客户账户号,页面展示、日志和错误上报都应脱敏。上面的 DU_ACCOUNT_1 只是示例账户编号,不能当作真实账户号提交。

# 不推荐:直接用字符串替换 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()