← 返回教程库

同样叫「量化框架」,为什么这一个和交易机器人长得完全不一样

最后更新 2026-08-19
📚 量化与 AI 投研 📖 仓库导览 · qlib ⏱ 约 18 分钟 R2 · 注意风险
你将学到
  • 能说清一条 AI 投研流水线由哪几段构成,每一段各自要解决什么问题、做砸了会在哪里露馅
  • 能分辨「产出判断的系统」和「执行判断的系统」的根本差异,不再把两类开源项目混为一谈
  • 知道一个内建了中国市场设定的投研平台,对 A 股读者的价值在哪、又不该期待它替你解决什么

你可能在同一个星期里,先后听人提起过两个开源项目。一个是自动交易机器人,装上就能连交易所下单;另一个被人称作「微软那个量化平台」,看起来更学术,一堆模型名字,还带论文。

于是你心里冒出一个特别自然的问题:这俩不都是量化吗,为什么长得完全不像同一类东西?

更实际的困惑还在后面。你去翻第二个项目的说明,第一屏是一张模块框图,写着「基础设施层」「学习框架层」「工作流层」「接口层」;再往下是一长串模型清单,一堆缩写。你想找的那句「所以它到底帮我干什么」,找不到。

这篇就干一件事:把这条投研流水线从头到尾摊开,告诉你它分成哪几段、每一段各自在防什么错,以及最关键的那个区分——为什么「产出判断的系统」和「执行判断的系统」,必须当成两种东西来看。至于安装、配置、跑通,本文一概不讲;那是文档的活,而且文档里写得更准。

先把边界交代清楚,免得你读到一半在找:数据层怎么长成那样、时点数据怎么防偷看、表达式因子怎么批量造、分数怎么变成持仓、模型过期了怎么重训——这五件事各有专篇,本篇只做总览。

先不谈金融,谈招人

假设你在一家公司管招聘,每年要从几千份简历里挑出几十个人。你会怎么做这件事?

第一步,你得有一个能查的档案库。 简历、笔试成绩、面试记录、入职后的绩效。重点是这个库必须能回答一个刁钻的问题:「去年三月,我们当时手上关于这个人的信息是什么?」 不是他今天的样子,是当时的样子。因为你要检验的是「当年那个判断准不准」,用的必须是当年能拿到的材料。这一条听起来像废话,做起来是整件事里最难的部分。

第二步,你得把简历上的东西变成可比较的指标。 学校、专业、工作年限、跳槽频率、项目规模——原始简历是一段段文字,你得先把它们提炼成一行行能横向排队的数字。提炼的方式有无数种,你可以自己拍脑袋定,也可以先造一大堆再挑。

第三步,你得有一套打分规则,把这些指标压成一个总分。 可以是你凭经验加权,也可以是让机器从历史数据里学:过去哪些指标组合的人,后来绩效确实好。

第四步,光有分不够,你得变成一份录用名单。 分数是连续的,名额是有限的。前多少名?分数接近的怎么办?已经在职的老员工要不要因为新人分高就换掉?换人是有成本的——交接、磨合、赔偿金。这一步跟打分完全是两码事。

第五步,过一段时间回头复盘。 当初选的这批人,干得怎么样?你的打分规则是真的有效,还是只是碰巧?更麻烦的是——规则会过期。三年前有效的筛选标准,行业变了之后可能完全失灵。

这五步,就是一条投研流水线的全部骨架。把「简历」换成「行情与财报」,把「录用名单」换成「持仓组合」,一个字都不用改。

五段流水线,每一段各自防的是什么错

现在换成投资的语言,逐段说一遍。重点不是每段「做什么」,而是每段做砸了会在哪里露馅——这才是你需要记住的东西。

