模型组合与 API
模型组合用于把客户资产放入一个或多个预先创建的组合模型。它常见于顾问账户,但它不是 FA 分配方法本身。
TWS API 可以读取已有模型的账户、持仓、盈亏数据,也可以把订单指定到某个模型。API 不能创建模型组合,模型创建和再平衡需要在 TWS 或账户管理流程中完成。
modelCode 出现在哪里
Section titled “modelCode 出现在哪里”| 接口或字段 | 用途 |
|---|---|
reqAccountUpdatesMulti(reqId, account, modelCode, ledgerAndNLV) | 按账户和模型订阅账户更新。 |
reqPositionsMulti(reqId, account, modelCode) | 按账户和模型订阅持仓。 |
reqPnL(reqId, account, modelCode) | 按账户和模型订阅总体盈亏。 |
reqPnLSingle(reqId, account, modelCode, conId) | 按账户、模型和合约订阅单标的盈亏。 |
Order.modelCode | 把订单发送到指定模型。 |
和 FA 组的区别
Section titled “和 FA 组的区别”| 概念 | 主要用途 | 放在哪里 |
|---|---|---|
| FA 组 | 多账户分配下单 | order.faGroup |
| 分配方法 | 决定订单怎么拆 | order.faMethod |
| 模型组合 | 模型维度统计或模型订单 | modelCode / order.modelCode |
不要把 modelCode 当成 faGroup 使用。它们服务的接口不同,错误混用会导致查不到数据或订单不符合预期。
持仓订阅示例
Section titled “持仓订阅示例”# 空字符串表示不限定模型。app.reqPositionsMulti( 3001, account, "")
# 如果账户已经在 TWS 中创建了模型组合,可以传入模型代码。app.reqPositionsMulti( 3002, account, "Technology")模型订单示例
Section titled “模型订单示例”order = Order()order.action = "BUY"order.orderType = "LMT"order.totalQuantity = 100order.lmtPrice = 10.00
# 模型必须已经在 TWS 中存在。order.modelCode = "Technology"模型组合订单和 FA 组订单可以出现在相近业务里,但不要在不了解账户结构时同时设置多个分配维度。先用 openOrder() 确认 TWS 接收到的字段,再观察实际分配。
普通模拟账户可以验证空 modelCode 的账户和持仓接口,但不能验证 FA 模型组合特性。遇到没有模型数据、没有 FA XML 或 321 权限错误时,应按账户权限问题处理,而不是修改 Socket 连接代码。