3. 拥挤度度量指标(下):因子截面相关性、因子资金流、因子拥挤度综合打分

好,咱们接着聊。上一节讲了时间序列上的拥挤度,这一节我们聚焦截面维度。说白了,就是看同一时刻,不同股票之间,因子暴露是不是“撞车”了。

我个人习惯把截面拥挤度比作“停车场”。你想想看,如果所有车都往同一个车位挤,那肯定出问题。因子也是一样,大家都重仓同一批股票,一旦有人先跑,就是踩踏。

3.1 因子截面相关性

这个指标很直观。我们计算每个股票在某个因子上的暴露值,然后看这些暴露值之间的相关性矩阵。

具体做法是这样的:

  1. 取一个截面(比如今天收盘),拿到所有股票的因子值。
  2. 计算两两股票之间的因子值相关性。
  3. 对整个矩阵求平均,得到一个拥挤度分数。

我在项目中遇到过一个问题:直接用原始因子值算相关性,结果被极端值带偏了。后来我改用秩相关系数(Spearman),效果稳定很多。

核心逻辑:

截面相关性越高,说明因子在选股上的“共识度”越高。共识度太高,就是拥挤的前兆。

嗯,这里要注意一个细节。截面相关性跟因子本身的分布有关。比如市值因子,天然就是右偏的。所以不要只看绝对值,要看历史分位数。

# Python 伪代码示例
import numpy as np
from scipy.stats import spearmanr

def factor_cross_section_corr(factor_values):
    """
    计算因子截面拥挤度
    factor_values: array, 所有股票的因子值
    """
    n = len(factor_values)
    corr_matrix = np.zeros((n, n))
    
    for i in range(n):
        for j in range(i+1, n):
            corr, _ = spearmanr(factor_values[i], factor_values[j])
            corr_matrix[i][j] = corr
            corr_matrix[j][i] = corr
    
    # 取上三角平均值
    upper_tri = corr_matrix[np.triu_indices_from(corr_matrix, k=1)]
    return np.mean(upper_tri)

实战小技巧:

我一般会滚动60个交易日计算这个指标。如果连续5天都在90%分位数以上,我就会开始减仓了。

3.2 因子资金流

这个指标更直接。我们看资金到底在往哪个方向流。

具体来说,就是计算每个因子多空组合的资金净流入。如果多头端资金持续涌入,空头端资金持续流出,那这个因子就处于“过热”状态。

我曾经踩过一个坑:只看资金流入,没看成交量。结果发现有些因子虽然资金流入大,但成交量很小,说明是“虚胖”。后来我加了一个调整项——用资金流除以成交量,得到“资金流强度”。

指标 计算公式 拥挤度信号
资金净流入 多头流入 - 空头流出 持续为正且放大
资金流强度 净流入 / 成交量 超过历史90%分位
资金流集中度 前5%股票的资金流占比 超过70%

你想想看,如果资金流集中度超过70%,说明大家都在赌那几只股票。这时候一旦有个风吹草动,跑都跑不掉。

避坑指南:

我曾经在2021年春节前看到某因子资金流异常放大,但当时觉得“趋势还在”就没动。结果节后直接回撤15%。从那以后,只要资金流强度超过历史95%分位,我无条件减仓一半。

3.3 因子拥挤度综合打分

好了,前面讲了这么多指标,怎么综合起来用?

我的做法是:给每个指标打分,然后加权求和。权重怎么定?我一般用等权,因为说实话,没有哪个指标能永远领先。

打分流程:

  1. 标准化: 把每个指标映射到0-100分。用历史分位数来映射。
  2. 加权: 等权或者根据近期表现动态调整。
  3. 阈值判断: 总分超过70分,进入预警区;超过85分,强制减仓。

我习惯用下面这个框架图来展示整个逻辑,一目了然:

因子拥挤度综合打分框架 因子截面相关性 因子资金流 其他辅助指标 标准化处理(映射到0-100分) 使用历史分位数映射,消除量纲差异 加权综合打分(等权 / 动态权重) 拥挤度综合得分 0-100分,越高越拥挤 ≥85分:强制减仓 ≥70分:预警

这个框架图我用了好几年,每次做因子评审都会过一遍。说白了,就是给因子做个体检,看看有没有“三高”。

综合打分示例:

假设某因子今天的数据:

  • 截面相关性:85分(历史高位)
  • 资金流强度:78分(偏高)
  • 资金流集中度:92分(极度集中)

等权综合得分 = (85 + 78 + 92) / 3 = 85分

嗯,这个分数已经触及强制减仓线了。我会立刻执行减仓操作,不留情面。

我的个人习惯:

综合打分不是每天算,那样太频繁了。我一般每周五收盘后跑一次,然后周末做决策。如果遇到极端行情(比如连续暴跌),会临时加算一次。

最后说一句,拥挤度打分不是万能的。它更像是一个“体检报告”,告诉你哪里可能有问题。但具体怎么治,还得结合你对因子的理解。毕竟,有些因子天生就是拥挤的,比如市值因子。这时候你要看的不是拥挤度绝对值,而是变化趋势。

好了,这一节就到这里。记住:拥挤度不是用来预测收益的,是用来管理风险的。别搞反了。


专注资料整理