同价成交量分布因子 (Same-Price Volume Distribution Factors)

大白话:把一天里收盘价相同的那些分钟的成交量加起来,摊在价格轴上,得到一条「每个价位上成交了多少」的曲线。这条曲线是日内交易员判断买卖点的老工具。

研报的做法是把这张图变成两个可回测的数字:

  • 局部特征(vsa_ratio):成交量最大的那个价格附近是「公允价格区域」,如果收盘价跌穿了这个区域很远,未来会回到区域里
  • 全局特征(vsa_low2max / vsa_high2min):整条曲线的形状像 D、P 还是 b,像 P 预期上涨,像 b 预期下跌

同价成交量是什么

同价成交量 = 日内所有收盘价相同的分钟的成交量之和,按价格排序后得到一个序列。举研报的例子:

2022-01-28,000009.SZ(中国长城)。当日收盘价区间 12.65–13.08 元,共有 42 个不同的分钟收盘价。把每个不同收盘价对应的成交量累加,得到长度为 42 的成交量序列,按价格排序后画成图 15。

直观上看:成交量整体分布在该股日内的低价区域,大部分成交量累计在 12.90–13.00 元区间,其次是 12.80–12.85 元附近。该股日内虽有一定跌幅(日内最低收盘价 12.65 元),但低价区域成交量较少,价格整体在 12.95 元附近震荡,收于 12.83 元。

这个构造把「价」和「量」绑在一起,所以研报称之为「异构」——前几章的异构都只用成交量自身的数据,这里引入了价格维度。

局部特征:成交量支撑点 VSP 与支撑区域 VSA

从图形直觉到严格定义

在绝对稳定的日内波动中,价格围绕某一中心位置对称地交易。此时预期能看到:带最高成交量的价格出现在日内价格的中点附近,而当日极高/低价区间附近仅有少量成交量。

但在实际情况中,由于信息不对称、个股风险与情绪等因素,价格通常不会在过高或过低的位置久留。若没有大量投资者在此价格上成交(没有成交量支撑),日内价格难以在此位置维持,套利者会迅速出击,发出不同于当前价格的买卖单来赚取收益。

所以:成交量累计最大的价格及其区域是判断个股日内公允价格区域的重要依据,过高/过低于该区域的价格难以维持。

由此定义两个量:

  • 成交量支撑点 (Volume Support Point, VSP):当日同价成交量最大的那个价格
  • 成交量支撑区域 (Volume Support Area, VSA):包含支撑点的附近区域

VSP 直接取:VSP = \arg\max_p\ \text{samePriceVol}(p)。

VSA 的算法是:以 VSP 为中心,逐步向外扩展,价格由近及远、成交量由大及小地累加周边成交量的累计值,该累计值与全天成交量总和的比值超过 50% 的最小区域即为 VSA。

还是 000009.SZ:当日最高同价成交量出现在 12.94 元,累计成交量约 261 万股,所以 VSP = 12.94 元。从 VSP 出发按顺序不断累加成交量,直至累计占比超过 50%,得到 VSA_Low = 12.85 元、VSA_High = 13.02 元(图 16 中绿色虚线为上界 13.02,黄色虚线为下界 12.85)。

研报用这个例子说明机制的有效性:该股日内曾短暂超跌,10 点后最低价 12.65 元已跌穿支撑区域,但低价区域并没有成交量支撑,且距离支撑区域较远,于是股价迅速反弹回支撑区域并在此震荡,最终收于 12.81 元,仅略小于 VSA 下界。

因子 vsa_ratio

逻辑:成交量支撑区域是判断个股日内公允价格区域的重要依据,过高/过低于该区域的价格将难以维持。

做法:计算 VSA 的下限与当日收盘价之间的差异。

  • 差异大 = 收盘后处于异常推动状态,当日大幅跌穿公允价格区域,未来预计会回到公允价格区域,出现回弹上涨
  • 因子值为降序排序

全局特征:D / P / b 三种分布形态

