2、因子拥挤度的度量方法
聊完了拥挤度的定义和危害,咱们得动真格的了——怎么量化它?
说实话,这个问题我琢磨了好几年。早期做多因子选股时,我吃过一次大亏:某个因子明明历史回测很漂亮,实盘却突然失效。后来复盘才发现,是太多资金挤进去了。从那以后,我就把拥挤度度量当成因子研究的必修课。
目前主流的度量方法,我归纳为四类:基于持仓、基于收益率、基于交易量,以及多维度综合。咱们一个一个来看。
2.1 基于持仓的拥挤度度量
这个方法最直观。你想想看,如果所有人都买了同一只股票,那这只股票是不是很拥挤?
具体怎么算呢?我常用两个指标:
- 持仓集中度:前N大机构持有该股票的比例。比例越高,说明越拥挤。
- 基金重叠度:同时持有该股票的基金数量。数量越多,拥挤度越高。
举个例子,我曾在某只消费股上看到基金重叠度从30家飙到120家,三个月后股价就崩了。嗯,这就是典型的拥挤踩踏。
核心公式:
拥挤度 = 持有该股票的基金数量 / 全市场基金总数
阈值建议:超过20%就要警惕,超过30%建议减仓。
我的经验:持仓数据有滞后性,一般滞后一个季度。所以用这个方法时,要结合最新季报和估算数据。我曾经因为只看年报数据,错过了最佳减仓时机。
2.2 基于收益率的拥挤度度量
这个方法更灵敏。为什么?因为价格是实时更新的。
核心逻辑是:当某个因子被过度追捧时,它的超额收益会快速衰减,甚至变成负值。说白了,就是赚钱效应没了。
我常用的指标有两个:
- 因子收益率的滚动相关性:如果因子收益率与市场收益率的相关性突然升高,说明大家都在用这个因子,拥挤度上升。
- 因子收益率的波动率:拥挤时,因子收益率的波动会变大,因为一旦有风吹草动,大家会一起跑。
具体计算时,我习惯用过去60个交易日的滚动窗口:
# Python伪代码示例
import pandas as pd
import numpy as np
def factor_crowding_ratio(factor_return, market_return, window=60):
# 计算滚动相关性
rolling_corr = factor_return.rolling(window).corr(market_return)
# 计算滚动波动率
rolling_vol = factor_return.rolling(window).std()
# 综合拥挤度
crowding = rolling_corr * rolling_vol
return crowding
注意:这个方法对数据频率很敏感。日频数据噪音大,我建议用周频数据。曾经有一次我用日频数据算出来拥挤度很高,结果发现只是短期噪音,差点误判。
2.3 基于交易量的拥挤度度量
交易量是另一个好指标。为什么?因为拥挤意味着交易活跃。
我常用的指标是:
- 换手率异常度:当前换手率与历史均值的比值。比值超过2倍,说明交易异常活跃,可能拥挤。
- 成交量集中度:前5%的交易量占总成交量的比例。比例越高,说明资金越集中。
举个例子,某只科技股平时换手率只有2%,突然连续一周换手率超过8%。我当时就觉得不对劲,查了一下,果然有大量量化基金在追这个因子。后来我果断减仓,躲过了一波回调。
实战阈值:
| 指标 | 正常区间 | 警惕区间 | 危险区间 |
|---|---|---|---|
| 换手率异常度 | 0.5 - 1.5 | 1.5 - 2.0 | > 2.0 |
| 成交量集中度 | < 20% | 20% - 30% | > 30% |
2.4 多维度综合度量
单一指标都有缺陷。持仓数据滞后,收益率数据噪音大,交易量数据容易被操纵。所以,我建议综合使用。
我个人习惯的做法是:
- 先分别计算三个维度的拥挤度分数(标准化到0-100分)
- 然后按权重加权平均:持仓占40%,收益率占30%,交易量占30%
- 最后得到一个综合拥挤度分数
为什么持仓权重更高?因为持仓数据虽然滞后,但最可靠。收益率和交易量虽然灵敏,但容易受短期因素干扰。
避坑指南:我曾经在综合度量时,给三个维度各33%的权重。结果发现收益率维度噪音太大,导致综合分数忽高忽低。后来调整为持仓40%、收益率30%、交易量30%,效果好了很多。
下面这张图,是我总结的拥挤度度量框架:
最后说一句,没有完美的度量方法。我建议你根据自己因子的特点,选择最合适的组合。比如,高频因子更适合用收益率和交易量,低频因子更适合用持仓数据。
嗯,这部分内容就到这里。记住,拥挤度不是用来预测涨跌的,而是用来管理风险的。别把它当成择时工具,否则你会失望的。