第一段,数据。 它要回答的是「某个历史时刻,你当时真的能看到什么」。财报有发布日期,业绩预告会修正,指数成分股会调整,公司会改名会重组。如果你的数据库里存的永远是「最新的、修正过的、回填过的」那一版,你的历史检验就是拿今天的答案去做昨天的卷子。这一段做砸的后果不是「结果差一点」,是结果好得离谱且完全不可复现。这段的做法拆在它的数据层为什么长这样Point-In-Time:从数据层堵死「偷看未来」里。

第二段,因子与特征。 把原始行情和财务数字,加工成一列列能横向比较的数值。这一段的危险恰恰在于它太顺手——一旦造因子变成填几行表达式的事,你一天能造出几千个,然后从里面挑出「最有效」的几个。挑的过程本身就在制造幻觉。这段单独讲在用表达式批量造因子,以及它带来的危险

第三段,模型。 把一堆特征喂进去,吐出一列预测分数。这里最容易被误解的是分数不是预测涨跌幅,它更接近「相对排序的把握」——谁比谁更可能靠前。这一段的坑在于切分:训练用哪段历史、验证用哪段、真正的检验留哪段,切错顺序就等于让模型提前看了答案。

第四段,从分数到持仓。 一列分数不是一个组合。你要决定拿前多少名、多久换一次、换的时候动多少、单只不能超过多大比例、行业不能过度集中。这一段是大多数人跳过的一段,也是把纸面收益吃掉的那一段——换手越勤,交易成本咬得越深。做法见模型吐出一列分数,它是怎么变成持仓的,背后的通用机制在从分数到持仓

第五段,评估与迭代。 组合跑出来一条曲线,然后呢?你要知道超出基准多少、波动多大、最难受的时候回撤到哪、这些超额是不是集中在少数几个月。更重要的是——预测分数本身的质量怎么衡量。这一段常用的度量在IC 与 IR基准与超额里有系统的推导。

五段说完,你会注意到一件事:这条链路上没有任何一段叫「下单」。 它的终点是一份「应该持有什么」的答案,以及一份「这个答案历史上靠不靠谱」的评估报告。至于这份答案怎么变成真的委托单发出去——那是另一个系统的活。

到了系统里,它长什么样

现在再看那张吓人的框图。项目自己在文档里把架构分成四层,我逐层翻译一下。

最底下叫基础设施层。 干的是「把数据存好、取快」和「管住训练过程」。这一层的存在意义是:投研这件事的时间不该花在等数据加载上。它自己在文档里明说,这一层是为高性能取数服务的。

往上是学习框架层。 它把「模型怎么被训练出来」抽象成可替换的一块,好让监督学习和强化学习这两种完全不同的范式,都能挂在同一条流水线上。这里顺便破一个常见的误会:强化学习挂上来之后,它在公开框架里最成熟的位置并不是「学会选股」,而是靠后的那一段,强化学习在交易里到底放在哪一层 把这个位置为什么是它讲清楚了。

再往上是工作流层。 这一层就是上面那五段:抽取信息、产出预测信号、把信号变成交易决策、把决策丢进一个模拟的市场环境里执行。文档里特别提了一个设计——策略和执行器可以嵌套:外面一层负责按天调整组合,里面一层负责把当天要换的那些单子拆开慢慢成交。这个结构本身传达了一个很值钱的观念:「买什么」和「怎么买进去」是两个不同粒度的决策,硬塞进同一层就会互相污染。

最上面是接口层。 出报告、出图、把结果给人看。

四层之外,还有两个设计细节,我认为比整张框图更值得你记住。

第一,整条流水线是用一份配置描述出来的。 数据取哪段、用什么特征集、训练和检验各自占哪几年、用哪个模型、组合怎么构建、回测按什么成本口径——全部写在一份文件里,然后一条命令从头跑到尾。这个设计的真正价值不是「省事」,而是它把一次研究变成了一个可以原样重跑的对象。你三个月后回头问「我当初那个结果是怎么来的」,答案是完整的、白纸黑字的,不是你脑子里模糊的记忆。

