← 返回量化与 AI 投研概念库

因子拥挤:大家都用同一个信号,平时没事,出事就是一起出

最后更新 2026-08-18
R2 · 注意风险

有个现象你八成见过,只是当时没往这个方向想。

某类票连着好几个月表现稳定,谁买谁舒服,讲法也说得通——业绩好、增速快、机构扎堆、研报一致看好。你在某个时点也进去了,前两个月确实还行。然后某天,没有任何一条像样的坏消息,这一整类东西同时往下掉,掉得又急又整齐,像是被同一只手按下去的。你翻遍新闻找不到理由,只找到一堆事后解释。

再等几天,跌势还在继续,而且你发现一件更奇怪的事:跌的那些票,彼此之间原本没什么关系。不同行业、不同规模、不同故事,唯一的共同点是——它们同时出现在很多人的买入名单上。

这就是本篇要讲的那件事。

先说人话:一条被导航发现的小路

你每天上班走一条小路抄近道。这条路窄,但没人知道,你能省二十分钟。

后来导航软件把这条路收进了推荐路线。一开始也没什么,多几辆车而已,还是比大路快。再后来,越来越多人被导到这里。晴天的时候,这条路依然通——甚至因为大路更堵,它看起来还是「更优」的选择,于是又有更多人涌进来。

直到某天早上下雨,路口一辆车抛锚。

大路上遇到这种事,绕一下就过去了。可这条小路只有一个出口,所有人同时想掉头,谁也动不了。平时看不出问题,不是因为路变宽了,而是因为大家没有同时想走。

拥挤的可怕之处从来不是「人多」这三个字,而是「人多」+「出口只有一个」+「大家的离场信号是同一个」这三件事撞在一起。前两个条件平时就存在,只有第三个条件被触发时,你才会知道它一直存在。

投资层:钱是怎么一点点挤到同一处的

先把两个词就地说清楚。因子,指的是一条用来给股票排序的可量化理由——比如「过去几个月涨得多的」「便宜的」「盈利质量高的」。因子拥挤,指的是同一条理由上,堆积了远超它承载能力的钱。

钱不是一夜之间挤过去的,是被一个自我强化的循环慢慢吸过去的:

某条理由过去几年有效 → 被写进论文、写进公开的因子库、被产品化成一只只基金 → 更多钱按这条理由买入 → 买入行为本身把这些标的的价格推上去 → 这条理由的历史业绩变得更好看 → 更多钱进来。

注意中间那一步:收益的一部分不再来自这条理由本身,而来自后来者的买入。 这一段收益是借来的,借款人是「还没进场的下一批人」。只要队伍还在变长,账就平得了;队伍一旦停止变长,账就要还。

这也是为什么一个被公开的好方法会慢慢失效——不是市场变聪明了,是钱把它填满了。这一层和方法本身的老化不是一回事,可以对照 模型会过期 一起看:那篇讲的是规律变了,这篇讲的是规律没变、但位置站不下了。

平时没事,出事就是一起出

拥挤的账,平时是隐形的。

正常日子里,买卖双方错开来。你今天想减一点,市场上总有人今天想加一点,成交在一个不痛不痒的价格上完成。你会觉得这个位置流动性挺好,随时能走。

问题在于,「随时能走」这个判断,是在别人不想走的前提下成立的

而拥挤的仓位有个致命特征:大家进场的理由是同一个,那么大家离场的信号也高度一致。某个共同的触发点出现——可能是一次风格切换、一次监管表态、一次杠杆资金的追加保证金通知,甚至只是季末的常规调仓——一批人开始减仓。

接下来是那个熟悉的反馈环:

卖出压低价格 → 价格下跌让第二批人的账面浮盈变浮亏 → 触发他们的止损或风控线 → 他们也卖 → 价格进一步下跌 → 触发第三批。

每一环单独看都是理性的、纪律严明的操作。合在一起,就是踩踏。这里最反直觉的一点是:风控做得越规范、纪律执行得越坚决的群体,踩踏反而越同步,因为大家的撤退触发条件长得都差不多。

更糟的是,这时候你的仓位表面上是分散的——几十只票、好几个行业。但驱动它们的是同一条理由,一起跌的时候,分散的保护就不存在了。关于这一点的数学本质,相关性 那篇讲得更细:分散有没有用,取决于相关性,而相关性在压力时刻会集体跳向一。你以为买了几十样东西,实际上买了一样东西的几十份。

