我是如何判断行情抱团的
从单一强势指标,到行业分化、市场宽度与微盘动量的四维投票
我为什么要判断“抱团”?
我的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仍然很强,指数表面的繁荣就更可能来自少数方向。
但行业宽度恶化仍不等于微盘一定走弱。行业分类覆盖大中小公司,同一行业内部也可能分化。因此,我最终又加入了策略真正关心的对象——微盘自身。
最终补上:微盘股自己的动量
最终方案构建了一个“微盘等权代理组合”:
- 按流通市值从小到大获取候选股票;
- 剔除科创板、北交所和上市不足120天的股票;
- 最终取流通市值最小的500只;
- 计算这些股票的等权日收益曲线;
- 对该曲线计算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。
退出比恢复快,是一种风险偏好:当结构恶化时及时收缩;当行情看似恢复时多观察一天。它并不能避免所有假信号,但可以减少来回交易。
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。

作为对照,完全关闭微盘、始终只运行ETF的版本,在相同区间取得:
- 累计收益3097.60%;
- 年化收益52.55%;
- 最大回撤24.81%;
- 夏普比率1.486;
- 策略波动率0.327。

组合版在这段历史中收益更高、回撤和波动更低,说明“允许微盘参与,但在不利结构下退出”具有研究价值。
不过,这两组回测不能单独证明抱团判断贡献了全部差异。组合版与仅ETF版之间同时相差微盘选股、仓位再平衡和状态切换。要单独评价抱团模块,还需要增加“始终DUAL、不做状态切换”的对照版本。
这套方法的优点
不依赖单一指数
行业等权曲线与微盘等权曲线更接近市场内部真实宽度,不容易被少数大权重股票完全掩盖。
同时观察相对与绝对状态
Top3强度和微盘得分属于绝对趋势;行业差距和微盘百分位属于相对位置;弱势行业占比属于市场宽度。不同维度互相补充。
信号直接对应风险对象
既然策略要决定是否持有微盘,就让微盘自身动量参与判断,而不是只从大盘指数间接推测。
具有可解释性
每一次状态切换都能从日志中看到具体票数、阈值和原因,方便聚宽与QMT逐项核对。
适合低频自动化
日频计算、连续日确认、两种明确状态,运行成本和系统复杂度都相对可控。
仍然存在的问题
阈值可能过拟合
0.20、0.25、55%、40%、2天和3天都是具体参数。优秀的回测结果不代表这些数字在未来仍然最优。更重要的是检查参数附近是否形成稳定平台,而不是某一个点特别突出。
20日窗口较敏感
20日能够较快发现结构变化,但也容易受短期行情影响。可以研究40日或20日+60日双周期,但不应只挑历史收益最高的组合。
等权代理不等于实际可交易指数
行业与微盘曲线由成分股等权收益构造,能够减少大权重影响,但未计入真实买卖冲击、停牌和涨跌停造成的指数可实现性。
行业内部也会抱团
申万一级行业仍然比较宽。同一个行业内部可能只有少数龙头上涨,而等权行业曲线表现一般。未来可以补充行业内部上涨家数或个股收益离散度。
抱团并不一定马上瓦解
资金集中可以持续很久。该信号不是做空抱团行业,而是减少微盘暴露并把资金交给ETF轮动,ETF仍然可能继续持有正在上涨的强势方向。
后续最值得做的实验
为了判断这套方法是否真正稳健,我更愿意做下面几项测试,而不是继续寻找更漂亮的单次回测:
- 始终DUAL版:保留ETF与微盘49/49,但关闭抱团切换;
- 只看微盘版:只用微盘得分决定开关,观察行业信息的增量;
- 三维版:去掉四个信号中的一个,分别做消融;
- 阈值稳定性:Top3阈值、Spread阈值和弱势比例在邻近区间网格测试;
- 确认天数测试:比较1/2、2/3、3/3等组合的收益、回撤和换手;
- 样本外测试:固定参数后继续记录QMT模拟与未来实盘表现;
- 成交审计:重点核查进入ETF_ONLY时微盘跌停导致无法退出的情况。
真正有说服力的目标不是证明当前参数“最优”,而是证明它们在合理邻域内都能改善风险,且逻辑能在样本外继续工作。
总结
我对行情抱团的判断,经历了从“看指数”“看最强行业”,到加入行业分化、市场宽度与微盘自身动量的过程。
最终定义可以浓缩成一句话:
少数行业足够强、头部与普通行业明显分化、大量行业走弱,同时微盘自身也在失血;四项至少命中三项并持续两天,就暂时退出微盘。
这不是预测市场顶部的万能公式,而是一套服务于仓位管理的工程规则。它的价值不在于每次都判断正确,而在于用可解释、可记录、可自动执行的方式,避免在市场赚钱效应高度集中时继续机械地满配微盘风险。
本文是个人量化策略研究记录,不构成投资建议。历史回测不代表未来表现。微盘股存在流动性不足、连续跌停、冲击成本和规则变化风险,任何状态判断都不能保证及时成交或完全避免亏损。
数据与代码依据
- 抱团判断参数与计算顺序:0.5自身K线最终策略代码;
- 状态切换实例:聚宽回测日志
log-7.txt; - 组合版截图:累计收益4493.72%的自身K线0.5回测;
- 对照截图:累计收益3097.60%的仅ETF无微盘回测;
- 回测区间:2018年1月1日至2026年6月18日。