平台

把微软 qlib 的真实源码当教材,从 .bin 存储一直读到回测与在线服务,逐层拆解一个工业级 AI 量化平台是怎么设计的;同时提炼一套读任何大型框架都能用的方法论。
本篇对应课程:qlib 源码解剖 + AI 量化平台对比(共 26 讲)。系列总纲见 量化工程能力知识图谱与学习路线。 顶层总路径见 量化投资学习路径图

参考源码(本课无教材,教材即框架源码本身)

为什么要学这块

到了这一层,问题不再是”用哪个算法””怎么调参”,而是”一个能长期维护、能被别人扩展的量化平台,代码结构该长什么样”。qlib 是目前开源里结构最完整的一个:数据存储、因子表达式、特征工程、模型库、工作流、策略回测、在线服务全都有,且被工业界实际使用。读懂它,等于把前几门课学到的因子、回测、模型全部串成一条能跑通的流水线,也让你有能力照着搭自己的研究平台,而不是每次都从零拼脚本。

这一篇的角度:读框架五步法 + 逐层深剖

市面上关于 qlib 的内容大多是”使用教程”——怎么写 YAML、怎么跑 qrun、怎么换模型。这套课不一样:它把源码本身当教材,逐层解剖每个模块的核心类、调用链和设计取舍,并且把最核心的思想用 100 行以内的可跑代码复刻出来(迷你表达式引擎、窗口延展、反射工厂、TopkDropout 核心逻辑)。

更重要的是,第 01 讲提炼的读框架五步法不止用于 qlib,读任何大型开源项目都通用:

  1. 找入口——从命令行 / 主函数出发,别一头扎进某个文件;
  2. 追一条数据的去向——挑一条真实数据(一根 K 线、一个因子值),跟着它从磁盘走到最终报告;
  3. 读继承树——看核心基类和它的子类,抽象方法就是这个框架给你留的”填空题”;
  4. 认设计模式——组合、模板方法、反射工厂、门面这些一旦认出来,一大片代码就能一眼看懂;
  5. 划边界——分清哪些是框架定的契约(core),哪些是可替换的实现(contrib)。

这五步是本篇最值得单独拎出来的部分,把它练熟,之后读 pandas、PyTorch、任何大型代码库都省一大半力气。

你会学到什么(按七层架构对应讲次)

qlib 源码可以理解成七层,从地基到应用逐层往上:

导论与地图(第 01–03 讲)

  • 七层架构总览 + 读框架五步法 + 两大设计基因(配置驱动+反射、表达式 DSL)—— 第 01 讲
  • 模块全景与协作:四大门面(D/R/Operators/init)、单向依赖铁律、core 契约 vs contrib 实现 —— 第 02 讲
  • 跑通 qrun:从一份 YAML 到一张绩效报告的完整调用链 —— 第 03 讲

数据层(第 04–07 讲,qlib 最有特色的一层)

  • .bin 扁平二进制存储、calendar/instruments 对齐、为何不用数据库、PIT 点数据防前视 —— 第 04 讲
  • 表达式引擎(上):Expression/Feature/Ops 类体系、运算符重载、正则解析 + eval 建树 —— 第 05 讲
  • 表达式引擎(下):递归惰性求值、窗口延展防前视、未来标签与前视的边界 —— 第 06 讲
  • 缓存系统:内存 H + DiskExpressionCache + DiskDatasetCache 三级缓存、缓存键归一化、文件锁并发 —— 第 07 讲

数据集与特征 Handler(第 08–10 讲)

  • DataHandlerLP:learn/infer 双管道防泄露(DK_R/I/L 三份数据)、Processor 管道 —— 第 08 讲
  • Alpha158 解剖:158 个因子怎么用表达式批量拼串生成、标签构造与前视分析 —— 第 09 讲
  • DatasetH / TSDatasetH:数据集切分、TSDataSampler 零拷贝滑窗 —— 第 10 讲

模型库(第 11–13 讲)

  • Model 基类契约 + init_instance_by_config 反射工厂 —— 第 11 讲
  • LGBModel 解剖:怎么把 LightGBM 包成契约类、fit/predict/早停 —— 第 12 讲
  • 深度模型统一封装(LSTM/GRU/TCN/Transformer)+ DDG-DA 元学习抗漂移 —— 第 13 讲

工作流与实验管理(第 14–15 讲)

  • qrun 全链路:init_instance_by_config 如何递归实例化整条 pipeline、RecordTemp 三兄弟 —— 第 14 讲
  • Recorder / MLflow:R 门面四层结构、R.start()、artifact、结果可复现 —— 第 15 讲

