Order 对象字段速查
Order 对象决定订单怎么执行。它不是普通字典,而是 ibapi.order.Order 类的实例。Python API 源码里,常用字段的默认值大致是空字符串、False 或未设置值;真正有效的字段取决于订单类型和产品。
官方参考:IBKR Campus: Placing Orders using TWS Python API
| 字段 | 示例 | 中文意思 |
|---|---|---|
orderId | 18 | API 客户端侧订单编号,通常由 nextValidId() 起算。 |
action | BUY / SELL | 买入或卖出。 |
totalQuantity | 1 | 委托数量。Python 新版 API 中部分数量字段可能是 Decimal。 |
orderType | LMT / MKT / STP | 订单类型。 |
lmtPrice | 100.00 | 限价单价格。 |
auxPrice | 95.00 | 止损触发价、止损限价辅助价等。 |
tif | DAY / GTC | 有效期。 |
transmit | True | 是否把订单传给 TWS/IBKR 处理。 |
whatIf | True / False | 是否只做订单影响预览。 |
account | DU... | 指定账户,多账户或顾问账户常用。 |
orderRef | strategy_a | 自定义订单备注,便于日志、排查和策略归因。 |
常见高级字段
Section titled “常见高级字段”| 字段 | 示例 | 中文意思 |
|---|---|---|
parentId | 1001 | 父订单 ID,括号单、止盈止损子单会用到。 |
outsideRth | False | 是否允许常规交易时段外成交。 |
triggerMethod | 0 | 止损/条件订单触发方式。 |
ocaGroup | group_1 | OCA 分组,一组订单中一个成交后影响其他订单。 |
ocaType | 1 | OCA 处理方式,例如取消剩余订单或按比例减少。 |
goodAfterTime | 20260614 09:30:00 US/Eastern | 到指定时间以后才生效。 |
goodTillDate | 20260614 16:00:00 US/Eastern | 到指定时间后失效。 |
allOrNone | False | 是否要求全部成交,否则不成交。并非所有产品/交易所都支持。 |
minQty | 100 | 最小成交数量。支持情况取决于产品和交易所。 |
hidden | False | 是否隐藏订单,支持情况取决于交易所。 |
discretionaryAmt | 0.05 | 可裁量金额,允许订单在一定价格范围内执行。 |
trailStopPrice | 95.00 | 追踪止损初始止损价。 |
trailingPercent | 1.0 | 追踪止损百分比。 |
advancedErrorOverride | IBDBUYTX | 高级拒单覆盖标签,只有明确理解拒单含义时才使用。 |
不要给所有字段都填值。TWS 会按订单类型解析字段,多余字段可能被忽略,也可能导致订单无法通过校验。
最小限价单模板
Section titled “最小限价单模板”from ibapi.order import Order
def limit_order(action: str, quantity: float, price: float) -> Order: order = Order() order.action = action order.orderType = "LMT" order.totalQuantity = quantity order.lmtPrice = price order.tif = "DAY" order.transmit = True order.orderRef = "IBKR_CN_DOCS_ORDERS_PROBE" return order订单类型与价格字段
Section titled “订单类型与价格字段”orderType | 需要的价格字段 | 说明 |
|---|---|---|
MKT | 无 | 市价成交,速度快但价格不可控。 |
LMT | lmtPrice | 限价单,适合新手测试。 |
STP | auxPrice | 到达止损触发价后变成市价单。 |
STP LMT | auxPrice + lmtPrice | 到达触发价后提交限价单。 |
TRAIL | trailStopPrice / trailingPercent | 追踪止损。 |
REL | auxPrice 或相关路由字段 | 相对订单,具体行为取决于产品和路由。 |
transmit 的含义
Section titled “transmit 的含义”transmit=True 表示把订单交给 TWS/IBKR 处理。transmit=False 表示订单只发送到 TWS,但不传递到 IBKR 服务器;这类未传递订单只存在于该 TWS 会话中,重启后可能消失,也不适合作为生产系统的持久订单状态。
括号单会故意使用这个特性:父订单和止盈单先设为 transmit=False,最后一张止损单设为 transmit=True,让 TWS 一次性传递整组订单。
WhatIf 的特殊点
Section titled “WhatIf 的特殊点”whatIf=True 表示只让 TWS 计算保证金、购买力和订单影响,不真正提交到市场。
order = limit_order("BUY", 1, 100.00)order.whatIf = Trueorder.transmit = True这里容易误解:transmit=True 在普通订单里表示提交订单;但在 whatIf=True 场景下,它是让 TWS 执行预览流程。真正避免提交的是 whatIf=True。
字段设计建议
Section titled “字段设计建议”- 用
orderRef标记策略名、用户 ID 或业务单号,方便 TWS 订单监控和日志排查。 - 多账户系统要显式设置
account,不要依赖界面默认账户。 - 下单前先确认最小价格变动单位,避免
lmtPrice不符合价格增量。 - 复杂订单先用 what-if 检查风险和保证金,再决定是否正式提交。