订单
订单接口是 Web API 里风险最高的一组接口。即使使用模拟账户,也应该先做合约确认、账户确认、订单预检查,再提交订单。
本页示例默认用于模拟账户。正式账户使用前,必须把风控、权限、日志、重复提交保护和人工确认补齐。
官方参考:Client Portal API
| 接口 | 方法 | 用途 |
|---|---|---|
/iserver/account/{accountId}/orders/whatif | POST | 订单预检查,不真正提交。 |
/iserver/account/{accountId}/orders | POST | 提交订单。 |
/iserver/reply/{replyId} | POST | 回复风险提示或确认问题。 |
/iserver/account/{accountId}/order/{orderId} | POST | 修改订单。 |
/iserver/account/{accountId}/order/{orderId} | DELETE | 撤销订单。 |
最小订单结构
Section titled “最小订单结构”{ "orders": [ { "conid": 265598, "side": "BUY", "orderType": "LMT", "price": 1.00, "quantity": 1, "tif": "DAY" } ]}字段解释:
| 字段 | 中文说明 |
|---|---|
conid | 合约编号。不能只填 symbol。 |
side | 买卖方向,常见为 BUY 或 SELL。 |
orderType | 订单类型,例如 MKT、LMT、STP。 |
price | 限价单价格。市价单通常不填。 |
quantity | 数量。股票通常是股数,期权/期货是合约数。 |
tif | 有效期,例如 DAY、GTC。 |
常用可选字段
Section titled “常用可选字段”不同产品、账户和地区可能支持不同字段。下面这些字段不一定每笔订单都要填,但写交易系统时应理解它们的含义:
| 字段 | 中文说明 |
|---|---|
acctId | 账户编号。路径中已有 {accountId} 时,仍可在订单体里明确账户,避免多账户系统混淆。 |
cOID | 客户端自定义订单 ID,可用于幂等、日志关联和防止重复提交。 |
conidex | 组合、价差或部分复杂产品可能使用的合约表达方式。普通股票示例通常用 conid。 |
listingExchange | 上市交易所或主要交易所,用于减少同名合约歧义。 |
outsideRTH | 是否允许常规交易时段外成交。开启前要确认产品支持和风险。 |
auxPrice | 辅助价格,常见于止损单、追踪止损等订单类型。 |
trailingAmt | 追踪止损的追踪金额。 |
trailingType | 追踪方式,例如金额或百分比,取值以官方返回和账户支持为准。 |
referrer | 请求来源或自定义标记,可用于审计和区分系统模块。 |
useAdaptive | 是否使用 Adaptive 相关路由能力,需确认账户、产品和路由支持。 |
isCcyConv | 是否为货币转换类订单。不要把普通股票订单误标成货币转换。 |
import requests
BASE_URL = "https://localhost:5000/v1/api"ACCOUNT_ID = "DU1234567" # 换成自己的模拟账户
payload = { "orders": [ { "conid": 265598, "side": "BUY", "orderType": "LMT", "price": 1.00, "quantity": 1, "tif": "DAY", } ]}
response = requests.post( f"{BASE_URL}/iserver/account/{ACCOUNT_ID}/orders/whatif", json=payload, verify=False, # 仅限开发调试;正式环境请配置受信任证书 timeout=15,)response.raise_for_status()print(response.json())whatif 用于预估保证金、手续费和订单可接受性。它不能代替真正的风控,但很适合教学和调试。
提交订单与回复确认
Section titled “提交订单与回复确认”提交订单后,IBKR 可能不会立刻接受订单,而是返回需要确认的提示,例如价格偏离、合约风险、交易权限或订单属性警告。
典型流程:
POST /iserver/account/{accountId}/orders -> 如果返回 replyIdPOST /iserver/reply/{replyId} -> 发送确认程序不要自动无脑确认所有 replyId。比较稳妥的做法是:
- 把提示内容展示给用户。
- 只允许用户在模拟账户或明确授权策略下确认。
- 记录每一次确认的请求和返回。
模拟账户注意事项
Section titled “模拟账户注意事项”模拟账户可以大胆用于测试流程,但仍然要避免把坏习惯带到正式账户:
| 风险 | 建议 |
|---|---|
| 重复点击导致重复下单 | 每个请求生成本地幂等编号,前端按钮提交后立即锁定。 |
| 合约选错 | 下单前展示 symbol、交易所、币种、合约类型和 conid。 |
| 市价单价格不可控 | 新手示例优先使用远离成交价的小数量限价单。 |
| 自动确认风险提示 | 先记录和展示,不要默认全部确认。 |