拥挤度怎么观察

坦白说,拥挤度没有一个公认的、能直接读数的指标——它不像收盘价那样客观存在,任何算法都是估算。但有几类迹象是普通人也能感知的,越多条同时成立,越该警觉:

第一,同涨同跌的整齐度在变高。 这一类标的原本各走各的,最近却越来越像一个东西。

第二,同一条理由被反复讲。 券商研报、财经媒体、社交平台的解释高度趋同,连用词都开始一致。一条理由从「少数人的发现」变成「常识」,通常意味着它已经被定价,甚至被过度定价。

第三,围绕这条理由的产品在扩容。 主题基金密集发行、相关指数被大量跟踪、规模持续净流入。这是钱真的挤进来的最硬证据。

第四,估值相对于历史区间明显抬升,而基本面的改善没有同步跟上。 这个差额就是「后来者买入」贡献的那部分。

第五,成交量的构成变得单薄。 表面成交活跃,但买盘越来越集中在同一类参与者手里——这意味着当他们统一转向卖出时,接盘的一方是空的。

专业机构会用更定量的方式估:看某一因子上多空组合的持仓集中度、看它相对自身历史的估值分位、看它的收益波动是否异常压缩(拥挤常表现为「涨得很稳」,因为大量同向资金抹平了波动)。这里有个残酷的规律——拥挤在爆发之前,看起来是低风险的。波动小、回撤浅、夏普漂亮,所有常规风控指标都会告诉你「这里很安全」。

系统层:拥挤在代码里长什么样

写代码的人对拥挤的处理方式很实在:他们没法测量全市场有多少钱和你想的一样,但他们能处理拥挤爆发时那个具体后果——你的单子发不出去

qlib 的交易所模块里,判断一只票能不能交易的逻辑非常直白:

def is_stock_tradable(self, stock_id, start_time, end_time, direction=None):
    # check if stock can be traded
    return not (
        self.check_stock_suspended(stock_id, start_time, end_time)
        or self.check_stock_limit(stock_id, start_time, end_time, direction)
    )

停牌,或者触及涨跌停价带,这只票就不可交易,订单会被直接拒掉。踩踏发生时,正是一大批标的同时满足这两个条件的时刻——你的模型算出了漂亮的卖出信号,撮合层告诉你:卖不掉。

它的选股模块还留了两个开关,名字本身就说明了问题。一个是 only_tradable:打开时,策略在挑选标的时会先过滤掉当下不可交易的,避免把决策浪费在根本执行不了的名字上;关掉时,策略假装自己总能成交。另一个叫 forbid_all_trade_at_limit,用来控制触及价带时是否一刀切禁止所有方向的交易——文档里明确说了,一刀切比现实更严格,因为现实中涨停时是可以卖出的。

这两个开关的存在,等于把一个问题摆到你面前:你的历史检验,是在「总能成交」的假设下做的,还是在「可能成交不了」的假设下做的? 两者算出来的成绩,差的正好就是拥挤爆发那几天的钱。这个「回测里能做到、现实里做不到」的落差,本质上和 滑点 是同一类问题,只是滑点讲的是价格变差,这里讲的是干脆没有价格。

还有一处更有意思的证据,在 freqtrade 的标的筛选插件里。它有一个按成交量排序的候选池:从交易所拉行情,按成交额排序,取前若干个作为可交易范围,每隔一段时间刷新一次(刷新间隔有默认值,可在配置里改)。

这个设计本身很合理——没量的东西不能碰。但请想一想:如果一万个人都跑这套逻辑、都连同一批交易所、都按同一个字段排序,他们得到的名单是同一份。 于是这一万个人在同一批标的上买卖,用相似的信号,在相近的时刻。筛选规则越标准、越公开、越合理,产出的名单就越一致,拥挤就越容易攒出来。

这一点值得单独记住:拥挤往往不是坏方法造成的,恰恰是好方法、公开方法、被广泛认可的方法造成的。 一条只有你知道的糟糕理由,不会拥挤。关于公开因子库带来的同质化,公式化因子 里有更完整的展开。

至于风险模型这一层,qlib 的结构化协方差估计给了另一个视角:它把一大堆资产的共同波动,拆成「少数几个共同来源」加上「各自的独有部分」。这个拆法背后的含义是——你持有的几十个标的,真正的风险来源可能只有那么几条。拥挤,说白了就是你在其中某一条上的暴露,远比你以为的大。

