很多人把超额收益理解成一个漂亮因子:低估值、强动量、成交量放大,或者把一套机器学习模型塞进历史行情里,训练到回测净值一路抬头。然后满仓上线,等着系统替自己赚钱。开盘铃一响,滑点先把收益削掉,冲击成本再咬一口,原本的价差被订单执行绞杀,最后剩下一条与回测完全不同的净值曲线。
你要评估的,从来不只是模型准不准,而是这套量化交易系统有没有形成真正的壁垒:数据是否足够细,因子是否真的能预测,模型是否学到了非线性关系,策略是否经得住拥挤交易,订单是否能穿过券商柜台和交易所撮合系统。任何一层漏水,账户都会在实盘里慢慢失血。
量化策略的超额收益,先从哪里长出来
量化策略的超额收益通常被称为“阿尔法”,但这个词很容易把人带进幻想。阿尔法不是模型图表上的标签,更不是某个回测区间里凭空出现的利润。它来自一组可重复的定价偏差,来自你对市场数据的处理速度,也来自你把信号变成成交结果时少付出的那几分钱、几跳滑点。
从交易逻辑上看,超额收益主要有三条来源。
第一条是价量因子。
价格变化、成交量、成交额、波动率、盘口挂单、资金流向,这些数据构成了中高频策略最常用的弹药。某个股票短时间内出现成交量异常,某个期货合约的买卖盘持续失衡,某个价格突破伴随主动成交增强,模型会把这些行为拆成变量,再判断它们与未来收益之间的关系。
但你别把“成交量放大”四个字当成买入按钮。市场里有吃货,也有出货;有主动资金推升,也有空头逼仓前的诱多。单一价量信号很容易被击穿,真正有价值的是多个变量之间的组合关系,以及信号在不同市场状态下是否仍然有解释力。
第二条是基本面和替代数据。
财务数据、产业链数据、公告文本、舆情信息、供应链变化、另类数据,都能为股票定价提供传统行情之外的观察角度。自然语言处理可以从公告和新闻中提取情绪、事件、管理层表述变化;数据挖掘可以从看似杂乱的业务数据里找出先行指标。
这部分的门槛不在于你能不能拿到一份数据,而在于数据能不能按正确的时间顺序进入模型。财报发布日期、公告发布时间、数据修订时间、实际可交易时间,任何一个时间戳处理错误,回测就会偷偷读取未来信息。你以为模型提前知道了市场,实际上只是数据清洗时把未来塞进了过去。
第三条是交易执行效率。
同样的因子、同样的预测结果,不同团队做出来的净值可以完全不同。一个系统在开盘后追着盘口扫单,另一个系统把订单拆成多个批次,根据成交量和盘口变化调整节奏;前者把自己的信号暴露给市场,后者尽量降低冲击成本。收益差异不在研究报告里,而在订单生成、订单执行和交易撮合的缝隙里一点点堆出来。
一套完整的量化交易系统,至少要经过四个环节:
1. 策略系统负责投研和信号生成,包括数据处理、因子计算、组合构建和风险约束。
2. 订单生成系统把目标仓位转成具体的买卖指令,决定买多少、卖多少、何时发单。
3. 订单执行系统负责把指令送到券商柜台,并根据成交、撤单和盘口变化继续调整。
4. 交易撮合系统最终在交易所完成撮合,决定订单是否成交、以什么价格成交。
这四层不是技术架构图上的漂亮方框,而是收益被逐层筛选的战场。策略端捕捉到的价差,先要通过仓位约束,再要穿过订单执行,最后才会落到账户里。任何一层的延迟、错误和成本,都会直接咬掉阿尔法。
回测里的阿尔法只是瞄准镜里的目标,真正扣扳机时,滑点、冲击成本和撮合延迟才是站在你面前的人。
从价量因子到机器学习:模型升级不等于收益升级
2010年至2015年,中低频多因子策略是量化交易的重要形态。估值、成长、质量、动量、波动率等因子被组合起来,通过打分、排序和风险控制构建投资组合。到了2015年下半年之后,中高频量化与机器学习进一步结合,因子挖掘和模型迭代速度明显加快。
这条演进路线很容易被误读成:传统因子已经落后,机器学习模型只要更复杂,就能直接取代旧方法。
错。
模型复杂度只是工具,不是壁垒。复杂模型能处理更多变量,也能捕捉非线性关系,但它同样能把噪声记得更牢。你给它一段市场数据,它不会自动知道哪些变化是信息,哪些只是随机波动。你不给模型边界,它就会在回测里吃掉所有偶然性,最后把过拟合包装成预测能力。
价量因子的价值,首先在于它们与交易行为直接相关。价格是结果,成交是过程,盘口是短线博弈留下的痕迹。模型可以从这些变量中发现单因子无法表达的关系,比如某种波动状态下,成交量变化与后续价格延续之间的联系;也可以判断某个信号在低流动性环境下是否会失效。
机器学习的作用,是把这些关系从人工设定的线性组合中释放出来。但释放之后必须重新上锁:限制输入变量,控制训练窗口,拆分样本外测试,检查不同市场环境下的表现,防止模型把某个年份的特殊行情当成永恒规律。
评估模型时,别先看收益率。先问三个问题:
- 模型使用的数据,在信号形成时是否已经真实可得?
- 模型输出的是未来收益预测,还是对历史价格的事后解释?
- 预测信号经过交易成本、换手和容量约束后,是否还能留下有效收益?
只要其中一个问题答不上来,净值曲线再陡也只是纸面利润。
数据源颗粒度:你拿到的数据,够不够支撑你的交易周期
数据壁垒不是数据越多越好,而是数据颗粒度必须匹配策略周期。
做日频策略,却拿分钟级数据拼装出精细进出场逻辑,属于用高分辨率数据装饰低频模型;做中高频交易,却只依赖收盘价和日成交量,属于拿钝刀去切盘口。数据源的时间粒度、字段完整性、更新速度和历史一致性,决定了模型看到的市场是不是市场本身。
开盘前,先把数据按用途拆开,不要把所有源头混成一锅。
行情数据:价格之外,成交过程更重要
开高低收、成交量、成交额是基础,但基础不代表足够。中高频策略还会关心逐笔成交、买卖盘深度、撤单行为、盘口不平衡、瞬时波动和不同交易阶段的流动性变化。
同样是成交量放大,发生在开盘集合竞价、连续竞价初段、午后低流动性时段,含义并不相同。模型如果把这些成交量简单压成一个日内总量,就会把完全不同的交易行为揉成一个数字。
数据清洗也不是把缺失值填满那么简单。复权、停牌、涨跌停、合约换月、异常成交、交易日历,都要按资产类型分别处理。股票和期货不能套用同一套清洗规则。期货合约还涉及主力合约切换、到期日、基差和不同合约流动性迁移,切换点处理不干净,回测收益会出现不属于任何真实合约的跳跃。
基本面数据:时间戳比指标名称更危险
财务指标本身并不神秘,危险的是可见性。
你在回测中使用季度营收、利润率和资产负债率,必须确认这些数据在当时是否已经披露。公告发布时间晚于报告期结束,数据修订又晚于首次披露,模型只能使用交易当时能看到的版本。否则,策略会在历史上提前知道后来才公布的结果,回测自然漂亮,实盘却直接熄火。
替代数据:新鲜感不能代替稳定性
替代数据能带来差异化,但它的更新频率、覆盖范围、授权方式和历史长度往往不如传统行情稳定。一个只在最近几年存在的数据源,能够制造新信号,也会让你无法判断信号是否跨周期有效。
真正的壁垒不在于别人没听过这个数据,而在于你能不能持续获得、清洗、对齐并验证它。数据源一旦中断,策略是否有降级方案;供应商口径发生变化,模型是否能识别;字段含义改动后,历史数据是否需要重建。这些问题不处理,替代数据就是一根绑在脚上的绳子,行情一快,先把自己绊倒。
开盘前对数据壁垒的检查,可以压缩成下面几项:
- 数据是否覆盖策略实际交易的时间周期,而不是只覆盖回测展示的区间。
- 字段是否带有可靠时间戳,能区分发生时间、披露时间和入库时间。
- 缺失值、异常值、停牌、复权和合约切换是否有明确处理规则。
- 数据源口径发生变化时,历史数据和线上数据能否保持一致。
- 信号生成前是否锁定数据快照,避免盘后修订反向污染盘中决策。
- 数据成本和更新延迟是否与策略的换手水平、资金规模匹配。
数据处理做得越粗,模型越容易把脏东西当信号。等你看到净值断崖,已经不是修复问题,而是重新审问整套研究流程。
用IC和IR拆穿因子:预测能力必须留下证据
因子不能靠故事证明自己。一个因子如果声称能够预测未来收益,就必须在历史样本中留下可重复的统计痕迹。
最常用的检视工具之一是信息系数,也就是IC。它衡量因子排序与未来收益排序之间的相关程度。IC不需要每天都为正,但它必须在合理的时间窗口、不同市场状态和不同股票分组中体现出稳定性。
另一个关键指标是信息比率,也就是IR。它通常用于观察因子有效性相对于波动的稳定程度。简单说,因子偶尔押中一次行情,不等于具备预测能力;能在多个窗口里持续贡献、波动不过度失控,才有资格进入组合。
这里最容易出现三种骗局。
第一种:只看平均值,不看分布
一个因子的平均IC不错,不代表每天都能用。你需要观察IC的时间分布、正负切换、极端值和连续失效区间。某个因子靠几天极端行情拉高平均值,其他时间都在噪声里震荡,这种因子不具备稳定交易价值。
第二种:只看全市场,不看分组
因子在大盘股、成长股、小盘股、不同波动区间中的效果可能完全不同。全市场平均结果会遮住结构差异。你必须知道收益来自哪里:是少数股票贡献,还是多个分组都能贡献;是某个行业偶然推动,还是横截面排序本身有效。
量化策略通常分散持仓,覆盖全市场后持有少则300只、多则2000只股票,依靠概率统计从大量标的中获取收益。正因为仓位分散,因子本身就不能依赖一两个明星标的撑住净值。一旦收益集中在极少数股票,组合的风险就不是分散,而是伪装成分散的集中下注。
第三种:只看毛收益,不看换手后的净收益
因子预测出未来收益,不代表你能拿到这部分收益。换手越高,手续费、买卖价差、冲击成本和滑点越会吞噬信号。尤其在流动性不足的股票和期货合约上,模型越急,市场越会把你的急躁定价进去。
一个因子进入实盘前,至少要经过这样的推演:
1. 先按信号形成时点锁定数据,计算因子值。
2. 按未来收益窗口检验因子与收益的关系,区分不同持有周期。
3. 观察IC和IR在不同时间段、行业、规模和波动状态下的变化。
4. 将换手、手续费、买卖价差和预估冲击成本加入回测。
5. 对信号进行容量测试,确认资金规模扩大后不会立刻把收益扫空。
6. 用样本外区间和滚动窗口检验因子是否持续衰减。
这不是形式主义。一个因子只有在成本之后仍有剩余,才是交易信号。否则,它只是研究员在历史数据上写出的漂亮注释。
因子预测的是收益,订单支付的却是成本。中间这段距离,正是多数纸面阿尔法被绞杀的地方。
非线性拟合:Transformer能解决什么,又解决不了什么
传统多因子模型擅长表达线性关系:因子加权、风险暴露约束、行业中性和规模中性,都能清晰解释。机器学习模型则试图从更复杂的变量交互中寻找非线性关系。
Transformer架构在处理序列和多变量关系方面具备优势,可以把价格、成交、基本面及其他结构化信息放在统一框架里,让模型寻找不同时间点、不同变量之间的依赖关系。它的价值不在于名字听起来更先进,而在于它能否找到传统模型遗漏、且能够在样本外继续存在的关系。
有一项针对2018年至2023年沪深300成分股的研究显示,基于Transformer架构的投资大模型量化策略实现了18.7%的年化收益率和1.89的信息比率;作为对照,传统多因子策略的年化收益率为12.3%,信息比率为1.21。该研究还给出了最大回撤数据:大模型策略为15.2%,传统多因子策略为22.5%。
这些数字有参考价值,但不能被直接搬进你的账户。它们属于特定样本区间、特定股票池、特定数据处理和交易假设下的回测结果,不能证明所有市场参与者在盘后结算时都能获得同样收益,更不能断言模型上线后不会衰减。
你真正要拆的,是模型是否具备抗拟合能力。
看训练集和样本外的断层
训练集表现极高,样本外突然塌陷,说明模型记住了历史。训练集与验证集之间不是越接近越好,而是要在收益、回撤、换手和信号稳定性上保持合理连续。两者差距过大,模型正在吃历史噪声。
看不同市场状态下的行为
趋势行情、震荡行情、流动性收缩、波动率急升,都会改变价量关系。模型如果只在单边上涨阶段有效,不能称为完整策略,只能称为行情适配器。你要检查模型在不同状态下的仓位变化、因子贡献和风险暴露,而不是只盯着最终净值。
看特征贡献是否符合交易逻辑
黑箱不是原罪,不可解释才是问题。模型可以使用复杂的非线性结构,但研究员必须知道主要信号由什么驱动。如果模型突然高度依赖一个覆盖不完整、更新时间不稳定的数据字段,实盘一旦断流,系统就会直接扫损。
看模型是否过度追逐微小优势
模型把预测精度抬高一点,不代表收益一定增加。若这个提升依赖极高换手和极低延迟,交易执行无法承接,预测端的胜利会在成交端败光。模型复杂度必须和执行能力匹配,否则就是发动机装在断裂的底盘上。
从信号到成交:订单拆单是看不见的第二战场
你在早上开盘前生成了目标仓位,战斗才刚刚开始。
假设策略判断某只股票需要买入一部分仓位,订单生成系统会把目标仓位转成实际指令。是一次性打进去,还是按成交量拆成多个批次;是挂在买一等待,还是主动吃掉卖盘;价格快速上行时是否追单,盘口撤单增加时是否暂停;这些动作决定了模型的预测收益能否落袋。
订单执行系统与策略系统必须分工。策略系统负责表达观点,执行系统负责控制代价。让策略模型直接根据每次盘口变化疯狂发单,等于把研究逻辑和交易冲动绑在一起。信号一抖,订单就狂扫;价格一跳,系统就追价;撤单一多,模型又反向打脸。最终账户不是被市场打败,而是被自己的订单流暴露。
为什么要拆单
拆单的核心不是把大单切碎,而是降低市场冲击和信息暴露。大额订单一次性冲进盘口,会改变供需关系,抬高自己的成交价格,甚至吸引其他交易者反向利用你的需求。拆成多个批次后,系统可以根据成交量、盘口深度和价格变化调整节奏。
但拆单不是万能药。市场流动性不足时,切得越碎,等待时间越长,信号衰减越严重;行情快速移动时,过度追求低冲击成本又会错过价格。执行系统要在冲击成本和机会成本之间做明确取舍,不能把所有问题都归咎于滑点。
开盘阶段最容易出什么问题
开盘时流动性和价格波动集中释放,订单执行系统面对的不是静态盘口。挂单深度变化快,撤单频繁,买卖价差也会迅速变化。你不能拿收盘价附近的成交假设去模拟开盘交易,更不能把一个固定滑点参数塞进所有时段。
开盘前,要把以下动作写进系统规则:
- 目标仓位与可交易数量是否匹配,避免模型要求买入的数量超过实际流动性承载。
- 涨跌停、停牌、熔断或交易限制出现时,订单是否自动降级。
- 订单部分成交后,剩余数量如何处理,是否会在价格失控时继续追单。
- 撤单次数、改单频率和单笔订单规模是否触发柜台或交易规则限制。
- 执行失败后,策略端是否重新计算目标仓位,而不是机械重复发送原订单。
- 盘中成交回报是否能及时回传,避免系统以为未成交而重复吃货。
量化系统最危险的错误,往往不是预测错,而是状态错。系统以为订单没发出去,实际上已经成交;系统以为仓位为空,实际上持仓正在增加;系统以为撤单成功,实际上订单仍在排队。状态管理一旦失真,模型再聪明也只会把错误放大。
明日开盘前,怎样评估自己的数据与算法壁垒
开盘前的评估不是写一份宏大的研究报告,而是把明天最可能击穿系统的地方先找出来。
先查数据有没有断层
检查最新行情、财务数据、公告数据和替代数据是否更新完成,字段数量和时间戳是否正常。不要只看任务显示“运行成功”,还要核对数据行数、最新时间、缺失比例和异常值分布。
如果数据延迟,策略必须明确进入降级模式:减少交易、延后交易,或者停止使用受影响信号。最愚蠢的操作,是数据已经过期,系统却继续按正常置信度下单。
再查因子是否正在失效
把最近窗口的因子表现与历史分布对比,观察IC、IR、换手、分组收益和行业暴露。因子连续失效时,不要用扩大仓位去证明自己没错。你需要判断是市场状态变化、数据口径变化、交易拥挤,还是因子本身已经被吃干净。
因子失效不是耻辱,拒绝承认失效才是。市场不会因为你在研究报告里写了长期有效,就继续给你发钱。
再查模型输出有没有异常集中
看预测分数、目标仓位和行业分布是否出现突变。模型突然把仓位集中到少数行业或少数股票,通常意味着输入分布发生变化,或者某个特征被异常放大。分散持仓的价值在于分散单一标的风险,但如果模型在一夜之间把大量股票打成同一个方向,组合就会变成隐形集中交易。
最后查订单执行是否跟得上
把预计成交量、历史换手、盘口深度、订单拆分节奏和资金规模放在一起看。策略容量不是一个静态数字,行情越拥挤,容量越容易缩水。信号本身有收益,不代表市场能容纳你的资金。
下面这张表可以帮助你在开盘前快速定位问题:
| 检查层级 | 主要观察对象 | 失真信号 | 处理方向 |
|---|---|---|---|
| 数据层 | 时间戳、缺失值、字段口径、更新延迟 | 最新数据未到、字段分布突变、未来信息混入 | 锁定可见数据,启用降级或停止交易 |
| 因子层 | IC、IR、分组收益、换手 | 因子连续失效,收益集中在少数样本 | 降低权重,重新分组,检查拥挤度 |
| 模型层 | 预测分布、特征贡献、样本外表现 | 输出突然集中,训练集与样本外断层 | 限制仓位,核对特征漂移和过拟合 |
| 组合层 | 行业暴露、单票权重、总杠杆 | 分散组合变成同向下注 | 加强约束,压缩风险暴露 |
| 执行层 | 盘口深度、拆单节奏、成交回报 | 滑点扩大、撤单堆积、状态不同步 | 调整订单策略,暂停失控订单 |
| 撮合层 | 委托状态、成交确认、交易限制 | 系统状态与实际持仓不一致 | 以真实成交回报校正仓位 |
回测优秀之后,策略为什么还会衰减
策略衰减不是一个抽象词。它通常有清晰的来源。
第一,市场参与者发现了你的信号。因子一旦被大量资金使用,原本的价格偏差会被提前交易,收益空间被压缩。以前需要等到某个时间点才发生的价格调整,可能在更早阶段就被扫掉。
第二,交易拥挤改变了执行成本。多个策略同时买入相同股票,信号方向虽然一致,但成交价格会被自己人抬高。回测按理想成交价计算,实盘却在更差的位置成交。收益不是突然消失,而是被冲击成本和滑点逐步吃掉。
第三,数据分布发生变化。市场制度、参与者结构、流动性、交易规则、行业权重都会改变。模型训练时学到的关系,放到新的分布里就会失去原有解释力。特别是机器学习模型,输入变量看起来仍然存在,变量之间的关系却已经换了。
第四,研究流程在上线后变形。回测使用完整数据,实盘却遇到延迟;回测组合可以瞬间调仓,实盘订单需要排队;回测忽略停牌和涨跌停,实盘仓位无法按计划退出。模型没有变,交易环境变了,结果同样会变。
识别策略衰减,要看收益之外的东西:
- 因子IC和IR是否持续下滑。
- 预测分数与实际收益的对应关系是否松动。
- 换手是否上升,但净收益没有同步改善。
- 滑点和冲击成本是否超过历史假设。
- 收益是否从多个来源收缩到少数标的或少数行业。
- 订单成交率、撤单率和成交时间是否发生结构性变化。
- 样本外表现是否与滚动回测出现明显断层。
不要等到净值跌穿心理价位才承认策略坏了。净值是最后一道报警器,等它响起来,数据、因子和执行层往往已经沉默了很久。
机器学习策略的壁垒,不是模型名称,而是闭环能力
很多团队把壁垒写成模型名称:深度学习、Transformer、强化学习、智能投顾。名称没有任何保护作用。别人能下载同样的论文、调用同样的框架、复现类似的网络结构,真正拉开差距的是完整闭环。
这个闭环包括:
- 能不能拿到稳定、细粒度、可持续的数据。
- 能不能把数据按交易时点正确清洗和对齐。
- 能不能从噪声里筛出具有解释力的因子。
- 能不能用样本外检验和滚动测试压住过拟合。
- 能不能把预测结果转成符合容量约束的组合。
- 能不能通过订单拆单降低冲击成本和滑点。
- 能不能实时监控数据漂移、因子失效和成交异常。
- 能不能在系统失控时迅速停止,而不是让机器继续爆仓。
这才是数据与算法壁垒。
模型本身只是发动机。数据是燃料,因子是导航,组合约束是底盘,订单执行是变速箱,风险系统是刹车。只升级发动机、不修刹车,速度越快,撞墙越重。
站在战壕里看量化交易,你会发现最难的从来不是预测下一根线。最难的是接受预测错误,然后让错误在可控范围内结束。系统要允许信号失效,允许订单失败,允许数据中断,允许模型暂停。真正成熟的策略不会把自己包装成永远正确,而是把每一次错误的损失限制在账户能承受的范围内。
结语:开盘前没有神谕,只有一套能被击打的系统
明日开盘前,你不需要寻找一个保证赚钱的模型。市场没有这种东西,回测也没有这种承诺。
你需要确认的是:数据是否真实可见,因子是否仍有预测痕迹,模型是否在样本外保持纪律,组合是否暴露在拥挤方向,订单执行是否能够承接信号,成交回报是否会准确修正仓位。把这几层逐一拆开,阿尔法来自哪里、又会在哪里流血,答案自然会露出来。
18.7%的年化收益率、1.89的信息比率,属于特定研究样本中的结果;12.3%的年化收益率和1.21的信息比率,也只是对照条件下的表现。数字可以帮助你建立尺度,但不能替你承担明天的滑点,更不能替你挡住策略失效后的回撤。
开盘铃响以后,市场不会阅读你的模型说明书。它只会按照成交价格结算。
如果你的数据、算法和执行系统经不起这一击,所谓壁垒只是回测里的幻觉;如果它们能在信号衰减、订单拥堵和行情反向时仍然保持纪律,超额收益才真正有资格进入账户。
Related reading: 量化策略的终极博弈:为什么高质量数据比复杂算法更决定成败 and 量化策略回测指标的虚与实:如何看穿超高收益率背后的陷阱.
