跳转到内容

FA 下单

FA 下单仍然使用 placeOrder(orderId, contract, order)。区别在于 Order 对象会携带分配字段,让 TWS 知道这笔订单要进入哪个账户组。具体怎么拆分,通常来自 TWS 中这个组的默认分配方法。

from ibapi.contract import Contract
from ibapi.order import Order
def aapl_contract():
contract = Contract()
contract.symbol = "AAPL"
contract.secType = "STK"
contract.exchange = "SMART"
contract.currency = "USD"
contract.primaryExchange = "NASDAQ"
return contract
def fa_limit_order():
order = Order()
order.action = "BUY"
order.orderType = "LMT"
order.totalQuantity = 100
order.lmtPrice = 10.00
# 账户组必须已经存在于 TWS 的 FA 配置中。
# 真实组名应来自 requestFA(1) 返回的 XML。
order.faGroup = "Group_Equal"
# 新项目优先使用组默认方法;只有明确需要覆盖时才填写。
order.faMethod = ""
# 大多数 Group 场景留空。不要把百分比参数当成通用分配配置。
order.faPercentage = ""
return order

提交方式:

app.placeOrder(next_order_id, aapl_contract(), fa_limit_order())
字段中文含义常见错误
account指定主账户或目标账户FA 场景不要随意填子账户,需按账户结构确认。
faGroup账户组名称组名拼错会被 TWS 拒绝。
faMethod分配方法覆盖项与组配置不匹配时可能导致拒单或非预期分配;不确定时留空。
faPercentage百分比相关参数只适合明确需要该字段的旧式或特殊分配方式;顺序必须和账户配置一致。
modelCode模型组合代码用于模型组合订单,不等同于 faGroup
检查项为什么重要
requestFA() 能返回 XML说明账户具备 FA 数据权限。
XML 中存在目标组避免提交不存在的 faGroup
组内账户数量正确避免分配到缺失或错误账户。
合约详情能返回先确认交易标的本身有效。
订单价格和数量合理避免触发价格、保证金或最小单位错误。
模拟账户先验证观察 openOrder() 和 TWS 分配结果。
回调用途
openOrder()查看 TWS 接收的订单字段。
orderStatus()查看订单是否提交、成交、取消或拒绝。
error()查看权限、组名、方法、价格和风控错误。
execDetails()查看成交明细。

如果订单进入 TWS 后分配不符合预期,应先停止策略,重新读取 FA XML 并核对组、方法、账户顺序和 TWS 设置。

普通模拟账户可以连接 TWS,但如果 requestFA() 返回 321 non FA customers,就不能验证真实 FA 分配下单,只能验证普通合约、普通订单字段和连接流程。FA 下单需要切换到具备 FA 权限的模拟或真实账户。

如果只是验证 TWS Socket、合约详情、普通 placeOrder()openOrder()orderStatus(),可以继续使用普通模拟账户;如果要验证 faGroupfaMethodfaPercentage 的真实分配结果,就必须使用 FA 账户。