策略与回测(第 16–19 讲)

  • 回测框架总览:Exchange/Order/Account/Position 对象分工,与 backtrader 对比 —— 第 16 讲
  • TopkDropoutStrategy 解剖:signal → 排序 → topk → dropout 换手控制 → Order 列表 —— 第 17 讲
  • 嵌套决策执行(nested):日频套高频,qlib 独有设计 —— 第 18 讲
  • 绩效分析 risk_analysis:年化、IR、回撤逐行拆解 —— 第 19 讲

强化学习与在线(第 20–21 讲)

  • qlib.rl:把订单执行建成 RL(Simulator/Interpreter/Reward 四零件解耦),与 FinRL 对比 —— 第 20 讲
  • OnlineManager:滚动训练、模型自动更新 —— 第 21 讲

横向对比其它平台(第 22–26 讲)

  • FinRL 架构解剖:env-agent-market 三层、RL-first vs qlib 的 pipeline-first —— 第 22–23 讲
  • RD-Agent 解剖:LLM 自动做因子研发、因子如何回写 qlib 闭环 —— 第 24–25 讲
  • 三平台架构对比 + 给 qlib 加自定义组件 + 搭自己的研究平台的检查清单 —— 第 26 讲

几个亮点(真实结论 / 硬数据)

  • 读框架五步法(第 01 讲):找入口 / 追一条数据 / 读继承树 / 认模式 / 划边界,把上万行源码变成一张可导航、可循迹的地图。这套方法跨框架通用,是本篇最能破圈的部分。
  • 表达式 DSL 用 eval 建树(第 05 讲)$close/Ref($close,1)-1 这样的字符串,qlib 用正则改写 + Python eval 直接建成 Expression 对象树,再靠运算符重载和惰性递归求值。课上用 100 行代码复刻了一个迷你版,把”字符串到算子树”的机制跑通。
  • 缓存实测 2.7 万倍加速(第 07 讲):同一个因子第二次取,命中三级缓存后相比重新计算约有 2.7 万倍的加速;缓存键归一化和文件锁并发是这套机制能可靠复用的关键。
  • 配置驱动 + 反射(第 11 / 14 讲)init_instance_by_configimportlib + getattr 把一段 YAML 变成真实对象;qrun 的”递归实例化”其实是 DatasetH.__init__ 里再次调用它形成的——课上把这条递归链逐层追清楚,并手搓了一个迷你反射工厂。
  • 回测撮合与源码分毫对上(第 16 讲):把 Exchange 的成交价、费用、涨跌停逻辑逐行读透后,手算的撮合费用与 qlib 真跑结果完全一致;并与 backtrader 的事件循环做了正面对比。

建议的阅读顺序

先看地图,再从数据层往上逐层读,最后看横向对比。

  1. 第 01 讲:为什么解剖 qlib,架构总览与读源码方法论——先拿到七层地图和五步法。
  2. 第 03 讲:跑通第一个 qrun,从 YAML 到绩效报告——先把整条流水线跑起来、看清全景。
  3. 第 05 讲:表达式引擎(上),类体系与解析建树 与 第 06 讲:递归求值与窗口延展防前视——qlib 最有特色的一层,值得慢读。
  4. 第 07 讲:缓存系统——理解那 2.7 万倍加速从哪来。
  5. 第 11 讲:Model 基类与反射工厂 与 第 14 讲:qrun 全链路递归实例化——把”配置驱动”这条基因彻底吃透。
  6. 第 16 讲:回测框架总览,对比 backtrader 与 第 17 讲:TopkDropoutStrategy 解剖——从信号一路读到订单。
  7. 有余力再看 第 24 讲:RD-Agent 解剖(上) 与 第 26 讲:三平台对比与搭自己的研究平台——跳出 qlib 看不同架构哲学。

承上启下

上一层 【工程·研究篇】机器学习算法与量化应用 用 ML4T 搭起因子、回测、组合的金融脚手架,其中深剖 backtrader 是读源码最深的一次;本篇把这份能力正式兑现——从读一个组件的源码,升级到读懂并能扩展一整个平台。往后走,下一层 【工程·工程篇】用 MLflow 把量化研究工程化 把研究做成可追踪、可复现、可上线的流水线;【工程·进阶篇】 再看 RD-Agent 怎么用 LLM 把因子研发闭环自动化。完整地图见 量化工程能力知识图谱与学习路线


本篇课程