第二,实验记录是一等公民。 它内建了一套实验管理:每一次跑都被登记成一条记录,参数、产出的预测、评估结果、生成的中间文件都挂在这条记录下面,还接了机器学习圈常用的那套实验追踪工具,能直接开个界面横向比较。

这一条对你的启发,跟你用不用这个平台没关系。做研究的人最容易输在记账上:试了二十组设定,只记住了最好的那一组,忘了自己试过二十次。等你回头写结论时,你会真心觉得「我当初就是这么想的」。一个强制登记每一次尝试的系统,堵的正是这个记忆的漏洞——它让「我到底试了多少次才试出这个结果」变成一个可以被查证的事实。这件事和它为什么把重训做成系统的一部分是同一条线索,接着看模型会过期:它把「重训」也做成了系统的一部分

还有一个特别小、特别能说明品味的细节:它的文档里明确写了,平台里所有累计收益类的指标都是用加法累加,而不是逐期连乘。理由写得很直白——避免指标和图形随着时间推移被指数级地拉歪。

这句话值得多想一会儿。连乘是符合真实复利的,但连乘会让曲线后段的一次波动在图上显得比前段大得多,肉眼比较不同时间段的表现时会被严重误导。选择加法,是牺牲了「和真实账户对得上」,换来「不同时期之间可比」。这是一个明确的取舍,不是一个疏忽。 一个平台愿意把这种取舍写进文档,说明它清楚自己的指标是给谁看的:给研究者做横向比较用的,不是给你拿去算账户能变成多少钱的。

为什么这两类系统必须分开看

回到开头那个问题。为什么一个交易机器人和一个投研平台,长得完全不一样?

因为它们的产出物不是同一种东西

交易框架的产出物是动作:什么时候发单、发多大、成没成交、超时要不要撤。它的成败标准是「有没有按规则执行到位」。它的错误是即时的、可见的、可以马上纠正的——单子没发出去,你现在就知道。这类系统的完整拆解在这个开源交易框架,到底替你做了什么、又坚决不做什么里。

投研平台的产出物是判断:这一批标的里,哪些更可能靠前。它的成败标准是「这个判断在没见过的时间段里还成不成立」。它的错误是延迟的、隐蔽的、常常要好几个月才显形——而且最要命的是,判断的错误在系统内部完全不报错。数据泄漏了,程序不会崩,它只会给你一条特别漂亮的曲线。

这个差异带来三个具体后果。

第一,它们的「测试」根本不是一回事。 交易框架可以用模拟资金空跑,跑几天就知道行不行。投研平台没有这种便宜可占——你唯一的检验手段是把历史切开,用前半段学、后半段考,而这个考试你能考的次数是有限的。考多了,你就是在拿「后半段」调参,那段历史也就不再是干净的考题了。

第二,它们对「快」的定义相反。 交易框架追求的是低延迟:从信号到委托越快越好。投研平台追求的是高吞吐:一次把几百个标的、十几年的数据、几十种设定全部算完。前者优化的是单次响应,后者优化的是批量处理。这就是为什么它的底层要专门做一套取数设施——投研的瓶颈从来不是网络往返,是数据装载。

第三,中间那道缝,是最容易出事的地方。 一份「应该持有什么」的名单,和一串真的能发出去的委托,中间隔着一堆东西:现在的价格能不能买到、够不够一手、这只今天停不停牌、涨停了还买不买、卖出去的钱什么时候能用。回测里这些几乎都被简化成了假设,而真金白银那边,每一条都是硬的。把投研平台的回测曲线当成「我能拿到的收益」,就是把这道缝当成不存在。

所以正确的读法是:把投研平台当成产生候选判断的车间,把交易框架当成把判断落地的车间,中间那道交接,需要你自己额外补一层验证。任何一边跑通了,都不等于整条链路通了。

它面向中国市场,这对你意味着什么

这一点值得单独说,因为它是这个平台对本站读者最实在的价值。

