理解订单状态消息
orderStatus.status 是订单生命周期状态。它告诉你订单处于哪个阶段,但不等于成交明细。
真实成交应以 execDetails() 为准,费用应以 commissionAndFeesReport() 为准。
| 状态 | 中文解释 | 常见含义 |
|---|---|---|
PendingSubmit | 正在提交 | API 已发送订单,但 TWS 或目的地还没有完成接收。 |
ApiPending | API 等待处理 | 订单还在 API/TWS 处理链路中,常见于还没拿到完整合约信息时。 |
PreSubmitted | 预提交 | 订单已被系统接受,但还没有真正进入可成交状态,模拟订单、条件订单、非交易时段订单常见。 |
Submitted | 已提交 | 订单处于工作状态,可能等待成交、部分成交或撤单。 |
PendingCancel | 等待撤单 | 已请求撤单,但还没确认撤掉。 |
ApiCancelled | API 侧取消 | API 请求取消,订单在进入交易所前被取消或由 API 侧终止。 |
Cancelled | 已取消 | 订单已经取消。用户主动撤单、风控拒绝、交易所拒绝都可能走到这里。 |
Filled | 已全部成交 | 订单全部成交。成交明细仍应看 execDetails()。 |
Inactive | 未激活或失效 | 订单不可工作,通常要结合 error()、orderState.warningText 和 TWS 日志判断原因。 |
不要只看 status
Section titled “不要只看 status”例如一个订单可能先收到:
status=Submitted;filled=0;remaining=1后来收到:
status=Filled;filled=1;remaining=0但成交价格、成交 ID、实际成交交易所等细节仍应从 execDetails() 保存。
取消订单示例
Section titled “取消订单示例”status=PreSubmitted;filled=0;remaining=1;avgFillPrice=0.0status=Submitted;filled=0;remaining=1;avgFillPrice=0.0status=Cancelled;filled=0;remaining=1;avgFillPrice=0.0这个状态流表示订单被接受、进入提交状态,然后被撤单。由于 filled=0,它不会产生真实成交记录。
业务判断建议
Section titled “业务判断建议”| 业务动作 | 推荐依据 |
|---|---|
| 页面展示订单进度 | orderStatus() |
| 判断订单是否还在工作 | status 和 remaining |
| 记录成交流水 | execDetails() |
| 计算手续费 | commissionAndFeesReport() |
| 判断是否还有未完成订单 | openOrder() 和 openOrderEnd() |
Cancelled不一定表示程序错误,也可能是用户主动撤单。Submitted不代表一定能成交,只代表订单在工作状态。Filled不代表费用已经到齐,费用可能稍后通过commissionAndFeesReport()到达。avgFillPrice=0通常说明还没有成交,不要把它当作成交价格。