
🔗 接上篇: 我们聊了骨架(事件驱动、看门狗、主备切换)。今天把镜头拉近,聚焦一条指令本身。
🤔 核心问题: 策略说"买",程序就真的买了吗?
🛤️ 真实路径: 一个订单从"意图"到"成交",要走过七站路,经过两道风控闸门。
💡 主编视角: 策略是面子(看得见),订单管理是里子(看不见)。里子不牢,面子必倒。

🚥 第一站:信号生成 —— 从"想法"到"意图"
🧠 起点:策略引擎。
📈触发:行情满足N个条件(价格站上均线+成交量配合)。
💬产出:一句话——"买入,某品种,某价,某量"。
⚠️注意:这还不是订单,只是一个意图(Signal)。策略只管判断,不管执行。
📤动作:把意图打包丢给风控模块,然后回头继续看盘。
💡主编解读: 这一步像大脑说"我想喝水",但手还没动。
🛡️ 第二站:风控检查(一) —— 安检员拦下"出格"的想法
🚧 角色:风控模块(安检员)。
🔍查什么:
▪️ 仓位重不重?
▪️ 单笔止损会不会亏太多?
▪️ 今天撤单超没超?
▪️ 这个品种今天是不是下太多了?
📏标准:预设的数值红线(比如单笔亏损≤1%总资金)。
✅通过:放行。
❌不通过:直接丢弃信号,不打招呼,后面环节不知道有过这回事。
💡主编解读:这是第一道闸门,把明显作死的指令按死在摇篮里。它的价值是保命。
📦 第三站:订单构建 —— 把"想法"包装成"快递盒"
🏗️ 地点:执行网关。
📝任务:把粗糙的"意图"变成格式完整、外面能看懂的订单。
➕补齐信息:
▪️ 订单类型(限价/市价)。
▪️ 有效期(当日有效/直到撤销)。
▪️ 唯一编号(Order ID)。
▪️ 账户标签。
🎁结果:一个规规整整的订单正式"出生",状态变为:待发送。
💡主编解读:策略说"寄封信",执行网关负责写信封、贴邮票、写地址。没有信封,邮局不收。
🛡️ 第四站:风控检查(二) —— 最后看一眼"快递盒"
🔍 查什么:跟第一道不一样,这次查执行层面。
▪️ 订单编号重复了吗?
▪️ 价格离市价偏离太离谱吗?
▪️ 数量超过单笔上限了吗?
🤔为什么查两次:因为第一次查的时候,信息还不完整(没编号、没类型)。现在全齐了,再查一遍更保险。
✅通过:进入发送队列。
❌不通过:丢弃订单,记日志。
💡主编解读:这是第二道闸门,防的是第一道漏网的鱼。双层安检,虽然烦,但安全。
📡 第五站:发送与等待回报 —— 悬在半空的"薛定谔的订单"
📤 发送
执行网关把订单通过网线发到券商/交易所。
状态更新:待发送 → 待回报。
⏳ 等待(最煎熬的时刻)
时间不确定:几十毫秒到几秒。
可能永远不回来(网络丢包、券商故障)。
⏱️ 超时机制: 设一个上限(比如3次重试)。
▪️ 重试成功 → 万事大吉。
▪️ 重试失败 → 标为失败,记告警日志。
💡 主编解读: 订单像寄出的快递,悬在半空,不知道是丢了、卡住了,还是正在派送。
📨 第六站:回报处理 —— 快递签收了,更新状态
📬 回报回来:执行网关接住,拆开看结果。
📝更新状态:
▪️全部成交→ 状态:已成交。
▪️部分成交→ 状态:部分成交(剩余继续挂)。
▪️被拒绝→ 状态:已拒绝(记原因)。
🔙回传策略:必须把新状态告诉策略引擎。
⚠️如果不回传:策略可能以为单子没成,又发一个同样的信号 →下重了。
💡主编解读: 这一步像快递员敲门说"签收了",你得把家里的库存记录改了。忘了改,就乱了。
📊 第七站:风控更新 —— 悄悄挪动的基准线
📈 动作:风控模块根据成交结果,更新累积统计值。
🔢更新什么:
▪️ 今天成交了多少笔?
▪️ 总成交量多少?
▪️ 当天浮动盈亏多少?
▪️ 最大回撤基准线挪到哪了?
📏意义:下一次风控检查,用的就是这些新数字。
💡主编解读:每一笔成交,不只是账户钱变了,风控的尺子也在悄悄挪。尺子不准,量什么都错。
📌 一个订单的"一生"总结
从模糊的意图出发,
被安检员拦两次,
包装成规整的快递盒,
顺着网线寄出去,
悬在半空等回音,
签收后更新状态,
最后让风控的尺子挪一格。
底下的东西(订单管理)做得不扎实,
面上的东西(策略)迟早要塌。
下一篇,我们聊怎么用状态机来管理这些复杂的状态变化。

⚠️ 风险提示: 本文纯属软件工程层面的技术科普,介绍订单生命周期管理的基本流程与设计思路。文中不涉及任何具体交易策略、投资建议或代码实现。技术架构设计需结合实际业务场景,请审慎评估。
📌 标签: #程序化交易 #订单管理 #订单生命周期 #软件架构
💬 互动话题: 你写策略的时候,有没有遇到过"明明发了单但状态对不上"的灵异事件?后来发现是哪个环节漏了吗?评论区聊聊你的踩坑经历! 👇
夜雨聆风