它和流动性是什么关系

这两个概念经常被混着说,但它们不是一回事,关系更像「病灶」和「症状」。

流动性讲的是承载能力:这个市场、这个时间、这个价位,能吃下多少钱而不明显改变价格。它是市场的属性。

拥挤讲的是占用比例:同一条理由上已经堆了多少钱,相对于它的承载能力。它是仓位分布的属性。

两者的乘积才决定后果。同样是拥挤,发生在流动性极充沛的地方,可能只是收益变薄;发生在流动性稀薄的地方,就是出不去。反过来,同样的流动性条件下,拥挤度越高,你被迫在恶劣价格上离场的概率越大。

它们还有一层更麻烦的耦合:踩踏时,流动性本身会消失。平时报价上挂着的那些买单,在下跌加速时会先撤走——报价的人不是慈善家,他们也怕接到刀。于是你最需要流动性的那一刻,恰好是它最少的那一刻。这就是为什么拥挤爆发时的损失,几乎总是超出所有基于常态数据的估算。

想把「钱多了会怎样」这条线完整看一遍,可以接着读 流动性与策略容量:那篇讲的是你自己的钱变多带来的上限,这篇讲的是别人的钱和你挤在一起带来的上限。两个上限里,先撞上哪个都一样疼。

🚧 避坑

「它最近走得特别稳」是拥挤最典型的伪装。 大量同向资金会把波动压平,让所有基于历史波动率的风险指标一起变好看。你看到的低风险读数,可能不是风险低,而是风险被暂时压住了——压住它的正是那批随时可能同时转身的钱。风险指标突然全面变好,比全面变差更值得追问一句「为什么」。

失效边界与常见误用

把拥挤当成看空的理由。 拥挤能告诉你「万一出事会很难看」,但完全没法告诉你「什么时候出事」。一个拥挤的位置可以再拥挤两年。用拥挤度做择时,历史上让很多人过早离场,然后在最后一段最陡的上涨里改变主意重新买回来——那才是最坏的结局。它是一个仓位管理的输入,不是一个买卖开关。

以为换几只票就叫分散。 只要驱动理由是同一条,换标的不改变任何事情。真正的分散要在「理由」这一层做,而不是在「名字」这一层做。

把拥挤度当成客观数据。 前面说了,它没有权威口径。不同机构算出来的拥挤度可以差得很远,甚至方向相反。看它的趋势和极端值,别看它的绝对数字。

忘了自己也是拥挤的一部分。 你能想到的理由,通常别人也想得到;你能拿到的公开数据和公开因子,别人也能拿到。判断拥挤时,先假设自己在人群里,而不是在人群外看着。

指望靠「跑得比别人快」解决问题。 每个身处拥挤位置的人都是这么打算的。所有人都计划提前离场,这件事本身就是拥挤最强的证据。真正管用的不是跑得快,是一开始就别把仓位放到必须靠跑得快才能全身而退的位置上

小结

  • 因子拥挤 = 同一条选股理由上,堆的钱远超它能承载的量;它的收益后期有一部分是借来的,出借人是还没进场的下一批人。
  • 平时看不出问题,是因为大家没有同时想走;一旦触发点出现,同样的理由会让所有人同时转向,反馈环把下跌自我放大。
  • 可观察的迹象:同涨同跌变整齐、解释口径高度一致、相关产品密集扩容、估值抬升而基本面没跟上、成交结构变单薄;而且拥挤在爆发前看起来像低风险
  • 代码层面看到的是它的后果:涨跌停与停牌让订单直接被拒;公开的、标准化的筛选规则会让一万个人拿到同一份名单——拥挤多半是好方法造成的,不是坏方法。
  • 拥挤和流动性是占用比例与承载能力的关系,两者相乘才是后果;且踩踏时流动性本身会先跑掉。

一句话记住这篇:赚钱的位置不怕人多,怕的是所有人打算从同一扇门、在同一秒钟出去。

本文所引源码与文档均来自上述快照版本,是阅读代码得出的机制说明,不是运行结果;具体行为请以你手上那个版本为准。回 量化与 AI 投研概念库 看其它概念各自在说什么;本站内容为投资教育,不构成任何投资建议,边界见 免责声明

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

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