Ⅱ · 框架解剖 — 2.2
NautilusTrader · 行情与订单如何闭环
沿着一笔报价和一张订单走一遍,组件表才会变成可以在脑中运行的系统。
两条路径共用同一份状态
上半部分是数据路径:适配器把外部报文解析成框架数据类型,通过通道交给 DataEngine;数据写入 Cache 并按主题发布,订阅该主题的策略再收到回调。盘口增量、bar 和自定义数据也遵循同一类“接收、处理、保存、发布”的关系,只是处理器和主题不同。
下半部分是订单路径:策略提交订单命令,RiskEngine 进行预交易检查,ExecutionEngine 将命令交给对应 ExecutionClient。场所确认、拒绝、成交或撤单事件沿回程进入执行引擎,再更新 Cache、Portfolio 与策略回调。
本地拒绝与场所拒绝
订单事件需要区分来源。OrderDenied 表示订单在本地预交易检查中被拦截,未送往场所;OrderRejected 表示订单已经到达场所后被其拒绝。二者都会成为策略可处理的订单事件,但它们描述的是不同位置发生的事实。
| 事件类别 | 例子 | 主要影响 |
|---|---|---|
| 本地订单状态 | Initialized、Denied |
订单对象与本地检查结果 |
| 场所订单状态 | Submitted、Accepted、Rejected、Canceled、Expired |
场所对订单的处理结果 |
| 成交状态 | Filled、部分成交、Triggered |
订单剩余量、持仓与组合计算 |
| 本地模拟状态 | Emulated、Released |
由本地模拟订单逻辑维护的状态 |
策略可以实现具名的订单与持仓回调来消费这些事件 官方文档。对策略而言,订单发送不是函数调用后的终点,而是后续状态事件的起点。
生命周期也是可观察状态
策略、actor 与执行算法等组件有明确生命周期。常见稳定状态包括 PRE_INITIALIZED、READY、RUNNING、STOPPED、DEGRADED、FAULTED 与 DISPOSED;启动、停止、恢复等过程则处于相应的过渡状态。
这些状态不替代订单状态。生命周期描述“一个组件能否履行职责”,订单状态描述“某张订单处于哪里”。两条状态线分别服务于运行监控和交易审计。