分配方法与组
财务顾问账户的核心能力,是把一笔交易分配到多个客户账户。TWS API 不会替开发者自动决定“哪些账户参与、每个账户分多少”,这些规则需要在 TWS 的 FA 配置里定义,再由订单引用对应账户组。
普通个人账户通常没有 FA 配置。代码可以连接 TWS,但请求 FA 数据时会被拒绝,这是账户类型限制,不是 Socket 连接问题。
| 名称 | 中文含义 | 作用 |
|---|---|---|
| Account Group | 账户组 | 一组参与分配的子账户。 |
| Profile | 旧式分配配置 | 旧版本文档常见;新项目优先使用 Group。 |
| Allocation Method | 分配方法 | 决定订单数量如何拆到不同账户。 |
| XML | 配置载体 | requestFA() 返回、replaceFA() 提交的配置文本。 |
faGroup | 订单字段 | 指定这笔订单使用哪个账户组。 |
faMethod | 订单字段 | 可用于部分旧式 Profile 或需要覆盖默认方法的场景;新项目优先读取组默认方法。 |
faPercentage | 订单字段 | 主要用于百分比变化等旧式用法;不要把它当成所有百分比分配的唯一入口。 |
常见分配方法
Section titled “常见分配方法”| 方法名 | 中文理解 | 订单数量是否需要填写 | 典型用途 |
|---|---|---|---|
EqualQuantity / Equal | 等数量或等持仓目标 | 需要 | TWS 不同界面可能显示不同名称,代码以 XML 返回值为准。 |
NetLiq | 按净清算价值分配 | 需要 | 按账户整体规模分配。 |
AvailableEquity | 按可用权益分配 | 需要 | 按账户可用资金承接能力分配。 |
PctChange | 按持仓百分比增减 | 通常不需要 | 增加、减少或清空已有持仓。 |
Percentages | 按指定百分比分配 | 需要 | 按固定权重拆分总订单。 |
Ratios / Financial Ratios | 按相对比例分配 | 需要 | 用 2:1、4:2:1 这类比例拆分。 |
Shares | 按绝对股数或合约数分配 | 由配置计算 | 每个账户的数量提前确定。 |
MonetaryAmount | 按金额分配 | 由配置和价格换算 | 每个账户按指定金额换算数量。 |
PctChange 容易被误解。它不是“把订单总量按百分比分掉”,而是对已有持仓做百分比增减;例如 -100 常用于尝试完全减少已有持仓。新手应先用模拟环境理解行为,再把它放进策略。
订单字段示例
Section titled “订单字段示例”from ibapi.order import Order
def build_fa_order(): order = Order() order.action = "BUY" order.orderType = "LMT" order.totalQuantity = 100 order.lmtPrice = 10.00
# 使用 TWS 中已经存在的账户组。真实组名来自 requestFA(1) 返回的 XML。 order.faGroup = "Group_Equal"
# 如果组内已经有默认方法,通常可以不写 faMethod。 # 只有在明确知道账户配置和 TWS 行为时才覆盖它。 order.faMethod = ""
# 大多数现代 Group 场景留空,分配参数来自 TWS 里的组配置。 order.faPercentage = "" return orderplaceOrder() 本身和普通订单一样,差异在 Order 对象里是否带了 FA 字段。组名不存在、方法不匹配、账户不是 FA 账户,都会进入 error() 回调。
非 FA 账户边界
Section titled “非 FA 账户边界”非 FA 账户请求三类 FA 配置时,TWS 连接正常,但不会返回 XML:
REQUEST_FA_SENT=1REQUEST_FA_SENT=3REQUEST_FA_SENT=2CONNECTED=TrueFA_CALLBACK_COUNT=0NON_INFO_ERROR_COUNT=3ERROR=reqId=-1;code=321;msg=FA data operations ignored for non FA customers.中文界面的 TWS 可能在错误文本前加上“确认请求时出错”,但只要错误码是 321,并且消息包含 non FA customers,含义就是账户没有 FA 权限。遇到这个结果时,应停止 FA 分配测试,改用具备 Financial Advisor 或 IBroker 权限的账户验证。
- 先在 TWS 中确认账户是 FA 账户,并创建账户组。
- 用
requestFA()读取组 XML。 - 解析 XML,展示组名、默认方法和账户数量。
- 构造带
faGroup/faMethod的订单。 - 在模拟环境提交小数量订单,检查
openOrder()、orderStatus()、error()。 - 分配结果符合预期后,再考虑真实交易环境。