Ⅰ · 概念地基 — 1.1
MT5 藏起来的运行回路
写 EA 时看得见的只有一个函数。理解自研平台,要先看清这个函数坐在什么东西中间。
一个 EA 的全部生命,在开发者视角里是这样的:报价来了,OnTick() 被调用,读指标、算条件、下单。终端负责其余一切,而“其余一切”从不需要命名,因为它不可替换、不可测试、也不出错——至少看起来如此。
把它画出来,被隐藏的部分就显形了:
为什么“有名字”是有价值的
把一个环节命名成独立组件,换来三件在 MT5 里做不到的事:
- **可替换。**行情来源从经纪商换成专业数据商,只换一个组件,策略代码不动。MT5 里行情就是经纪商给的那份,没有第二个选项。
- **可单独测试。**信号计算脱离终端就能跑——喂进一段历史,看输出。不需要编译 EA、不需要启动策略测试器、不需要撮合。
- **可放置横切逻辑。**风控要管住“所有策略的所有订单”,前提是存在一个所有订单都会经过的地方。MT5 中不存在这样一个点,所以风控只能写在每个 EA 内部。
代价同样真实。八个组件意味着八份配置、八个可能出故障的地方、八处需要监控。MT5 把它们焊死,换来的是零集成成本——这是一个真实的工程取舍,不是落后。
这条回路在两个框架里的样子
后面 Ⅱ 部分会分别展开,这里先给出对应关系,作为阅读时的坐标:
| 回路环节 | Nautilus | LEAN |
|---|---|---|
| 连接与报价接收 | DataClient(adapter) |
Data Feed / Brokerage |
| 数据分发 | DataEngine + 消息总线 |
Slice 装配 |
| 策略执行 | Strategy |
QCAlgorithm / Alpha 模型 |
| 风控 | RiskEngine(订单闸门) |
RiskManagementModel(意图改写) |
| 下单与状态跟踪 | ExecutionEngine + ExecutionClient |
ExecutionModel / Brokerage |
| 持仓与账本 | Portfolio + Cache |
Portfolio / Securities |
| 渲染 | 两者都没有 —— 自研平台的前端是从零开始的部分 |