除了局部刻画,还可以从整条同价成交量曲线的形状入手。研报沿用交易员的说法,把分布分成三种:

D 型(图 17,600007.SH)

当个股价格暂时处于平衡状态时,同价成交量极可能以 D 型曲线出现。样例中 600007.SH 整体日内价格在 13.70 元左右震荡,震幅较小,成交量支撑点位于日内价格区间的中部,整体以对称形式展开,VSA 通常位于价格中心,表明买家和卖家之间达到平衡。

交易员会把 D 形轮廓解释为缺乏明确方向的震荡或横盘整理——此时无论买家还是卖家都没有更激进的买卖单。耐心的订单流交易者可能会提前在 D 型分布的个股上布下头寸,预期机构参与者建仓。

总结:D 型 = 整体相对平衡,未来走势不明朗。

P 型(图 18,300129.SZ)

当出现不对称交易、或个股分歧较大时,VSA 不会出现在日内价格中点附近,从而造成价格失衡。

P 型出现在「个股价格急剧上涨然后盘整」或「短期急剧下跌但日内整体处于高位」时。图形上,P 型轮廓的下部长而薄(代表对较低价格区域的低认可度),较宽的上部代表交易活动增加,此时价格正逐步接近公允区域。

由于价格有较大浮动,市场对该价格仍有一定分歧,极可能出现小幅震荡;但因成交量的支撑,买卖双方力量会逐步达到平衡。机构投资者可以在此价格积累头寸以推动后续行情,其他交易者则可能利用不稳定性在 VSA 底部附近买入。

总结:P 型通常出现在上涨趋势中或下跌趋势结束时,个股预期上涨。

b 型(图 19,002302.SZ)

与 P 型对应。出现在「个股价格急剧下跌然后盘整」或「短期急剧上涨但整体处于低位」时。

b 型分布的上半部分长而细(该区域成交量低、对该价格认可度低),较宽的底部代表价格再次在买卖双方之间逐步达到平衡。b 型表示该股在找到公允价格之前的一段抛售;此时卖出行为极可能出现在 b 型曲线的下部,一些交易者希望在 VSA 上限附近卖出。

总结:b 型通常出现在下跌趋势中或上涨趋势结束时,个股预期下跌。

两个全局因子

为什么不直接用 VSP:研报说「为了避免成交量支撑点 VSP 一定的随机性,导致结果出现较大的偏差」,所以基于 VSA 的上下限来判断成交量分布的类型。

分析角度 因子名称 逻辑说明 因子顺序
局部特征 vsa_ratio 是否存在异常推动 降序
全局特征 vsa_low2max 是否贴近 P 型(预期上涨) 降序
全局特征 vsa_high2min 是否贴近 b 型(预期下跌) 升序
  • vsa_low2max 值越大 = 成交量支撑区域越接近日内的高价区域 = 分布越接近 P 型 = 预期上涨
  • vsa_high2min 值越小 = 成交量支撑区域越接近日内的低价区域 = 分布越接近 b 型 = 预期下跌

表现

日度 IC 测试(表 13):

因子 IC 均值 IC 标准差 ICIR T 统计量
vsa_ratio 4.07% 7.16% 0.57 24.82
vsa_low2max 4.22% 11.93% 0.35 15.43
vsa_high2min 5.48% 11.64% 0.47 20.54

三类因子的 IC 均值都在 4% 以上。vsa_ratio 相对稳定,ICIR 大于 0.5;因子累计 IC 整体向上且无明显减弱。

日度组合回测(表 14):

因子 多空年化 多头年化 空头年化 年化波动率 夏普比率 最大回撤 胜率 换手率
vsa_ratio 38.29% 16.67% −16.18% 7.63% 5.02 −4.89% 61.40% 30.62%
vsa_low2max 24.20% 13.96% −10.59% 11.47% 2.11 −19.05% 54.99% 22.67%
vsa_high2min 39.19% 17.64% −17.51% 11.57% 3.39 −9.19% 57.88% 23.17%

