成交量分布因子 (Volume Distribution Factors)
大白话:不看你买不买、卖不卖,只看这一天里成交量是怎么分布的——是均匀铺在 240 分钟上,还是集中在某一小段时间里。同一份分钟成交量数据,换一个视角(对数、变化率、累计)再配一个统计量(偏度、峰度、厚尾、均值),就能得到 7 个彼此相关性不高的因子。
这页覆盖研报第 2 章的7 个常见成交量分布因子。第 3 章的两个异构族(分桶熵、极大值分布)见 成交量分桶熵与极大值分布因子,第 4 章的三个同价成交量因子见 同价成交量分布因子。
为什么不能直接用分钟成交量
分钟级成交量有两个绕不开的问题,研报第 2.1 节讲得很清楚:
一是稀疏。 流动性差的股票很多分钟根本没有撮合,样本缺失且自相关更强,参数估计会失真(Hasbrouck, 1991)。
二是日内 U 型周期。 开盘和收盘附近的成交量显著高于其他时段(Wood, McInish & Ord, 1985 最早记录;Admati & Pfleiderer, 1988 给出解释:非知情交易者喜欢扎堆交易,减少遇到知情交易者时的逆向选择成本)。这意味着分钟成交量不是独立同分布的,直接算均值方差没有意义。
所以办法是两步:先把原始成交量「异构」成不稀疏的数据,再用不依赖分布假设的非参统计量去描述它。
通用构造框架
设 \text{vol}_{New} 是异构后的分钟成交量时间序列向量,g 是基于方法 f 从它算出的指标。研报写为:
g = f\big(\mathrm{Reorder}(\boldsymbol{vol}_{New})\big) = f(\boldsymbol{vol}_{New})
等号右边成立的前提是:g 对 \text{vol}_{New} 的时间位置不敏感——先把分钟重新排序再算,结果必须一样。这正是「用分布统计量而不是用时序统计量」的原因:偏度、峰度、分位数占比都与分钟先后无关,U 型周期的影响因此被削掉。
时序上再做一个操作:对高频指标 F 取近 n_s 日的均值与标准差(研报里 n_s = 20):
F\_Mean_{Di} = \frac{1}{n_s}\sum_{j=1}^{n_s} F_j
F\_STD_{Di} = \frac{1}{n_s}\sum_{j=1}^{n_s}\left(F_j - \frac{1}{n_s}\sum_{j=1}^{n_s} F_j\right)^2
日频调仓,用 F\_Mean 或 F\_STD 做因子。
三个族、七个因子
族一:对数成交量(3 个)
成交量近似服从对数正态分布,所以直接取对数:
\text{vol}_{New} = \text{logvol} = \log(\text{volume})
| 因子名 | 构造方法 |
|---|---|
logvol_skew |
对数成交量偏度 |
logvol_90tail |
对数成交量厚尾:90% 分位数以上占比 |
logvol_10tail |
对数成交量厚尾:10% 分位数以下占比 |
厚尾占比是最直观的「量是否集中在少数几分钟」:如果全天成交量有 10% 以上集中在 90 分位线以上,说明这只股票全天只有少数几分钟在放量,典型的消息驱动形态。
族二:成交量变化率(2 个)
稀疏股票的分钟序列没法直接算变化率(上一分钟是 0 或缺失)。研报的做法是把分钟重新切片——改成 15 分钟一根——来修正稀疏问题,再算变化率。
| 因子名 | 构造方法 |
|---|---|
volroc_skew |
15 分钟成交量变化率偏度 |
volroc_kurt |
15 分钟成交量变化率峰度 |
偏度看激增(单侧长尾 = 有几次暴量),峰度看稳定(双侧尖峰厚尾 = 变化率忽大忽小)。
族三:累计成交量(2 个)
U 型周期是最难剔除的:既不能简单按时间分区做比值(那样每个因子的横截面差异几乎全是市场共性),也必须保留日内变化趋势。累计化正好两头兼顾——累加之后序列单调递增,U 型被拉平,但形状信息还在。
| 因子名 | 构造方法 |
|---|---|
cumsumvol_mean |
累计成交量均值 |
cumsumvol_std |
累计成交量标准差 |
表现
日度 IC 测试(表 5):
| 因子 | IC 均值 | IC 标准差 | ICIR | T 统计量 |
|---|---|---|---|---|
logvol_skew |
3.03% | 6.68% | 0.45 | 19.80 |
logvol_90tail |
2.90% | 5.01% | 0.58 | 25.26 |
logvol_10tail |
2.20% | 5.73% | 0.38 | 16.74 |
volroc_skew |
2.06% | 4.73% | 0.44 | 18.99 |
volroc_kurt |
1.98% | 4.50% | 0.44 | 19.19 |
cumsumvol_mean |
3.04% | 8.20% | 0.37 | 16.18 |
cumsumvol_std |
2.25% | 8.04% | 0.28 | 12.21 |
7 个因子的 IC 均值都在 2% 上下,ICIR 最高的是 logvol_90tail(0.58)。
日度组合回测(表 6,回测区间 2014-09-01 — 2022-07-01,剔除不在市、涨跌停与特殊处理股票,多空为两组按因子值加权):
| 因子 | 多空年化 | 多头年化 | 空头年化 | 年化波动率 | 夏普比率 | 最大回撤 | 胜率 | 换手率 |
|---|---|---|---|---|---|---|---|---|
logvol_skew |
41.92% | 20.49% | −15.62% | 6.77% | 6.19 | −5.67% | 63.81% | 18.89% |
logvol_90tail |
34.63% | 22.28% | −9.55% | 5.39% | 6.42 | −4.86% | 66.70% | 24.86% |
logvol_10tail |
19.69% | 17.06% | −3.07% | 5.60% | 3.51 | −6.94% | 58.67% | 29.83% |
volroc_skew |
22.40% | 14.70% | −6.24% | 4.48% | 5.00 | −5.50% | 63.71% | 31.59% |
volroc_kurt |
21.79% | 14.44% | −6.04% | 4.28% | 5.09 | −5.41% | 64.71% | 28.48% |
cumsumvol_mean |
35.56% | 15.60% | −16.12% | 8.92% | 3.98 | −12.41% | 59.72% | 26.28% |
cumsumvol_std |
19.70% | 13.06% | −6.83% | 7.86% | 2.51 | −16.33% | 55.41% | 21.91% |
7 个因子的多空净值长期上升,近几年无明显回撤。多头年化最高的是 logvol_90tail(22.28%),夏普最高也是它(6.42);logvol_skew 多空 41.92%、夏普 6.19。
因子之间的相关性:同一个数据,不同视角
表 7 给出 7 个因子的时序相关性矩阵,几个值得注意的地方:
- 组内相关性低:
logvol_10tail对volroc_skew是 −0.10,logvol_skew对volroc_kurt是 −0.10。也就是说对数族和变化率族几乎不重复。 - 同族内部高相关:
volroc_skew对volroc_kurt是 0.95,cumsumvol_mean对cumsumvol_std是 0.95——每个族里的两个因子测的基本是同一件事。 - 跨族中等相关:
logvol_10tail对cumsumvol_mean是 0.66、对cumsumvol_std是 0.70。
研报第 2.3 节的结论:除累计成交量因子外,各因子的组内相关性都低。即使用的是同一份成交量数据,经过不同的异构方式、不同的分布函数,得到的也是不同的信息。
与前序 14 个收益率分布因子的相关性(表 6 之后的箱型图):各成交量因子的相关性上四分位数均小于 0.6,均值与中位数均小于 0.4,最大值基本在 0.7 以下。其中 logvol_skew 相关性均值约 0.37、中位数约 0.34、最大 0.62(与已实现方差因子 real_var)。换一份数据(量而不是价)确实带来额外 Alpha。
与本 wiki 其他页面的接口
- 订单不平衡分布 — 同样是「分布本身有信息」的思路,但那边是订单簿方向上的不平衡,这边是成交量在时间上的分布形态
- Value Area and Volume Nodes — Market Profile 体系也用「成交量在价格上的分布」,但那边关注价格维度的接受/拒绝,这边关注时间维度
- 市场深度与冲击反比 — 稀有的成交量放大往往伴随价格冲击,与本页「量分布不均 = 有信息到来」的解读方向一致
Open Questions
cumsumvol的异构细节没写清。研报只说「从时间维度出发对成交量进行异构,同时其异构的方式需要保留成交量的日内变化趋势,并尽量避免周期效应」,然后给出「累计成交量均值 / 标准差」两个名字。是先算日内累计曲线再取该曲线的均值/标准差,还是别的算法,无法从文本确定- 分位数取等宽还是等频未说明。对数成交量的 90% 分位占比这个统计量对分桶方式敏感
- 厚尾因子的方向没有交代。
logvol_90tail因子值大表示成交量更集中于少数几分钟,研报没说这该看多还是看空,只给绩效数字 F\_STD用了 20 日、vol_max用了 15 日,窗口不同但没有解释为什么,也未做敏感性检验- 与已实现方差因子相关性最高(
logvol_skew0.62、vsa_high2min0.69、vsa_ratio0.68),说明这批因子有一部分信息其实是波动率信息的影子
Sources
- summaries/202208-xingye-volume-distribution-alpha/202208-xingye-volume-distribution-alpha — 兴业金工《高频研究系列四—成交量分布中的 Alpha》,2022-08-29