Ⅴ · 数据与交付 — 5.2

LEAN 离线运行评估

在 Ubuntu workstation 上以本地数据和无网络容器跑通回测链路;这验证了离线运行,不等同于已部署的常驻交易服务。

已验证的范围:离线回测可运行 ✓ 已实测
workstation:/home/placid/src/lean-eval/,以 docker run --network none 和本地 launcher 配置运行 EURUSD 示例,得到 bars15=961 trades=36 equity=990317.62。这证明引擎和该样本数据可以在无网络条件下完成一次回测;它不代表已有常驻的私有化交易服务,也不覆盖真实券商连接与故障恢复。

离线运行所需的输入

命令 是否需要 QuantConnect 账号
lean init —— 要 user id + API token
lean backtest
直接 docker run 引擎

离线评估目录已保留本地 Data/、launcher 配置、算法代码与输出文件。它的用途是复现实验,不是替代 CLI 的账号、许可或版本管理流程。

**授权条款需单独确认。**LEAN engine 源码是 Apache 2.0,商业使用与再分发无碍。但 QuantConnect 文档主张 “To use the CLI, you must be a member in an organization on a paid tier”——而实测 lean backtest 在未登录状态正常运行。技术上能跑不等于授权上允许,把引擎打包进交付物之前应与 QuantConnect 确认。
另注:Nautilus 是 LGPL-3.0,商业分发的约束与 Apache 2.0 不同。

体积

实测
引擎镜像 quantconnect/lean:latest 13.1 GB(解压后,35 层)
基线 Data/ 目录 227 MB
自有数据(10 个交易日 EURUSD 分钟) 544 KB
转换脚本 / 算法 45 行 / 48 行

LEAN 的数据格式

日内:   data/forex/<market>/<resolution>/<symbol>/YYYYMMDD_quote.zip   每日一个 zip
         内含 YYYYMMDD_<symbol>_<res>_quote.csv
小时/日:data/forex/<market>/<resolution>/<symbol>.zip                 每品种一个 zip

CSV 列(11 列):当日毫秒偏移, bidO,bidH,bidL,bidC,bidVol, askO,askH,askL,askC,askVol
  • 买卖双边均为必填——与 Nautilus 撮合需要双边市场是同一个结构性要求
  • 外汇价格为原始小数;股票另有缩放约定,按资产类别不同
  • 日内时间是当日毫秒偏移而非时间戳,须先按日切分

四个隐性约定才是真成本

约定 实测
分辨率是固定枚举 TICK / SECOND / MINUTE / HOUR / DAILY,无任意周期。15 分钟须在运行时用 consolidator 合成——实测 14,400 根分钟 bar 合成 961 根 15 分钟 bar
dataTimeZone 随 market 变 Forex-oanda-[*]UTCForex-fxcm-[*]UTC-05。同一份字节放进不同目录,含义不同
外汇周日开市 市场时段自周日 17:03 America/New_York 起。数据用 UTC、时段用交易所时区,转换须同时对齐两个时区;按周一至周五生成会撞出 LEAN 预期的缺口
自动加载 SPY 作 benchmark 日志实证:AddPendingInternalDataFeeds(): Adding internal benchmark data feed SPY,#0,SPY,Hour,…,Internal纯外汇部署也需备齐美股小时数据,或显式改写 benchmark

一个正面发现:缺数据文件不会中断回测,引擎会写出 failed-data-requests-*.txtsucceeded-data-requests-*.txt,逐条列出请求过的路径——现成的数据完整性核查工具,对交付运维有直接价值。

MT5 接入:最大盲区

MT5 不是可直连的券商 API,而是一个本地终端进程。两套框架均不含 MT5 连接器(全代码树检索零命中 )。接入需自建桥接:

路径 A — MetaTrader5 Python 包 路径 B — 自建 EA + Socket
平台 仅 Windowswin_amd64,无 macOS / Linux wheel) 终端仍需 Windows,桥的另一端不限
数据模型 轮询,无订阅与回调接口 文档 推送,契合事件驱动
延迟 受轮询间隔约束 接近终端 tick 到达
开发量 Python 侧适配器 Python 侧 + MQL5 侧需自行编写维护

**桥接不消除依赖,只是移动它。**两条路径下自研平台的行情与执行仍吊在一个运行中的 MT5 终端进程上——终端断线、崩溃、卡死会穿透到整个系统,架构解耦在此处回退。这一项同时影响部署、执行、可视化三个环节。