它在设计上把「市场区域」做成了一个内建的概念。切换到中国市场设定时,几件事会跟着一起变:最小交易单位(A 股是按手买,不能买零点几股)、是否存在涨跌幅限制回测按哪个价格口径成交。这三样不是被当成用户随手填的参数,而是被当成市场的属性内建进去的。

意义在哪?在于绝大多数开源量化项目是照着连续交易、可细分份额、没有涨跌停的市场长出来的,你要用它做 A 股,得自己一条一条把制度差异补回去,而且补漏的地方你自己往往不知道。一个从一开始就把这几条当成默认设定的平台,至少不会让你在最基础的地方踩空。

它自带的数据抓取脚本和示例配置也大量围绕中国市场展开,基准用的是常见的宽基指数。对你来说,这意味着你读它的示例时,看到的场景和你熟悉的市场是同一个,不需要在脑子里做一次「换市场」的翻译。

但请把这句话记牢:内建了中国市场的设定,不等于它的回测结果能直接当真。 涨跌停在数据上是一个价格上限,在真实盘口里是「有价无量、你排不上队」;停牌在数据上是一段空白,在真实持仓里是「这段时间你动不了」。制度被写进配置,和制度被真实模拟,是两回事。这条缝有多深,模型吐出一列分数,它是怎么变成持仓的里会具体谈。

它不做什么

按老规矩,把留白说清楚。

它不给你 alpha。 平台里带了大量模型实现和公开的特征集,那是基线,是用来让你比较「我的新想法有没有比现成的强」的参照物,不是拿来直接用的赚钱工具。一个所有人都能下载、都能跑的公开设定,它有效的那部分正在被使用它的人一起消耗掉。

它不判断你的研究做得对不对。 你把未来的信息混进特征里,它照样跑完,照样出一份漂亮的报告。整条流水线里没有一处在问「你这个做法合不合理」。防这类错,靠的是你自己的规矩和它提供的那些约束设施,不是靠它替你把关。

它不是交易通道。 它不连券商、不发真单、不管你的账户。它的终点是一份判断和一份评估。

它不承诺任何收益。 这句不是套话:一条流水线跑通、评估报告好看,和你的账户变多,中间隔着上面说的那道缝,以及你能不能在难受的月份坚持执行。自动化产生的判断如果被直接接到真实下单上,风险是实打实的——请务必先想清楚最坏情况你能不能承受。

最后一句必须说在前面:本文所有描述来自对某个时间点源码与文档快照的阅读,不是我实际跑通了这个平台得出的结论。项目一直在演进,你手上那份的行为,以你自己读到的文档为准。

小结

  • 一条投研流水线分五段:数据(当时能看到什么)、因子(变成可比的数值)、模型(吐出一列分数)、组合(分数变成持仓)、评估(这个判断靠不靠谱)——每段防的错不一样。
  • 这条链路的终点是一份判断,不是一串委托单。交易框架的终点才是委托单。
  • 两类系统的根本差异:一个错了马上报错,一个错了只会给你一条更漂亮的曲线。
  • 把整条流水线写成一份配置、把每次尝试登记成一条记录,堵的是研究者「只记得最好那一次」的记忆漏洞。
  • 它把市场制度当成内建属性而非随手参数,这对 A 股读者是真实的便利;但制度被写进配置,不等于制度被真实模拟。

一句话说完这篇:这东西不是替你下单的机器人,是一间从原始资料一路做到「该买谁」的判断车间;它能把你研究的过程管得规规矩矩,至于研究出来的结论对不对、能不能换成钱,它一点忙也帮不上。

本文基于开源仓库的源码与文档快照做概念讲解,未实际运行该程序,也不构成任何投资建议或软件使用建议;相关边界见免责声明。想系统看这一卷的其他内容,回到量化与 AI 投研卷

内容有错、看不懂、或想看下一篇?告诉我们 →

本文为投资教育整理,不构成任何投资建议;不荐个股/基金、不预测点位、不承诺收益。关键数据与结论请结合权威来源自行验证,并见风险免责声明