很多交易者看到因子净值回撤,第一反应是换参数、改窗口、加一个机器学习模型。这个动作看起来积极,实际上经常是在给已经堵死的水管继续加压。因子衰退的核心矛盾,不是公式写错,而是市场环境变了:跟踪同一类信号的资金更多了,执行订单的方式更隐蔽了,原本可以被日频数据识别的交易行为,已经被算法拆成了数百笔、数千笔小单。
你如果还拿几年前的“大单资金流”、收盘价动量、单一价值因子去解释今天的成交结构,等于带着旧地图进了新战场。地图上的路还在,脚下的地形已经被推平重做。
因子动物园不是宝库,先问清楚超额收益从哪里来
学术研究和量化社区里,已经出现了超过300种因子。规模、价值、动量、波动率、质量、成长、反转、流动性,再叠加各种财务指标、价格指标和资金流指标,因子很容易从工具变成收藏品。
问题是,因子数量增加,不等于可交易的超额收益增加。
大量因子在论文或历史数据库里表现漂亮,落到真实账户却迅速变形,主要有三道闸门:
1. 样本内有效,样本外失血。
参数是围绕过去的市场状态调出来的,换一个时间段、行业结构或交易制度,信号强度马上下降。
2. 忽略交易成本。
因子每天给出很多换手,回测按照收盘价或下一根开盘价成交,曲线看起来平滑。真实下单时,盘口深度、冲击成本、滑点和排队位置会直接吞掉那点微弱的优势。
3. 因子之间高度同质化。
你以为自己持有五个独立因子,实际上它们可能都在表达同一个拥挤方向。动量因子、资金流因子和短期强势因子,在某些行情里会一起买入同一批股票。行情顺风时,这叫共振;风向反转时,这就是集体踩踏。
因子能不能活下来,不能只看历史年化收益。更关键的是追问:这项收益到底补偿了什么风险?来自信息差、行为偏差、流动性折价,还是单纯来自某段时期的资金流入?
如果答案只是“过去有效”,那它离爆仓并不远。机构资金一旦集中跟踪,因子收益就会被提前交易。信号发布时,价格已经被推到更高的位置;你再按规则买入,买到的不是Alpha,而是前面资金留下的出货价。
拥挤度如何侵蚀因子收益
因子拥挤度,指的是跟踪或投资某个因子的资金过多,最终导致该因子的收益性或收益稳定性下降。它不是简单的持仓数量统计,而是资金、仓位、交易方向和退出路径同时挤在一条狭窄通道里。
拥挤交易有三个阶段。
第一阶段是收益扩张。越来越多资金发现同一信号,买盘增加,因子组合表现变好。研究者看到净值曲线向上,于是把信号写进更多模型。
第二阶段是收益前置。因子还有效,但收益已经从“信号出现后上涨”变成“信号被预期时上涨”。模型之间互相抢跑,成交价越来越差,持仓周期越来越短。
第三阶段是流动性反噬。市场出现压力时,所有策略同时减仓。原本看起来相关性不高的组合,突然在同一个交易日触发卖出。盘口买方深度不足,价格被连续击穿,止损单和被动减仓进一步放大冲击。
这就是为什么因子衰退不能只用滚动收益率判断。净值回撤是结果,拥挤度是原因之一。你需要同时观察信号强度、持仓重合、换手、成交容量、行业暴露和退出时的流动性。
因子最危险的时刻,不是没人使用,而是所有人都相信它还能继续使用。
传统资金流指标,正在被拆单算法打穿
过去做资金流分析,常见做法是按照成交金额划分大单、中单和小单,再用买卖方向估算主力资金流入流出。这套方法并非完全没有价值,但它依赖一个前提:大资金会以相对明显的大额订单进入市场。
这个前提已经被算法交易改变。
机构执行一笔大额订单,不会把完整订单直接砸进盘口。为了降低市场冲击、隐藏交易意图,常见执行方式是“大单化小”,也就是把一笔大单切成许多小订单,在不同时间、不同价位逐步成交。订单可能按照成交量、时间、盘口深度或短期价格波动动态调整。
于是,传统指标遇到了一个麻烦:它看到的是很多笔小单,却看不到背后那笔真正的大单。
表面上看,盘口里没有明显的主力扫货;实际上,某个方向的资金可能已经持续成交了几十分钟。你用日度数据汇总时,只能看到当天净流入;你用固定金额门槛识别“大单”时,又会漏掉被拆散的机构订单。
这不是简单的数据精度问题,而是观测对象发生了变化。
以前的资金流指标试图识别“订单有多大”;现在更应该识别“订单行为是否持续、是否具有方向性、是否在特定时段反复出现”。前者容易被拆单击穿,后者才接近真实的执行逻辑。
拆单如何制造虚假的平静
算法拆单最容易制造三种错觉。
第一,盘口看起来没有攻击性。
没有一笔订单明显扫穿多档价格,交易者便误以为买卖双方力量均衡。但如果同一方向的小单持续吃掉卖一、卖二附近的流动性,价格依然会被慢慢推高。
第二,单笔资金规模不突出。
固定阈值把订单划成小单之后,传统大单资金流会出现失真。大资金没有消失,只是把脚步放轻了。
第三,日度数据掩盖了交易时段差异。
同样是全天净流入,早盘集中流入和尾盘持续流入,背后的交易含义完全不同。前者可能是开盘定价和抢跑,后者可能与指数调整、收盘执行或资金被动配置有关。
如果你只看日线级别资金流,等于把一场盘中的攻防压成一句摘要。摘要能告诉你发生过什么,不能告诉你是谁在什么时候、以什么方式完成了成交。
这也是资金流因子需要从日频走向分钟频的原因。不是为了追求更快,而是为了把被日度汇总抹掉的交易结构重新捞出来。
从日频到分钟频:不要追逐噪声,要重构残差
把日度资金流切成分钟频,并不意味着把数据切得越细越好。很多人一听到高频,就开始缩短窗口、增加指标、堆叠模型,最后把盘口噪声当成信号,把一次偶然成交当成资金意图。
真正有价值的方向,是对资金流进行切割、分组和残差重构。
第一步:把全天资金流拆成可解释的时段
早盘、午盘、尾盘的交易机制和参与者结构并不相同。研究事实显示,早盘9点30分到10点的成交量占比约为25%,这意味着开盘阶段本身就承载了相当一部分价格发现过程。
但成交量集中不等于信号一定更强。
早盘的价格波动可能受到隔夜信息、集合竞价、指数开盘调整和集中止损影响。这里既有真实信息,也有大量被动成交。尾盘则常见撤单集中、被动执行和仓位调整。不同时间段的资金流,不能简单加总后当成同一种力量。
你至少应该把资金流拆成:
- 早盘集中成交与持续成交;
- 午盘恢复后的方向延续;
- 尾盘成交与撤单行为;
- 特定波动状态下的资金流;
- 相对于同类股票、同一行业和自身历史基准的异常流入。
第二步:建立基准,再观察偏离
假设某只大市值股票每天早盘成交额都很高,那么今天早盘出现较大的资金流,并不自动代表机构正在加仓。它可能只是这只股票的正常交易节奏。
因此,真正要研究的是偏离基准的部分,也就是残差。
残差不是一个神秘术语。它回答的问题很直接:在控制了股票规模、行业、市场整体波动、正常成交时段和历史交易习惯之后,这只股票今天的资金流还剩下多少异常部分?
可以从几个方向构建基准:
- 用股票自身过去一段时间的分钟成交模式,估计正常资金流;
- 控制流通市值、行业和市场波动,避免把规模效应误认为资金意图;
- 对早盘、午盘、尾盘分别建模,避免时段结构混在一起;
- 将市场整体资金流剥离,观察个股相对市场的异常变化;
- 对极端成交和异常价格冲击进行降权,减少单笔交易对结果的污染。
最后留下的残差,才有机会成为可检验的信号。
第三步:检验信号能否穿过成本
研究资料给出的结果显示,基于逐笔成交数据,将日度资金流提升到分钟频进行切割与重构后,大单分钟资金流切割残差因子的平均信息系数为0.041,信息系数信息比率为3.23,多空对冲年化收益率为15.9%。
另一种按时段重构的大单分钟资金流时段残差因子,平均信息系数为0.043,信息系数信息比率为3.41,多空对冲年化收益率达到16.8%。
还有基于不同交易情景构建的残差因子,平均信息系数为0.037,信息系数信息比率为3.88,多空对冲年化收益率为14.1%。
这些数字不能被粗暴地理解成“照抄模型就能获得同样收益”。它们代表的是特定数据、样本、构造方法和交易假设下的实证表现。切割因子、时段因子和情景因子也不是同一个东西,不能把几组结果拼成一个更漂亮的故事。
但它们揭示了一个清晰方向:资金流因子不应该停留在全天汇总和固定金额阈值上。对交易时段、成交行为和基准偏离进行重构,能够提高信号对真实执行过程的描述能力。
| 资金流处理方式 | 主要观察对象 | 容易出现的问题 | 重构方向 |
|---|---|---|---|
| 日度资金流 | 全天净流入或净流出 | 抹平盘中时序,无法识别执行节奏 | 拆分到分钟频和交易时段 |
| 固定金额大单 | 单笔成交金额 | 拆单后机构订单被识别为小单 | 观察持续性、方向性和成交序列 |
| 行业内资金流排名 | 同行业相对强弱 | 容易混入行业整体行情 | 剥离行业和市场共同成分 |
| 原始成交量异常 | 成交是否放大 | 无法区分信息交易与被动交易 | 建立历史基准并计算残差 |
| 全时段统一因子 | 全天信号平均值 | 忽略早盘、尾盘的交易机制差异 | 按时段、波动和情景分别重构 |
撤单不是盘口噪声,它会暴露流动性的裂缝
成交数据记录了已经发生的交易,委托和撤单则记录了参与者原本打算做什么,以及他们在压力下如何改变计划。
日内撤单分布呈现出早盘衰减、尾盘放量的特征,尾盘撤单相对集中。这个现象对微观结构研究非常关键,因为撤单不是单纯的无效数据。大量撤单可能意味着报价方正在重新评估风险,也可能意味着盘口流动性正在收缩。
当价格平稳时,撤单比例和股票市值之间展现出较好的分组单调性。换句话说,不同市值股票的撤单行为存在系统差异。小市值股票的盘口深度、参与者结构和报价稳定性,与大市值股票并不相同。你拿同一个撤单阈值扫过全市场,得到的不是统一尺度,而是一堆混合误差。
为什么尾盘撤单值得单独处理
尾盘是很多策略集中调整仓位的时间段。指数跟踪、组合再平衡、日终风控、隔夜风险控制和套利平仓,都可能在这个阶段增加成交与撤单。
尾盘撤单集中,至少带来三种研究价值:
1. 判断盘口深度是否真实。
挂单数量很多,不等于这些流动性愿意被成交。撤单快速增加时,盘口上的买卖量可能只是短暂展示。
2. 识别执行压力。
如果某一方向的成交持续发生,同时对手方挂单反复撤退,价格冲击会被放大。此时再用常规成交量指标判断强弱,容易误判。
3. 修正交易成本。
回测里最容易被低估的是成交难度。撤单比例上升,意味着你看到的报价更难真正成交,滑点模型必须跟着变。
撤单因子不能单独承担方向预测任务。它更适合用于调整信号可信度、估计流动性风险和动态改变下单方式。方向信号告诉你想买还是想卖,撤单行为告诉你现在能不能按理想价格买卖。
这两者混在一起,模型会变得难以解释;完全分开,又会浪费微观结构信息。实战上更稳妥的方式,是把撤单特征放进交易执行和风险控制层,而不是强行把它包装成一个万能选股因子。
你看到的是挂单,市场真正给你的,只有成交。撤单一集中,报价就可能变成一面薄墙,轻轻一撞便被击穿。
从信号生成到开平仓:因子衰退会先出现在成交层
一个因子是否衰退,不能只看它是否还能预测未来收益,还要看信号变成订单以后,是否仍然能留下利润。
下面用一个抽象的交易流程说明问题。假设分钟频资金流残差因子在某只股票上出现正向异常,模型给出买入信号。传统做法可能是下一分钟直接按固定比例下单,持仓到收盘或下一个调仓时点。
这套流程至少有四个可能的失血点。
信号出现时,价格已经被提前推升
如果模型使用的是收盘后才能完整计算的数据,那么下一交易日开盘执行,价格可能已经完成部分调整。回测使用理想成交价时,信号收益会被高估。
解决方法不是简单提前计算,而是明确数据可用时间。分钟数据必须区分成交发生时间、数据接收时间、因子计算时间和订单发出时间。只要其中一环被写错,回测就会发生隐形未来函数。
方向正确,但成交价格不对
资金流因子对价格方向判断正确,不代表你的订单能在理想价位成交。盘口深度不足时,市价单会连续吃掉多档报价;限价单则可能排队失败,最后根本没有成交。
因此,收益归因不能只写成:
收益=信号方向×价格变化。
更接近真实交易的表达是:
收益=信号方向带来的价格收益-手续费-滑点-冲击成本-未成交机会成本。
最后一项经常被忽略。订单没有成交,不代表没有损失。如果信号有效而你因为限价过严没有买到,机会成本同样会侵蚀策略表现。
加仓过程可能改变信号本身
当模型持续收到同方向资金流信号时,策略可能分批加仓。但你的成交会改变市场短期供需,尤其是在小市值和低流动性股票中,策略规模越大,越容易把自身冲击误认为信号延续。
这是量化交易里很难受的一种反馈:模型发现上涨,买单推动上涨,回测于是认为信号更强;真实交易规模扩大以后,买单把价格推高,随后又因为缺乏新的承接而回落。模型不是被市场打败,而是被自己的订单暴露出来。
平仓触发时,所有人都在同一扇门前
因子衰退期间,持仓结构通常更拥挤,平仓相关性也更高。一旦因子组合反转,大家会同时减仓。你设置的止损价可能只是理论上的防线,实际成交会在更差的位置完成。
这就是扫损和滑点叠加的地方。止损不是保险,它只是把风险从“是否离场”变成“以什么价格离场”。如果模型没有估计极端时段的成交冲击,止损触发越坚决,账户损失越快。
怎样判断一个因子正在衰退
判断因子衰退,不能拿单一指标下结论。因子收益下滑可能来自市场风格切换,也可能来自拥挤、成本上升、数据失真或信号前置。实战中,我会把检查拆成五个层面。
一,看预测能力是否持续变弱
信息系数下降,说明因子对未来收益的排序能力减弱。但不要只看单月或单周。分钟频因子本身噪声更大,短期波动不能直接等同于永久失效。
需要观察:
- 信息系数的滚动均值是否持续下移;
- 信息系数信息比率是否恶化;
- 多空组合的收益是否从单边变成频繁反转;
- 因子在不同市值、行业和流动性分组中的表现是否同步衰退;
- 因子收益是否只集中在少数极端交易日。
如果只有总体收益下降,而分组排序能力仍在,问题可能出在交易成本和组合构造。如果信息系数本身也持续坍塌,才需要进一步怀疑信号逻辑。
二,看收益是否被交易成本吃掉
因子衰退经常不是预测能力完全消失,而是毛收益还在,净收益先死。
把策略拆成不同换手水平后,观察收益对换手和成交额的敏感度。若低换手版本还能维持,实际高换手版本迅速失血,说明信号存在,但交易方式已经不适配当前市场。
特别要注意:
- 平均滑点是否逐月上升;
- 开盘和收盘成交是否贡献了大部分亏损;
- 小市值组是否出现更明显的收益折损;
- 限价单未成交比例是否上升;
- 订单冲击是否随着持仓规模扩大而非线性增加。
三,看持仓是否越来越拥挤
拥挤度没有一个适用于所有市场的单一公式,但可以从持仓和交易结果中建立代理指标:
- 不同策略之间的持仓重合度;
- 因子组合与行业指数、风格指数的相关性;
- 因子收益集中在少数股票的程度;
- 极端行情下的共同平仓幅度;
- 多空两端的流动性差异;
- 同类信号出现后的价格跳跃和收益前置。
如果一个因子长期只靠少数热门股票贡献收益,风险已经不在因子本身,而在退出路径。只要这些股票的盘口被打薄,策略就会被迫用更差价格平仓。
四,看信号是否从日频转移到盘中
传统日度因子在收益下降时,不能直接宣布失效。先检查它的收益是否被盘中交易提前消耗。
例如,过去因子在次日开盘到收盘之间赚钱,现在可能变成开盘跳空后不再延续。这个变化说明市场参与者已经把信息提前定价。信号仍然存在,但可交易窗口缩短了。
这时,策略需要重新回答:你要赚的是隔夜收益、开盘后的延续,还是盘中回撤后的再进入?不同答案对应不同数据和执行模型。
五,看市场状态是否已经切换
因子可能在趋势行情、震荡行情、流动性宽松和流动性收缩阶段表现不同。不能因为某段时期失效,就断言经典因子永久完全失效。
但也不能拿“市场风格轮动”四个字替所有亏损背锅。真正的状态识别,应该落到可观测变量上,比如波动率、成交集中度、行业扩散度、盘口深度、撤单比例和资金流方向一致性。
模型必须知道自己在哪种环境里交易。否则所谓动态策略,只是给静态因子套了一层漂亮包装。
策略迭代,不是继续堆因子
因子衰退后,最常见的错误是增加更多因子。原来五个因子不赚钱,就再加十个;模型不稳定,就换更复杂的机器学习算法;回撤太大,就把止损和过滤条件继续叠加。
这样做很容易把问题掩盖,而不是解决。
策略迭代首先要区分三个层面:
1. 信号层:因子还能不能解释未来收益;
2. 组合层:多个信号组合后是否发生拥挤和暴露重叠;
3. 执行层:订单能不能以可接受成本完成。
信号层的问题,不能靠执行优化解决。执行层的问题,也不能靠添加财务因子解决。三者混在一起调参,最后只会得到一个对历史样本极其敏感的黑箱。
先做因子残差,再谈模型升级
残差重构的意义,在于剥离已被市场广泛定价的部分。
以资金流为例,原始资金流可能同时包含市场整体风险偏好、行业轮动、股票规模效应和个股异常交易。把这些共同成分剥离后,剩下的残差更接近个体层面的异常行为。
同样的方法也可以用于其他因子:
- 对动量因子剥离市场和行业趋势;
- 对波动率因子剥离股票规模和流动性差异;
- 对价值因子剥离行业估值中枢;
- 对成交量因子剥离股票自身的日内季节性;
- 对短期反转因子剥离极端行情和涨跌停约束。
残差不是天然有效,但它能让研究者知道:收益到底来自共同风险,还是来自相对偏离。
再用交易情景切割信号
同一个因子,在不同情景下的含义不同。资金流出现在低波动盘整、快速下跌、尾盘跳水或行业整体上涨时,不能用同一个权重处理。
情景切割至少可以围绕以下变量展开:
- 市场整体上涨还是下跌;
- 行业是否同步走强;
- 个股是否处于放量突破或缩量反弹;
- 资金流发生在早盘、午盘还是尾盘;
- 撤单比例是否同步升高;
- 盘口深度是否足以承接策略订单。
资料中的情景残差因子,平均信息系数为0.037,信息系数信息比率为3.88,多空对冲年化收益率为14.1%。它的表现并非简单高于其他重构方法,而是说明情景划分可以改变信号的稳定性和风险结构。研究时不要只盯年化收益率,信息系数信息比率、回撤来源、换手和容量同样要放在桌面上。
最后才是动态权重和机器学习
机器学习可以处理非线性关系,但它不会自动识别数据污染,更不会替你支付滑点。输入的是被拆单扭曲的资金流,输出再复杂,也只是更精细地拟合错误。
模型升级之前,至少要完成三件事:
- 确认分钟数据的时间戳和可用时点没有未来函数;
- 确认训练集、验证集和测试集之间没有股票池和标签泄漏;
- 确认回测成交规则能反映真实盘口,而不是默认每一笔都能按中间价成交。
动态权重可以根据因子近期信息系数、拥挤度、流动性和市场状态进行调整,但必须限制调整速度。否则模型会在噪声出现时频繁换挡,换手上升,滑点扩大,最终把信号收益交给券商和市场。
一套更接近实战的因子衰退排查顺序
如果你的量化策略已经出现连续回撤,不要一上来重写全部代码。先按顺序拆解,找出是哪一层在漏水。
先冻结原始版本
保留原始因子、原始组合和原始执行规则,不要边改边覆盖。否则你会失去对照组,最后无法判断收益变化来自市场,还是来自自己的修改。
再拆分毛收益和净收益
把手续费、滑点、冲击成本、未成交损失分别列出。很多策略的毛收益并没有明显恶化,真正被击穿的是净收益。
再按时段拆分
分别观察早盘、午盘和尾盘的信号收益。早盘收益消失,可能是信号前置;尾盘收益消失,可能是拥挤平仓和撤单增加;只有分时段后,问题才会露出轮廓。
再按流动性和市值分组
不要只看全市场平均值。将股票按市值、成交额、盘口深度和撤单比例分组,观察因子在哪些组中最先失效。
如果收益只剩在低流动性股票里,策略可能不是找到了Alpha,而是在承担无法退出的流动性风险。如果收益只剩在大市值股票里,则需要重新估计容量和成交成本。
再检查信号拥挤
比较自己的持仓与历史热门组合、行业暴露和风格暴露。没有外部持仓数据时,也可以通过因子组合的相关性、共同持仓集中度和压力日共同下跌幅度建立内部代理。
最后再改模型
确认问题来自信号、组合还是执行以后,才决定是重构因子、降低换手、改变持仓周期,还是调整订单算法。顺序颠倒,调参只会变成一场漫长的自我安慰。
因子衰退不是终点,但它会淘汰懒惰的模型
因子衰退的本质,是市场参与方式发生了变化。更多资金追踪相似信号,算法交易把机构订单拆散,日度资金流无法再完整描述盘中行为,撤单和盘口深度又让表面流动性变得不可靠。
所以,因子研究不能停在“这个指标过去有没有用”。真正的问题是:
- 收益来自什么风险补偿;
- 哪些资金正在交易同一信号;
- 信号出现后,收益还剩多少时间窗口;
- 你的订单会不会改变价格;
- 在所有人同时平仓时,你能不能活着出去。
超过300种因子构成了庞大的因子动物园,但能穿过交易成本、拥挤度和执行冲击的信号,始终是少数。分钟频资金流切割、时段残差、情景重构和撤单行为分析,提供了有价值的研究方向,却不是一张稳赚通行证。
别把一组漂亮的回测数字当成护身符。因子能否继续工作,要看它在真实盘口里还能不能成交;策略能否继续活着,要看拥挤反转时账户能不能扛住那一下击穿。
市场不会因为你的模型写得复杂,就给你更好的出场价格。你不重构因子,因子就会重构你的账户——先扫损,再滑点,最后爆仓。
Related reading: 2007年量化地震:拥挤交易如何让多因子模型集体失效 and 强化学习在量化交易中为什么屡屡失效?从模拟盘到实盘的四大鸿沟.