vsa_ratio 的夏普 5.02、最大回撤只有 4.89%,是三个里最稳的。vsa_low2max 波动率最高(11.47%)、回撤最大(−19.05%)、夏普最低(2.11)。vsa_ratio 与 vsa_high2min 的多空净值长期上升且近几年无明显回撤。

特异性上的问题

vsa_high2min 是六个异构因子里特异性最弱的:与基础高频因子库的相关性均值 0.49、中位数 0.53、最大值 0.88(与已实现方差因子 real_var)。

研报自己给出了解释:「这与该类因子引入收盘价进行异构有关」——引入收盘价意味着这个因子天然沾着价格波动率的信息。这是个诚实的自我诊断。

vsa_ratio 反而最干净:相关性均值 0.33、中位数 0.32、最大值 0.69,也是六个因子里最低的。正交化后 vsa_ratio_Neu 多空年化 29.25%、最大回撤仅 4.98%、夏普 4.89(详见 成交量分桶熵与极大值分布因子 一节)。

与本 wiki 其他页面的接口

  • Value Area and Volume Nodes — 最直接的对照。Market Profile 的 Value Area 是「包含 70% 成交量的价格区间」,本课的 VSA 是「累计成交量占比首次超过 50% 的价格区间」;两者的构造逻辑几乎一样(从一个中心点向外扩、累加成交量直到达到某个比例),差别是阈值 70% vs 50%、扩展方式(Market Profile 两边交替 vs 本课按价格由近及远)、以及本课把结果当作因子而 Market Profile 当作盘后结构线。Market Profile 的 POC 与本课的 VSP 也是同一个想法(成交量最大价位)
  • Market Profile vs Volume Profile — MP 用 TPO 时间计数、VP 用真实成交量;本课的同价成交量是第三种做法:用真实成交量但按分钟收盘价分桶
  • 成交量分布因子 — 前 7 个因子只用成交量自身数据,本族引入了价格维度
  • 成交量分桶熵与极大值分布因子 — 另外三个异构因子

Open Questions

  • vsa_ratio 的具体公式没给。研报只说「计算成交量支撑区域 VSA 的下限与当日的收盘价之间的差异」,是 \text{VSA\_Low} - \text{Close}、(\text{VSA\_Low}-\text{Close})/\text{Close} 还是别的归一化形式,无法确定。上面给的所有绩效数字都建立在未公开的公式上
  • vsa_low2max / vsa_high2min 的定义同样缺失。名字暗示是「VSA 下界到当日最高价」和「VSA 上界到当日最低价」的比值或差值,但「贴近 P 型 / 贴近 b 型」是按什么刻度度量的(价格区间中点?分位数?相关系数?)没有交代
  • 「50%」这个阈值没有敏感性检验。Market Profile 用 70% 是行业惯例,本课用 50% 未做对比
  • VSA 的扩展顺序存在歧义。「价格由近及远,成交量由大及小」——是每个价格按距离排序逐个累加,还是先把相邻价格合并成更大的价格档再累加?后者才更接近「区域」的概念
  • 因子的方向只在个别因子上交代。vsa_ratio 明确说是降序(跌穿公允价区域 → 预期回弹上涨),vsa_low2max / vsa_high2min 的排序方向是照着「P 型预期上涨、b 型预期下跌」推的,但没有做反向检验——如果方向反了会怎样,报告没回答
  • VSP 本身有随机性。研报自己说「VSP 一定的随机性会导致结果出现较大的偏差」,但给出的解法(改用 VSA 上下限)只是绕过,没有量化 VSP 的随机性有多大
  • P 型 / b 型的判别不是离散的。研报说「根据与各个类型的相似度大小以及类型的含义,对股票进行排序」,但相似度怎么算没有定义,实际实现是连续的两个比值因子而非三分类
  • vsa_high2min 与 real_var 相关 0.88,本质上是波动率因子的变体;正交化后它的夏普掉到 2.36、ICIR 掉到 0.36,是四个正交化因子里表现最差的

Sources