1. 核心定位与设计哲学
Axile 是一个针对量化投研到实盘落地阶段的多渠道算法交易执行服务与运行守护系统。它不承担高频撮合或复杂事件驱动回测引擎的职责,而是专注于解决量化投资组合在真实柜台落地时的确定性执行、权重与手数换算、开平守卫、持仓估值对账以及风控审计。
单回环安全模型(Local Loopback Only)
Axile 是仅限本机单用户使用的服务,不提供多租户应用级 API 鉴权。服务端及前端严格绑定回环地址(127.0.0.1);外部访问必须依托专用审查隔离网关,从根源消除暴露至公网带来的资金安全隐患。
确定性与只读证据链
任何外部执行动作(报单、撤单、清仓)必须具备前置状态机确认;执行记录具有不可逆证据属性,拒绝破坏性覆盖迁移,历史快照与估值异常采用读时归一(Normalize on Read)与只读试算回填。
2. 端到端执行拓扑(Execution Pipeline)
Axile 的核心执行管线贯穿了从组合目标权重到柜台委托执行的全链路:
3. 单一契约与读时归一(Execution Contract)
status 与 error 的单一法定契约,并在序列化边界进行现算归一。
| 契约状态 (Status) | 错误分类 (Error Category) | 风控行为与执行守卫 |
|---|---|---|
SUCCESS |
None |
目标持仓完全达成,对账无偏差。 |
PARTIAL |
SLIPPAGE / TIMEOUT |
部分手数成交,剩余撤单或等待二次触发。 |
BLOCKED |
OUT_OF_SESSION / QUOTA |
时段阻断但依然换算目标手数,记录偏离原因但不触发违规报单。 |
FAILED |
POSITION_UNKNOWN / REJECT |
持仓状态未决时坚决不视为 0,禁止盲目开平,进入告警。 |
4. 多渠道适配层机制(Channel Adapters)
Axile 屏蔽了各主流柜台在代码规则、时段划分、委托推送等维度的异构性,统一抽象为 ChannelAdapter 契约:
- OpenCTP / CTP 渠道:支持国内全品类期货衍生品。针对国内特有的平今/平昨规则(如上期所与能源中心必须显式指定平今仓
THOST_FTDC_OF_CloseToday),执行引擎内置上期所与其它交易所的自动开平分流。 - 天勤 TqSdk 渠道:支持实盘、快期模拟与本地模拟。代码层统一使用 CTP 风格代码(如
rb2610),适配器边界自动转为SHFE.rb2610。 - 掘金 GM 渠道:支持股票与跨市场品种,具备完备的动态盘口订阅。
- 迅投 QMT 渠道:支持原生 XtQuant 客户端对接。
5. 持仓估值与市值容错(Valuation & Fallback)
估值系统采用两套独立的解耦逻辑:
- 下单前行情新鲜度校验(Execution Market Data):严苛要求当前盘口双边买卖价存在且未超时,否则拒绝执行开平仓。
- 持仓盯市估值链(Position Valuation Fallback):
- 交易中时段:所有活跃持仓合约共享最多 3 秒的 Tick 行情等待;
- 休市/茶歇时段:直接接受最后有效价(LastPrice),跳过无意义订阅;
- 推送缺失兜底:通过 CTP 交易 API
ReqQryDepthMarketData发起单合约深度查询,保留历史参考价值; - Alembic 0014 数据回填:历史快照按初始执行报价与合约乘数只读试算,确保净值曲线连续性。
6. 时间钟与交易日历(Clock & Schedule)
在 PR #62 与 PR #67 中,Axile 对时间基准进行了全局重构:
统一 Clock 依赖注入
将分散在各处的 time.time() 与 asyncio.sleep() 抽象为 Clock 接口(RealClock 与 SimClock),使生产监控可依赖高精度单调时钟,仿真测试可任意跨越虚拟时间。
交易日历横轴投影
ScheduleClock 内置国内交易日历事实,前端图表在观测序列模式下等距压缩休市区间,在自然时间轴模式下标注休市阴影,完美处理周末与长假跳空。
7. 策略工作台与 LSP 隔离(Python Editor & ty)
为支持用户在线编写自定义调仓与清仓算法,PR #65 引入了现代化 Python Web IDE 架构:
- 基于 CodeMirror 与 ty 的 LSP 通信:通过
@codemirror/lsp-client直连后台运行的ty server语言服务; - 独立工作区进程沙箱:每个编辑器连接拥有独立临时目录,空闲时自动回收进程,防止内存溢出;
- 源码只读只写隔离:只读挂载 Axile 与标准库源码以支持定义跳转与文档 Hover,编辑修改仅限于用户草稿缓冲区。
8. 测试架构与隔离分层(Testing Architecture)
随着用例突破 2,000+,PR #63 实现了测试体系的系统性整顿:
| 测试分层 | 目录 | 测试对象与隔离要求 |
|---|---|---|
| Unit | tests/unit/ |
纯函数、算力逻辑、数据解析,无 I/O,毫秒级完成。 |
| Contract | tests/contract/ |
公共 API 导出边界、契约字段序列化与读时归一验证。 |
| Integration | tests/integration/ |
SQLite 并发竞争、子进程管理、IPC 通信,统一标记 @pytest.mark.slow。 |
9. 核心设计取舍与演化总结
从最近 7 天的演化可以清晰看出 Axile 的核心演化脉络:
- 宁可阻断,绝不乱下单:持仓未知立即阻断、盘口失效立即阻断、时段不符立即阻断;
- 对历史数据保持敬畏:弃用粗暴的 ALTER TABLE 和批量覆写,改用读时归一与只读试算回填;
- 将时间视为一等公民:日历交易钟与 Clock 抽象使回测、仿真与实盘在时间度量上完全统一。