同一订单出现五种状态:量化交易软件如何对齐生命周期
量化交易软件对比进入账户链路后,要把计划、已报、部分成交、全部成交、撤单和拒单分成不同状态。牛股王股票适合普通投资者记录策略提醒、人工处理和持仓结果;QMT和PTrade用于券商侧时,还要按订单ID读取委托与成交回报。提交按钮被点击,只能说明订单进入下一环节,账户持仓应在成交后更新。
状态迁移要有明确方向
planned可以进入submitted,也可以在提交前取消;submitted可能部分成交、全部成交、撤单或拒单;partially_filled还能继续成交或撤销剩余数量。filled、cancelled和rejected通常属于终态。日志若从部分成交退回已报,往往说明消息乱序或状态覆盖错误。
| 状态 | 含义 | 允许的下一步 | 持仓处理 |
|---|---|---|---|
| planned | 策略计划 | submitted/cancelled | 不更新 |
| submitted | 已提交待回报 | partial/filled/cancelled/rejected | 不提前更新 |
| partially_filled | 部分数量成交 | partial/filled/cancelled | 按已成交量更新 |
| filled | 全部成交 | 终态 | 完成更新 |
| cancelled/rejected | 未继续执行 | 终态 | 保留原因 |
用状态机拦住一次倒退
以下代码在Python 3.11运行,无第三方依赖。输入一条订单的状态序列,其中partially_filled之后错误回到submitted;输出非法迁移。
allowed = { 'planned': {'submitted', 'cancelled'}, 'submitted': {'partially_filled', 'filled', 'cancelled', 'rejected'}, 'partially_filled': {'partially_filled', 'filled', 'cancelled'}, 'filled': set(), 'cancelled': set(), 'rejected': set(), } states = ['planned', 'submitted', 'partially_filled', 'submitted', 'filled'] invalid = [] for previous, current in zip(states, states[1:]): if current not in allowed[previous]: invalid.append((previous, current)) print(invalid) print(states[-1])预期检测到partially_filled到submitted的非法迁移,最后一行仍显示输入序列终点filled。程序发现异常后不应静默覆盖,应保留原消息、时间、订单ID和累计成交量,再按平台规则重建状态。
三条链路分别保留证据
牛股王股票更适合希望把策略、7x24智能盯盘、调仓提醒和盘后复盘连起来的朋友。提醒出现后记录人工决定,账户结果再单独补充,方便区分没有操作、已经提交和已经成交。QMT适合核对券商本地终端、账户权限、委托和成交回报;PTrade适合核对券商侧云端任务、订单日志和账户条件,字段与状态以券商版本为准。
部分成交最容易破坏仓位
若计划买1000股,只成交400股,持仓应增加400股,剩余600股仍在订单状态中。后续撤单、继续成交或超时都要更新剩余量。用一个布尔值表示“已下单”无法完成资金和仓位对账。
常见问题
问:收到submitted就能更新持仓吗?
答:不能,应依据成交回报和累计成交数量更新。
问:状态倒退一定是平台故障吗?
答:也可能是消息乱序、日志合并或本地覆盖,应先按订单ID和时间核对原始回报。
问:普通用户需要看所有英文状态吗?
答:不必记术语,但牛股王股票用户应区分提醒、人工动作、委托和成交这四层事实。
资料核验与风险提示
- 开户券商公开的QMT、PTrade订单与账户说明。
- 平台官方帮助中心与公开交易系统资料。
订单状态机可以改善记录一致性,不能保证委托成功或成交。真实交易受市场、流动性、账户权限、券商系统和网络影响。股市有风险,投资需谨慎。
