我是如何判断行情抱团的

从单一强势指标,到行业分化、市场宽度与微盘动量的四维投票

量化投资
行情抱团
市场状态
微盘股
ETF轮动
记录0.5策略中行情抱团识别的多次尝试、最终四维投票方法,以及DUAL与ETF_ONLY状态切换逻辑。
作者

WZ ETF

发布于

2026-08-22

我为什么要判断“抱团”?

我的0.5策略同时运行两个收益引擎:ETF轮动和微盘股选股。

正常情况下,组合处于 DUAL 状态,目标仓位大致是ETF 49%、微盘股49%,另外保留2%现金缓冲。但A股并不总是适合微盘。当资金高度集中到少数行业,指数可能看起来很强,市场内部却有大量股票持续下跌。微盘股往往是这种流动性收缩的直接受害者。

因此,我判断抱团的目的不是预测指数明天涨跌,也不是评价某个热门行业是否已经见顶,而是回答一个更具体的问题:

当前市场结构是否已经不适合继续承担49%的微盘股风险?

如果答案连续两天为“是”,策略就进入 ETF_ONLY,清空微盘持仓,把主要资金交给ETF模块;只有恢复信号连续三天成立,才重新允许回到 DUAL

“抱团”不是简单的上涨

我所说的抱团,指的是一种市场内部结构:

  • 少数行业趋势非常强;
  • 这些强势行业明显甩开普通行业;
  • 大量行业实际上处于弱势;
  • 微盘股等权组合也开始走弱。

所以,“某个行业涨得很好”不等于危险抱团。在健康的普涨市场中,龙头行业同样可以很强,但中位数行业和微盘股也可能一起上涨。真正需要防范的是:头部很热、底部很冷,指数繁荣掩盖了市场宽度恶化。

行情抱团识别从大盘、强势行业、行业分化、市场宽度到微盘动量的逐步尝试

尝试一:只看大盘指数

最直觉的方法,是观察沪深300、中证500或全市场指数是否上涨。

它的优点是简单、稳定、容易获取。但问题同样明显:指数是市值加权的,少数大权重股票上涨,就可能抵消大量中小股票下跌。指数上涨只能说明权重组合上涨,不能说明赚钱效应扩散到了整个市场。

如果用大盘指数作为唯一开关,策略可能在“指数红、微盘绿”的阶段继续持有微盘;也可能在指数调整但微盘相对活跃时过早退出。

因此,大盘指数更适合描述整体价格方向,不适合单独识别抱团结构。

尝试二:只看最强行业

第二种思路,是看最强行业的动量。既然抱团意味着资金向少数主线集中,那么头部行业应该非常强。

我的做法是使用申万一级行业。每个行业不是直接使用一只行业指数,而是从行业成分股中稳定抽样,计算等权收益曲线,再用与ETF轮动相同的思想计算20日趋势得分:

\[ \text{Score}=\text{Annualized Trend}\times R^2 \]

趋势越快、路径越平滑,得分越高。然后取所有行业中得分最高的三个,计算平均值:

\[ \text{Top3 Score}=\frac{S_{(1)}+S_{(2)}+S_{(3)}}{3} \]

当前阈值是:

Top3行业平均分 > 0.20

这一指标解决了“市场是否存在强主线”的问题,却没有解决“强主线是不是以牺牲其他行业为代价”的问题。全面牛市中,最强三个行业也会非常强,但这并不代表微盘需要退出。

需要特别说明:20日趋势被年化后,数值可能很大。它只是为了横向排序和阈值判断,不是对未来一年收益率的预测。

尝试三:加入头部与中位数的差距

为了区分“普涨中的强势”和“少数行业独涨”,我加入了行业分化指标:

\[ \text{Sector Spread}=\text{Top3 Score}-\text{Median Sector Score} \]

当前条件是:

Top3平均分 - 全部行业中位数 > 0.25

为什么用中位数而不是平均数?因为少数极端强势行业会把平均数向上拉,中位数更接近“典型行业”的真实状态。

