五年前我第一次拿到一批分钟级行情数据时,第一反应是赶紧把各种机器学习库装齐,用神经网络对着K线“看”一个晚上。结果一个月内画出了无数条异常漂亮的资金曲线,实盘一上手却立刻原形毕露。后来我把所有试错的碎片拼起来才慢慢意识到:AI量化从来不是某一个算法,而是一整条由数据、特征、模型、回测、执行和风控组成的生产链路。这篇内容我想按知识图谱的方式把它完整展开,同时把手边摸索出的暗坑一起标清楚,适合两类人:一类是零基础但对量化交易感兴趣的开发者,另一类是已经跑过几个Demo、却始终停留在“模拟盘能赚、实盘总亏”状态的朋友。如果你时间有限,只打算读一份资料,这份值得先收藏。
1. 先画地图再点技能树:AI量化到底包括什么
很多人的学习路径是反的:先学几个模型,再找几个因子,最后硬拼一个回测脚本。这个顺序错在把“模型”当成了重心,而真正的量化系统里,模型只是流水线上的一个工位。我习惯把整个系统画成一条六段流水线:数据、特征、模型、回测、执行、风控。无论你做的是股票、期货还是ETF,这套骨架基本不变。
六段流水线之间不是一次走完就结束,而是一个每天自动运转的闭环。开盘后数据不断流入,特征层刷新,模型输出最新信号,执行模块根据信号改单,风控再回头约束仓位。收盘后,回测层会根据当天完整日志重新跑一遍样本外数据,对比预测与现实之间的偏差。哪一段掉链子,整条链路都会反映在净值曲线上,只是时间早晚的问题。
1.1 六个环节各解决什么问题
先给出我自己常用的速查表,每次向新人介绍整套系统时,我就贴这一张:
| 环节 | 主要输入与输出 | 一句话核心问题 |
|---|---|---|
| 数据 | 原始行情、基本面、另类数据 → 干净可用的宽表或时序表 | 时间口径是否对齐?缺失值是否合理? |
| 特征 | 清洗后的数据 → 因子或特征集 | 只用历史信息吗?换个时间段还能稳定吗? |
| 模型 | 特征集 → 预测值或交易信号 | 信号有没有统计显著性?过拟合窗口大概多宽? |
| 回测 | 信号、成本模型、撮合规则 → 绩效报告 | 成交假设是否诚实?有没有偷偷用了未来数据? |
| 执行 | 信号 → 实际订单 | 滑点多大?真实成交和回测假设匹配吗? |
| 风控 | 绩效、持仓 → 仓位上限与止损规则 | 最大回撤能承受多少?什么时候强制减仓? |
这张表之所以值得保存,是因为它把AI量化从“玄学”拉回到“工程”。你在网上看到的所有讨论,无论是来自宏观研究员还是短线交易者,最终都逃不出这几栏。遇到一个策略方案时,优先判断它说的是哪一环,你就不容易被一套复杂的术语带偏。
1.2 闭环思维:白天跑信号,晚上做复盘
单独拎出某一环去钻研,很容易出现“局部最优、全局崩溃”。比如你花大力气训练了一个ML模型,准确率不错,但特征是盘中实时才能拿到的,而回测时却用了日终确认数据,那整条闭环就已经断裂了。闭环思维要求你每次改动都问一句:这个改动从数据源头到最终下单,会不会引入逻辑不一致?
我自己踩过一次很深的坑:当时优化了一个频次较高的信号,回测里资金曲线非常丝滑,但实盘一跑就连续打脸。排查后才发现,回测用的撮合价格是未来两秒的对手盘最优价,而真实环境里我的订单还在队列后面排队。这个问题不在模型,也不在特征,全程发生在执行环节。从那以后,我写任何策略都会先画一遍数据流,确认信号产生时间、委托提交时间、成交回报时间三者的顺序关系。
传统量化与AI量化的分界线也在这里:传统量化强调规则的明确性和逻辑可解释性,AI量化则擅长在大量复杂特征中寻找非线性的交互模式。但不管哪一派,只要还在六段流水线里打转,就绕不开闭环一致性的基本要求。
2. 数学与统计地基:绕过这些硬骨头会付出代价
很多零基础选手一听“数学”就头疼,总想着能不能直接跳过。我可以负责任地告诉你:能跳,但后面一定会回来补课,而且往往是带着亏损的学费回来补。AI量化日常研究的核心并不是推导复杂公式,而是反复做三件事:判断数据能不能用,判断结论站在统计上是否可靠,判断当前风险约束下该下多少注。
这三件事背后对应的数学并不高深,主要是概率论与数理统计、时间序列分析、凸优化入门。把目标定在“够用”而不是“数学系毕业”,学习效率会高很多。
2.1 概率、时间序列与凸优化:最小必修包
以我对实盘团队和独立研究者的观察,多数策略逻辑最后都能归约为概率判断。比如“今天出现某个特征后,未来5日上涨的概率是否明显高于历史平均”。这本质是条件概率问题,你要懂什么是条件期望、什么是样本偏差、什么是假设检验的p值。p值还有一个特别要命的变体:如果同一批数据上反复测试100个因子,即使全是随机噪声,平均也会出现5个小于0.05的“显著”因子,这就是多重检验问题。做量化的人如果不懂这个,很容易在过拟合因子堆里自嗨。
时间序列分析是第二根支柱。金融数据不是独立同分布的随机样本,今天的价格大概率影响明天;收益率往往还存在波动率聚集现象。因此自相关、平稳性、单位根这些概念绕不开。即使你不做严谨的学术检验,至少要知道“为什么别人总在谈滚动窗口”“为什么参数在某个时段稳定、换一个时段就失效”。
凸优化是组合和风控层的基础。你有若干信号,每个信号要给多少仓位?假设有资金比例限制、单标的持仓上限、总回撤约束,这就是一个在约束下最大化目标函数的优化问题。不要求手推算法,但至少要能读懂主流组合优化框架里“最大化期望收益、最小化风险”的数学表达。没有这层理解,你很难设计出像样的仓位管理规则。
2.2 别把“统计显著”当成“实盘能赚”
在入门阶段,我更担心的是另一类误区:把任何回测出来的超额收益都当成真实能力。金融数据信噪比非常低,想从历史中找到一段漂亮曲线太容易了。随机生成100个买卖信号,回测其中几个“恰好赚钱”的策略,放进样本外,表现通常会迅速衰败。
所以我对自己的默认要求是:凡是在同一样本上反复调整后选出的最优参数,都必须额外留存一段完全没有参与过的数据再来一次独立验证。这叫作“确认集心态”。哪怕样本因此变短,我也愿意。短而诚实的数据,远比长而做过手脚的数据重要。
3. 数据是第一生产力:清洗与特征工程的坑
数据质量决定策略上限。刚开始我拿到行情数据就直接跑模型,完全没在清洗上花心思,结果后续花了三倍时间排查各种诡异结果。现在我会把数据环节单独划为一条严格的生产线:先理解数据语义,再做清洗对齐,再做特征提炼。
3.1 三类数据资产:行情、基本面、另类
行情数据是最基础的资产,包括Tick级、分钟级、日线级的价格和成交量。高频策略依赖分钟级甚至更细,但普通个人做中低频的话,日线加若干关键分钟线其实已经够用。基本面数据包括财报、营收增速、估值指标等,它更新慢、噪音大,但衰减周期长,适合做中长期筛选。另类数据是目前竞争较激烈的领域,比如新闻情绪、社交讨论热度、产业链上下游数据,这些数据信息含量高,但获取和清洗成本也高。
不建议一上来就追另类数据。先把手里的行情和基本面数据整理得干干净净,等模型框架稳定后再考虑补充另类信号,顺序不该反过来。因为另类数据一旦引入,特征维度会暴涨,而可解释性会骤降,对新人非常不友好。
3.2 清洗环节最容易制造“看似正确的前视数据”
清洗的核心是让数据在时间轴上完全真实。第一是复权问题:股票经历分红送股后,不复权的价格会出现跳空,直接使用会造出虚假信号。前复权适合做历史回看,但要注意不同复权方式对近期数据的影响。第二是时区与交易时段对齐:不同市场的收盘时间不同,一条凌晨数据混进来,可能导致你用“未来信息”回测了“过去信号”。
第三是缺失值处理。很多人无脑用pandas里的fillna直接补前值,但你要先问一句:这个缺失是停牌导致的,还是数据源本身就缺?停牌期间的填充,在真实交易里你无法成交,回测中却悄悄给了你“随时可买卖”的权限,这是最隐蔽的前视偏差之一。我处理缺失值的经验是:每个缺失都要能解释来源,来源不明宁可删除样本,也不要顺手填一个数字。
3.3 特征工程的核心原则
特征工程比较像做饭,同样的食材,处理方式不同,出来的味道天差地别。但有几个原则可以保证下限:特征必须只用当前时刻已知的信息计算;特征在训练集和预测集上的口径必须完全一致;优先做简单、可解释的特征,复杂的交叉特征放到后面。
举一个基础例子,计算“当日成交量相对近20日均值的环比变化”:
import pandas as pd # 假设df是日线数据,已按时间排序,包含volume列 df['volume_ma20'] = df['volume'].rolling(20).mean() df['vol_ratio'] = df['volume'] / df['volume_ma20'] df['feature'] = df['vol_ratio'].pct_change()这里的rolling和pct_change都只依赖当前及过去的数据,不包含未来信息,是安全的。如果手滑写成shift(-1),那就会把未来一天的数值拉到今天,回测时超额收益暴涨,实盘根本拿不到。这个细节看起来不起眼,却是我反复见到的一个重大错误来源。
特征效果评价也有讲究。单独看某一个特征的IC均值有意义,但要警惕它在不同年份是否稳定。我的检查习惯是:把样本按年度或市场状态切开,分别计算特征与未来收益的相关性,如果只有某一两年奏效,就谨慎使用。毕竟我们做模型是要用在未来的,历史上只出现过一次的小概率爆发,大概率只是运气。
4. 模型选型:从线性回归到大模型,别被名字骗了
进入模型环节之前,一堆抽象名词已经满天飞:机器学习、深度学习、强化学习、大模型。很多人看到“AI量化”就以为必须用高深模型,其实成熟的做法恰恰相反:先用简单模型跑通整条链路,再根据实际需要决定是否引入复杂模型。
4.1 模型家族的实战对比
我自己常用一张对比表来描述不同模型的定位:
| 模型家族 | 典型代表 | 适用的场景 | 最容易踩的坑 |
|---|---|---|---|
| 线性模型 | 线性回归、Ridge、Lasso | 信号简洁、信噪比低、强调可解释 | 处理不了非线性交互,容易欠拟合 |
| 树模型 | XGBoost、LightGBM | 表格类特征丰富的中低频策略 | 参数多、抗噪弱,不加约束容易过拟合 |
| 序列模型 | LSTM、GRU | 订单流、分钟级状态序列 | 对输入尺度敏感,训练慢,容易把噪声当规律 |
| Transformer/大模型 | 预训练模型微调 | 新闻公告、文本情绪、跨模态特征 | 直接预测价格很玄学,解释成本高 |
如果你是一个刚入门的人,我强烈建议从线性模型和树模型开始。为什么?因为金融数据的信噪比极低,线性模型在这种场景下已经具备足够强的拟合能力,而且它的系数可以直接看出哪些特征在起作用。树模型则适合在特征较多时做非线性捕捉,落地速度快,社区资料也丰富。
LSTM这类序列模型在直观上很诱人,毕竟K线天然是时间序列。但实际项目里,普通日线级别数据的有效信息量有限,序列模型很容易把短期波动当成可学习模式,最后在样本外剧烈衰减。我并不是说序列模型不能用,而是说它适用的前提是:有足够长、足够高质量、足够低噪音的时序数据。如果没有,建议先不要碰。
4.2 大模型在量化里的正确位置
关于大模型,我的观点比较保守。大模型的强项是语义理解和复杂模式归纳,适合处理新闻公告、分析师纪要、社交媒体情绪这类非结构化数据。你可以用预训练模型把文本转成向量,再作为特征进入量化管线。但我不建议让它端到端直接预测“明天涨不涨”,因为金融数据对错误极其敏感,而大模型的输出又高度非线性,一旦出错你很难回溯到底是因为哪条逻辑。
更合理的做法是组合式架构:用简单模型或规则确定大方向,再用树模型或序列模型做局部增强,最后把风险控制放在最外层。这样即使某个模型失效,整个系统也不会瞬间崩盘。
4.3 我为什么坚持“线性基准+少量非线性补丁”
回看我自己上线过的实盘策略,赚钱最多的往往不是最复杂的,而是那些逻辑清楚、参数少、样本外衰减慢的策略。复杂模型容易给人“我在做AI”的成就感,但实盘里只有稳定和可迭代才是王道。我的默认路径是先写一个线性或规则化基准,比如简单的动量策略、均值回归策略,让它作为对照组。之后每加入一个AI组件,都要问一句:相比基准,样本外的夏普和最大回撤是否真的有改善?如果没有,这个组件就应该被砍掉。
这不是否定AI,而是给AI一个合适的舞台。特征提取、非线性风险规避、异常识别,这些都是AI能做好的事。但让模型来替你决定“明天该不该全仓”,那就是在赌运气,而不是在做工程。
5. 回测不是按个按钮:未来函数与过拟合的自我对质
回测是整个链条里最具有欺骗性的环节。一个看似完美的回测结果,往往不是因为策略优秀,而是因为某些隐藏假设太“慷慨”。我在这个环节栽过的跟头最多,后来总结成了一套自我检查方法。
5.1 四种最常见的回测陷阱
第一是前视偏差,也叫未来函数。典型的例子是:在t时刻计算信号时,却使用t+1时刻才确认的行情数据。比如我见过有人用当天的收盘价生成信号,但在回测中假设能以当天最低价买入,这种成交价格本身就可能包含了当天尚未走完的信息。更隐蔽的是把未来窗口的数据通过rolling均匀漂移回当前,比如用shift(-1)把后一天的均值当作今天的特征。只要出现这类情况,回测收益就会被系统性高估。
第二是幸存者偏差。用今天还在市场中的标的回测过去,却把已经退市或崩溃的标的剔除,结果会显得所有策略都很美好,因为最惨烈的失败样本被你悄悄删掉了。做多标的历史样本时,一定要用历史时点上确实存在的标的口径,而不是今天还活着的标的。
第三是成本模型过浅。只算了手续费,忽略滑点和冲击成本,是回测失真最常见的原因。中低频还好,频率一高,买卖价差和订单冲击的影响会立刻吃掉利润。我通常要求回测至少按单边成本计算,并且把可成交价格模拟得比盘口价格更保守一点。
第四是参数过拟合。网格搜索100组参数后挑最好的一组,这在统计上几乎必然过度乐观。对抗它的方式不是“不调参”,而是做参数敏感性分析:把最优参数上下偏移20%,看绩效是否会急剧恶化。如果稍微动一下参数就崩,说明你找到的不是规律,而是历史噪声里的巧合。
5.2 用滚动前推验证替代一次性回测
静态地拉一段历史数据回测,好比用同一张卷子反复考试,成绩当然会越考越好。更接近真实的做法是滚动前推:在起始窗口内确定参数,然后只对下一段未知数据做一次预测;随后把窗口向前滚动,重复这个流程。这样做的好处是,每一段样本外预测都是“当时真实能获得的信息”,和实盘的信息流是一致的。
我还会强制自己在多个标的上验证同一套逻辑。如果某套规律只在一个标的上成立,我会怀疑它只是偶然;如果能在三五个相关性较低的标的上都看到类似效果,信心就会足很多。相关性低这点很关键,如果全是同一个板块,本质等于只验证了一次。
5.3 上实盘前的“三问清单”
每次打算让策略上实盘,我都会做最后三道检查,这也算是给自己设一道闸门:
| 检查项 | 通过标准 |
|---|---|
| 会不会存在未来信息 | 从数据计算到信号生成的每一步都只依赖“当时已知” |
| 成本模型是否够保守 | 至少包含手续费、滑点,最好按冲击成本再加一层 |
| 参数敏感性是否可控 | 关键参数偏移20%后,策略仍不亏损,且回撤没有失控 |
这三道检查看起来简单,但真做到了,已经能过滤掉市面上大半的“假优秀策略”。我自己经常嘲讽那些“换一个参数就从翻倍变成亏损”的策略,因为那不是策略,那是阴谋。
6. 从模拟到实盘:资金曲线与风控体系的最后一公里
回测再漂亮,也只是“计划”。从计划到真正赚钱,中间还隔着执行和风控两道墙。很多人在模拟盘上盈利丰厚,实盘却亏损,就是因为这两道墙没有修好。
6.1 三类环境下过渡:纸面、小资金、阶梯放大
我习惯把部署分成三段:纸面模拟、小资金实盘、阶梯放大。纸面模拟阶段,信号生成、成本假设全部按实盘标准来,目的是与回测进行交叉验证。小资金实盘阶段,投入金额要小到自己完全无感,即使全部亏光也不影响生活,这个阶段主要验证滑点、延迟、市场冲击是否与假设一致。阶梯放大阶段,确认前两段都稳定后再逐步增加资金,增加速度取决于连续跑赢基准的稳定性,而不是单次收益的多高。
最忌讳的做法是模拟盘刚满两周就急着满仓投入。环境差异带来的隐形摩擦通常需要用几周甚至更长时间来暴露,前两周的顺风顺水说明不了任何问题。
6.2 仓位与回撤控制:宁可少赚,不可伤本金
仓位管理的核心不是预测收益,而是保证你永远有机会继续做下去。我会设置三重限制:单笔头寸在总资金中的比例上限,单日最大亏损阈值,以及策略级最大回撤阈值。当回撤触及最大阈值时,强制减仓,先停手,而不是立刻修改参数。
这个规则说到底是“把风险控制前置”。人一旦开始亏损,情绪会推动你快速找参数、找理由去“补回来”,这恰恰是加速灭亡的路径。参数修改必须在冷静、复盘充分的前提下进行,禁止在实盘亏损的当口临时起意。
6.3 策略失效时该怎么办
一次棘手的情况:策略持续失效,连续多周跑输基准。我当时的做法是暂停新增仓位,然后回到回测环境重新检查样本外表现。如果样本外依旧没有起色,我会坦白一点——这个策略的生命周期可能已经结束。
市场结构会变,交易者结构也会变,没有任何策略能永久有效。正确的心态是把策略当作“需要定期维护的资产”,失效了就降级、退役,把精力转向新的研究方向。这套判断流程会让人难受,但长期看是保护净值曲线最有效的纪律。
7. 给新手的90天上手路线图:我的三级火箭
前面讲的都是框架,最后我把它压缩成一份可以立即执行的90天行动路线。不要贪多,每天推进一点,三个月后你大概率能拥有一套自己跑起来的完整系统。
7.1 第1到30天:补数据与建立基准
这个阶段不碰复杂模型。先把主要交易所或行情供应商的日线数据导入本地,学会用pandas做基本清洗、对齐、复权处理。然后实现两个最朴素的策略:简单动量策略和均线交叉策略。重点是给两个策略都加上真实手续费和滑点假设,把绩效报告做出来。
目标不是赚钱,而是形成“数据→信号→回测→绩效”这条最小闭环。很多人在这一步就会遇到各种数据坑,正好借机把清洗基本功打牢。
7.2 第31到60天:引入特征与简单模型
在上一阶段的基础上构造一批基础特征,比如动量、均线偏离度、波动率、成交量变化率。然后把特征和标签对齐,严格注意时间顺序。用一个线性模型做滚动前推验证,再对比一个树模型,看两者样本外表现有什么差异。
这一阶段要养成记录实验日志的习惯。我建议每一步都写下:用了哪些特征、窗口多长、成本多少、样本外表现如何。否则三个月后你会完全分不清哪个实验结果对应哪份代码。
7.3 第61到90天:回测验证、模拟交易与风控定型
进入收尾阶段后,把滚动前推、参数敏感性、多标的验证三件事全部做一遍。接着设计一套简洁的风控规则:仓位上限、单日亏损阈值、最大回撤阈值。最后用模拟环境跑至少四周,对照实盘行情的成交记录,估算真实滑点。
如果模拟期间表现稳定,可以开始小资金实盘,但要记住上一章的原则:小到只影响心情,不影响生活。三个月并不是终点,而是你真正进入这个领域的起点。
走到这里,你已经不太需要别人告诉你“该学什么”了。真正重要的,是你会不会在连续亏损还坚持纪律,会不会在某个诱惑下偷偷加入未来数据,会不会在市场变化后果断承认策略过期。这些内容藏在大模型、回测框架和数学公式背后,却恰恰是AI量化真正考验人的地方。