6、成交量分布(Volume Profile):成交量分布图构建、价值区域(VA)计算、POC识别、高成交量节点(HVN)与低成交量节点(LVN)
成交量分布,英文叫 Volume Profile,简称 VP。这东西说白了,就是把成交量按价格切开来展示。不是按时间,是按价格。
我刚开始做订单流系统时,对 VP 的理解也停留在「好看」的层面。直到有一次做股指期货的回测,发现单纯靠时间维度的成交量指标,信号总是慢半拍。后来把 VP 加进去,整个策略的胜率提升了将近 12 个百分点。嗯,从那以后,VP 就成了我系统里的标配模块。
6.1 成交量分布图构建
构建 VP 图,核心就两步:切价格区间,然后统计每个价格区间的成交量。
价格区间怎么切?我个人习惯用 Tick 数据来切。每个 Tick 都有成交价和成交量,我们把价格四舍五入到最小变动价位,然后累加成交量。
举个例子,假设最小变动价位是 0.5:
// 伪代码:构建成交量分布
class VolumeProfile {
constructor(tickSize = 0.5) {
this.tickSize = tickSize;
this.profile = new Map(); // 价格 -> 成交量
}
addTrade(price, volume) {
// 将价格对齐到最小变动价位
const alignedPrice = Math.round(price / this.tickSize) * this.tickSize;
const current = this.profile.get(alignedPrice) || 0;
this.profile.set(alignedPrice, current + volume);
}
build(trades) {
for (const trade of trades) {
this.addTrade(trade.price, trade.volume);
}
return this.profile;
}
}
这里有个坑,我踩过。如果你用分钟级 K 线数据来构建 VP,精度会差很多。因为一根 K 线里可能有多个价格成交,你没法知道每个价格具体成交了多少。所以,构建 VP 一定要用逐笔成交数据,这是底线。
6.2 价值区域(VA)计算
价值区域,Value Area,简称 VA。它代表的是「大部分成交量发生的价格区间」。通常我们用 VA 来识别市场认可的合理价格范围。
计算 VA 的标准方法是:从 POC 开始,向两边扩展,直到累计成交量达到总成交量的 70%。
具体步骤:
- 先找到 POC(成交量最大的价格)
- 从 POC 向上和向下各取一个价格节点
- 比较上下两个节点的成交量,取较大的那个
- 重复第 3 步,直到累计成交量 ≥ 总成交量的 70%
function calculateVA(profile, totalVolume) {
const poc = findPOC(profile);
const sortedPrices = [...profile.keys()].sort((a, b) => a - b);
const pocIndex = sortedPrices.indexOf(poc);
let upperIndex = pocIndex;
let lowerIndex = pocIndex;
let cumulativeVolume = profile.get(poc);
const targetVolume = totalVolume * 0.7;
while (cumulativeVolume < targetVolume) {
const upperVol = profile.get(sortedPrices[upperIndex + 1]) || 0;
const lowerVol = profile.get(sortedPrices[lowerIndex - 1]) || 0;
if (upperVol >= lowerVol) {
upperIndex++;
cumulativeVolume += upperVol;
} else {
lowerIndex--;
cumulativeVolume += lowerVol;
}
}
return {
vaHigh: sortedPrices[upperIndex],
vaLow: sortedPrices[lowerIndex],
poc: poc
};
}
VA 的阈值不一定是 70%。我见过有人用 68%,也有人用 72%。我个人习惯用 70%,因为这是市场微观结构里一个比较公认的平衡点。你想想看,如果阈值设得太高,VA 区间会变得很宽,失去参考意义;设得太低,又容易漏掉关键价格区域。
6.3 POC(Point of Control)识别
POC,全称 Point of Control,就是成交量最大的那个价格。它是整个 VP 图里最显眼的那个「山峰」。
识别 POC 其实很简单:遍历所有价格节点,找到成交量最大的那个。
function findPOC(profile) {
let pocPrice = null;
let maxVolume = 0;
for (const [price, volume] of profile) {
if (volume > maxVolume) {
maxVolume = volume;
pocPrice = price;
}
}
return pocPrice;
}
但这里有个细节:如果多个价格节点的成交量相同怎么办?
我遇到过这种情况,尤其是在流动性极好的品种上。我的处理方式是:取这些价格的平均值,或者取中间的那个价格。具体用哪个,取决于你的策略风格。做趋势跟踪的,倾向于取中间价;做均值回归的,可能更关注两端的 POC。
POC 的意义在于:它是市场参与者「最认可」的价格。价格在 POC 上方运行时,多头占优;在 POC 下方运行时,空头占优。这个逻辑很简单,但非常实用。
6.4 高成交量节点(HVN)与低成交量节点(LVN)
HVN 和 LVN,这两个概念是 VP 分析里的进阶内容。
HVN(High Volume Node):成交量显著高于平均水平的节点。它代表市场在这个价格上达成了大量交易,通常意味着这里有强支撑或强阻力。
LVN(Low Volume Node):成交量显著低于平均水平的节点。它代表市场在这个价格上「跳过去了」,没有太多交易。价格再次经过这里时,阻力会很小,容易快速通过。
怎么判断「显著」?我一般用标准差:
function classifyNodes(profile) {
const volumes = [...profile.values()];
const avg = volumes.reduce((a, b) => a + b, 0) / volumes.length;
const std = Math.sqrt(
volumes.reduce((sum, v) => sum + (v - avg) ** 2, 0) / volumes.length
);
const hvnThreshold = avg + std;
const lvnThreshold = avg - std * 0.5;
const result = { hvn: [], lvn: [] };
for (const [price, volume] of profile) {
if (volume >= hvnThreshold) {
result.hvn.push({ price, volume });
} else if (volume <= lvnThreshold) {
result.lvn.push({ price, volume });
}
}
return result;
}
这里有个经验:LVN 的阈值我设得比 HVN 宽松一些。因为低成交量节点本身数量就少,如果阈值太严格,可能一个都识别不出来。我曾经在黄金期货上试过,把 LVN 阈值设成 avg - std,结果一个 LVN 都没找到。后来改成 avg - std * 0.5,才抓到几个关键的「真空区」。
实战应用:
- HVN 区域:适合做反转策略,价格到了 HVN 附近,大概率会停顿或反转
- LVN 区域:适合做突破策略,价格突破 LVN 后,往往会快速移动
- POC + VA:判断当前价格是否处于「合理估值」区间
6.5 知识体系总览
下面这张图,是我自己整理 VP 模块时画的。它把整个成交量分布的知识结构串起来了:
从这张图能看出来,VP 的四个核心模块是层层递进的。先有分布图,才能算 VA 和 POC,最后才能识别 HVN 和 LVN。每个模块都有它独特的应用场景,组合起来就是一个完整的成交量分析框架。
我曾经在构建这套系统时,踩过一个坑:把 VP 模块做得太复杂,加了各种平滑、滤波、归一化。结果回测效果反而变差了。后来我意识到,VP 的核心价值在于「原始数据的呈现」,而不是过度加工。你想想看,成交量本身就是最原始的市场行为,加太多人工处理,反而会丢失信息。
所以,我的建议是:先把基础的 VP 图跑通,把 POC 和 VA 算准,再考虑 HVN 和 LVN 的识别。一步一步来,别想一口吃成胖子。
避坑指南:
- 数据源:一定要用逐笔成交数据,别用 K 线估算
- 价格对齐:最小变动价位要设对,否则分布图会「歪」
- VA 阈值:70% 是基准,但可以根据品种微调
- HVN/LVN 阈值:用标准差,别用固定值
好了,成交量分布这部分就讲到这里。记住,VP 不是万能的,但它能给你一个独特的视角——从价格维度看成交量。这个视角,很多传统指标给不了你。
交易系统化学习资料 微信Strategy888888