跳转到内容

理解订单状态消息

orderStatus.status 是订单生命周期状态。它告诉你订单处于哪个阶段,但不等于成交明细。

真实成交应以 execDetails() 为准,费用应以 commissionAndFeesReport() 为准。

状态中文解释常见含义
PendingSubmit正在提交API 已发送订单,但 TWS 或目的地还没有完成接收。
ApiPendingAPI 等待处理订单还在 API/TWS 处理链路中,常见于还没拿到完整合约信息时。
PreSubmitted预提交订单已被系统接受,但还没有真正进入可成交状态,模拟订单、条件订单、非交易时段订单常见。
Submitted已提交订单处于工作状态,可能等待成交、部分成交或撤单。
PendingCancel等待撤单已请求撤单,但还没确认撤掉。
ApiCancelledAPI 侧取消API 请求取消,订单在进入交易所前被取消或由 API 侧终止。
Cancelled已取消订单已经取消。用户主动撤单、风控拒绝、交易所拒绝都可能走到这里。
Filled已全部成交订单全部成交。成交明细仍应看 execDetails()
Inactive未激活或失效订单不可工作,通常要结合 error()orderState.warningText 和 TWS 日志判断原因。

例如一个订单可能先收到:

status=Submitted;filled=0;remaining=1

后来收到:

status=Filled;filled=1;remaining=0

但成交价格、成交 ID、实际成交交易所等细节仍应从 execDetails() 保存。

status=PreSubmitted;filled=0;remaining=1;avgFillPrice=0.0
status=Submitted;filled=0;remaining=1;avgFillPrice=0.0
status=Cancelled;filled=0;remaining=1;avgFillPrice=0.0

这个状态流表示订单被接受、进入提交状态,然后被撤单。由于 filled=0,它不会产生真实成交记录。

业务动作推荐依据
页面展示订单进度orderStatus()
判断订单是否还在工作statusremaining
记录成交流水execDetails()
计算手续费commissionAndFeesReport()
判断是否还有未完成订单openOrder()openOrderEnd()
  • Cancelled 不一定表示程序错误,也可能是用户主动撤单。
  • Submitted 不代表一定能成交,只代表订单在工作状态。
  • Filled 不代表费用已经到齐,费用可能稍后通过 commissionAndFeesReport() 到达。
  • avgFillPrice=0 通常说明还没有成交,不要把它当作成交价格。