这个指标回答的是:头部行业是否已经与大多数行业拉开明显距离。它比单看第一名或Top3更接近资金集中,但仍然不能完整描述市场宽度。

尝试四:加入弱势行业占比

抱团不仅表现为头部领先,也表现为越来越多行业掉队。因此,我统计全部有效行业中,趋势得分低于0的比例:

\[ \text{Weak Ratio}=\frac{\#(S_i<0)}{\#\text{有效行业}} \]

当前条件是:

弱势行业占比 > 55%

如果超过一半行业趋势为负,而Top3仍然很强,指数表面的繁荣就更可能来自少数方向。

但行业宽度恶化仍不等于微盘一定走弱。行业分类覆盖大中小公司,同一行业内部也可能分化。因此,我最终又加入了策略真正关心的对象——微盘自身。

最终补上:微盘股自己的动量

最终方案构建了一个“微盘等权代理组合”:

  1. 按流通市值从小到大获取候选股票;
  2. 剔除科创板、北交所和上市不足120天的股票;
  3. 最终取流通市值最小的500只;
  4. 计算这些股票的等权日收益曲线;
  5. 对该曲线计算20日“年化趋势 × \(R^2\)”得分。

当前抱团条件之一是:

微盘等权趋势得分 < 0

这一步非常重要。前面三个指标观察的是“市场是否集中”,微盘动量观察的是“集中是否已经伤害到我要持有的资产”。

换句话说,我并不因为市场出现主线就立即退出微盘;只有主线集中、行业宽度恶化,并且微盘自身也给出弱势证据时,退出信号才更可信。

最终方案:四维3/4投票

最终抱团判断的四个信号及阈值

每天对四项条件分别记1票:

抱团维度 当前阈值 代表含义
Top3行业平均分 > 0.20 领涨方向足够强
Top3与行业中位数差 > 0.25 头部明显脱离普通行业
弱势行业比例 > 55% 市场宽度明显恶化
微盘等权得分 < 0 微盘自身已经走弱

四项中至少三项成立,当天才被记为“抱团风险日”:

crowded_score = 0

if top3_score > 0.20:
    crowded_score += 1
if sector_spread > 0.25:
    crowded_score += 1
if weak_sector_ratio > 0.55:
    crowded_score += 1
if micro_score < 0.00:
    crowded_score += 1

crowded = crowded_score >= 3

我没有要求四项必须全部满足,是因为真实市场很少按照教科书方式同时出现所有特征。3/4投票给模型保留了一定容错:微盘可能刚刚转弱,或弱势行业比例暂时停留在阈值附近,但整体结构已经足够危险。

为什么不在信号出现当天马上切换?

任何单日指标都可能受到偶然波动影响。若当天出现抱团就清空微盘,第二天稍有反弹又买回,策略会在边界附近频繁切换。

我的处理方式是加入不对称确认:

  • 抱团风险连续2天成立,才从 DUAL 切换到 ETF_ONLY
  • 恢复条件连续3天成立,才从 ETF_ONLY 回到 DUAL

DUAL与ETF_ONLY之间使用2天抱团确认和3天恢复确认

退出比恢复快,是一种风险偏好:当结构恶化时及时收缩;当行情看似恢复时多观察一天。它并不能避免所有假信号,但可以减少来回交易。

if crowded:
    crowded_days += 1
else:
    crowded_days = 0

if recovered:
    recovery_days += 1
else:
    recovery_days = 0

if regime != "ETF_ONLY" and crowded_days >= 2:
    regime = "ETF_ONLY"
elif regime == "ETF_ONLY" and recovery_days >= 3:
    regime = "DUAL"

恢复信号为什么不是抱团条件的简单反向?

退出与恢复采用不同但相关的四项条件。恢复同样要求至少3票:

恢复维度 当前阈值 含义
微盘得分 > 0 微盘重新转强
微盘相对排名 > 40% 微盘不再处于市场最弱一端
行业分化 < 0.25 × 0.75,即0.1875 头部与普通行业差距收窄
弱势行业比例 < 55% 市场宽度改善

微盘相对排名的算法,是把微盘得分与所有行业得分放在一起,计算其百分位。排名超过40%,意味着微盘不只“勉强为正”,还需要摆脱明显落后的位置。

行业分化恢复阈值使用原阈值的75%,形成一段滞后区。这种不同的进入与退出阈值,通常称为滞后或迟滞设计。它与连续日确认一起,防止状态在临界值附近抖动。

recovery_score = 0

if micro_score > 0.00:
    recovery_score += 1
if micro_rank_pct > 0.40:
    recovery_score += 1
if sector_spread < 0.25 * 0.75:
    recovery_score += 1
if weak_sector_ratio < 0.55:
    recovery_score += 1

recovered = recovery_score >= 3

信号如何真正改变仓位?

抱团判断不是为了在图表上显示红绿灯,而是直接控制微盘资金桶:

市场状态 ETF基础目标 微盘目标 现金缓冲
DUAL 49% 49% 2%
ETF_ONLY 98% 0% 2%

进入 ETF_ONLY 时,程序立即尝试清空微盘持仓。恢复 DUAL 后,微盘模块按照周频调仓安排重新配置股票。

这里还要区分另一个独立模块:ETF自身K线趋势过滤。它使用收盘价、MA20、MA60与MA60斜率进行4票判断,弱趋势时把ETF资金桶减半。行情抱团决定微盘开或关;自身K线过滤决定ETF资金桶使用100%还是50%。两者不是同一个信号。

回测日志中的真实切换案例

2018年1月:头部极强,但微盘略弱

2018-01-26 09:20
Regime DUAL -> ETF_ONLY
crowded_days=2
crowded_score=3
top3=2.972
median=0.001
spread=2.971
weak_ratio=0.39
micro=-0.003
micro_rank=0.38

这次弱势行业比例只有39%,没有超过55%,但Top3强度、行业分化和微盘转负三项成立,正好达到3票,因此连续两天后退出微盘。

这个例子说明3/4投票并不要求所有指标同时恶化。

2020年2月:四项全部命中

2020-02-05 09:20
Regime DUAL -> ETF_ONLY
crowded_days=2
crowded_score=4
top3=0.691
median=-0.141
spread=0.832
weak_ratio=0.89
micro=-0.226
micro_rank=0.31

这次Top3强度、行业差距、弱势行业比例和微盘走弱四项全部成立。日志随后记录清空10只微盘持仓,ETF模块继续运行。

2018年3月:微盘重新占优后恢复

2018-03-12 09:20
Regime ETF_ONLY -> DUAL
recovery_days=3
recovery_score=3
micro=3.405
micro_rank=0.83
weak_ratio=0.11

微盘趋势重新转正,相对行业排名达到83%,弱势行业比例降至11%。恢复条件连续三天成立后,策略重新允许微盘模块运行。

回测给出的结果

当前自身K线0.5组合版在2018年1月1日至2026年6月18日的聚宽回测中取得:

  • 累计收益4493.72%;
  • 年化收益59.44%;
  • 最大回撤19.94%;
  • 夏普比率1.903;
  • 策略波动率0.291。

包含抱团状态切换的0.5自身K线组合版聚宽回测截图

作为对照,完全关闭微盘、始终只运行ETF的版本,在相同区间取得:

  • 累计收益3097.60%;
  • 年化收益52.55%;
  • 最大回撤24.81%;
  • 夏普比率1.486;
  • 策略波动率0.327。

完全关闭微盘的仅ETF版本聚宽回测截图

组合版在这段历史中收益更高、回撤和波动更低,说明“允许微盘参与,但在不利结构下退出”具有研究价值。

不过,这两组回测不能单独证明抱团判断贡献了全部差异。组合版与仅ETF版之间同时相差微盘选股、仓位再平衡和状态切换。要单独评价抱团模块,还需要增加“始终DUAL、不做状态切换”的对照版本。

这套方法的优点

不依赖单一指数

行业等权曲线与微盘等权曲线更接近市场内部真实宽度,不容易被少数大权重股票完全掩盖。

同时观察相对与绝对状态

Top3强度和微盘得分属于绝对趋势;行业差距和微盘百分位属于相对位置;弱势行业占比属于市场宽度。不同维度互相补充。

信号直接对应风险对象

既然策略要决定是否持有微盘,就让微盘自身动量参与判断,而不是只从大盘指数间接推测。

具有可解释性

每一次状态切换都能从日志中看到具体票数、阈值和原因,方便聚宽与QMT逐项核对。

适合低频自动化

日频计算、连续日确认、两种明确状态,运行成本和系统复杂度都相对可控。

仍然存在的问题

阈值可能过拟合

0.20、0.25、55%、40%、2天和3天都是具体参数。优秀的回测结果不代表这些数字在未来仍然最优。更重要的是检查参数附近是否形成稳定平台,而不是某一个点特别突出。

20日窗口较敏感

20日能够较快发现结构变化,但也容易受短期行情影响。可以研究40日或20日+60日双周期,但不应只挑历史收益最高的组合。

等权代理不等于实际可交易指数

行业与微盘曲线由成分股等权收益构造,能够减少大权重影响,但未计入真实买卖冲击、停牌和涨跌停造成的指数可实现性。

行业内部也会抱团

申万一级行业仍然比较宽。同一个行业内部可能只有少数龙头上涨,而等权行业曲线表现一般。未来可以补充行业内部上涨家数或个股收益离散度。

抱团并不一定马上瓦解

资金集中可以持续很久。该信号不是做空抱团行业,而是减少微盘暴露并把资金交给ETF轮动,ETF仍然可能继续持有正在上涨的强势方向。

后续最值得做的实验

为了判断这套方法是否真正稳健,我更愿意做下面几项测试,而不是继续寻找更漂亮的单次回测:

  1. 始终DUAL版:保留ETF与微盘49/49,但关闭抱团切换;
  2. 只看微盘版:只用微盘得分决定开关,观察行业信息的增量;
  3. 三维版:去掉四个信号中的一个,分别做消融;
  4. 阈值稳定性:Top3阈值、Spread阈值和弱势比例在邻近区间网格测试;
  5. 确认天数测试:比较1/2、2/3、3/3等组合的收益、回撤和换手;
  6. 样本外测试:固定参数后继续记录QMT模拟与未来实盘表现;
  7. 成交审计:重点核查进入ETF_ONLY时微盘跌停导致无法退出的情况。

真正有说服力的目标不是证明当前参数“最优”,而是证明它们在合理邻域内都能改善风险,且逻辑能在样本外继续工作。

总结

我对行情抱团的判断,经历了从“看指数”“看最强行业”,到加入行业分化、市场宽度与微盘自身动量的过程。

最终定义可以浓缩成一句话:

少数行业足够强、头部与普通行业明显分化、大量行业走弱,同时微盘自身也在失血;四项至少命中三项并持续两天,就暂时退出微盘。

这不是预测市场顶部的万能公式,而是一套服务于仓位管理的工程规则。它的价值不在于每次都判断正确,而在于用可解释、可记录、可自动执行的方式,避免在市场赚钱效应高度集中时继续机械地满配微盘风险。

警告风险提示

本文是个人量化策略研究记录,不构成投资建议。历史回测不代表未来表现。微盘股存在流动性不足、连续跌停、冲击成本和规则变化风险,任何状态判断都不能保证及时成交或完全避免亏损。

数据与代码依据

  • 抱团判断参数与计算顺序:0.5自身K线最终策略代码;
  • 状态切换实例:聚宽回测日志 log-7.txt
  • 组合版截图:累计收益4493.72%的自身K线0.5回测;
  • 对照截图:累计收益3097.60%的仅ETF无微盘回测;
  • 回测区间:2018年1月1日至2026年6月18日。