第二章:成交量分布——Volume Profile基础、POC、VA、高成交量节点
各位同学,咱们今天聊点硬核的。成交量分布,英文叫Volume Profile,简称VP。这东西在订单流交易里,可以说是地基一样的存在。
我刚开始做量化那会儿,用的还是传统的成交量柱状图。一根根柱子竖在那里,看着挺热闹,但你仔细想想——它只告诉你在某个时间单位里成交了多少,却没说这些成交量是在什么价位上发生的。说白了,它丢掉了价格这个维度。
而Volume Profile,就是把成交量按价格水平重新排列。它回答了一个更本质的问题:市场在哪个价位上最活跃?
2.1 Volume Profile的核心逻辑
咱们先看一个简单的例子。假设某只股票在一天内,价格在10元到15元之间波动。传统成交量图会告诉你:9:30到10:00成交了100万股,10:00到10:30成交了80万股……但你看不出10.5元这个价位到底成交了多少。
Volume Profile的做法是:把一天拆成若干个价格区间(通常叫“价格格子”,每个格子0.1元或0.5元),然后统计每个价格格子上总共成交了多少股。
嗯,这里要注意:Volume Profile不关心时间顺序,只关心价格与成交量的对应关系。
核心公式:
每个价格格子的成交量 = 在该价格水平上所有成交的总和
说白了,就是把时间轴压扁,只看价格轴上的成交量分布。
2.2 POC——控制点
POC,全称Point of Control,翻译过来就是“控制点”。它指的是在Volume Profile中,成交量最大的那个价格水平。
我个人习惯把POC看作市场的“重心”。为什么?因为在这个价位上,买卖双方达成了最多的共识。你想想看,如果大部分交易都发生在12.5元这个位置,那说明什么?说明多空双方都认为12.5元是一个合理的价格。
我在项目中遇到过这样一个案例:某期货合约在POC上方运行了整整三天,突然有一天价格跌破了POC,随后两天内暴跌了5%。为什么?因为POC一旦被跌破,之前在这个价位买入的多头全部被套牢,他们会成为后续的抛压来源。
实战技巧:
POC是动态的。我建议你至少观察三个时间维度的POC:
- 日线POC:判断当天的主要价值区间
- 周线POC:判断中期趋势的支撑/阻力
- 月线POC:判断长期的价值中枢
当多个周期的POC重合时,这个位置的支撑或阻力会非常强。
2.3 VA——价值区域
价值区域,Value Area,简称VA。它指的是成交量最集中的那个价格区间,通常包含整个Volume Profile中70%的成交量。
怎么算?很简单:
- 找到POC
- 从POC开始,向上下两个方向累加成交量
- 直到累加的成交量达到总成交量的70%
- 这个范围就是价值区域
价值区域的上边界叫VAH(Value Area High),下边界叫VAL(Value Area Low)。
我曾经犯过一个错误:只看POC,忽略了VA的宽度。有一次POC在100元,但VA的宽度只有0.5元,说明市场在这个极窄的区间内达成了高度一致。结果第二天价格直接跳空突破,我因为没有提前准备,错过了最佳入场点。
避坑指南:
VA的宽度很重要。宽度越窄,说明市场分歧越小,一旦突破,力度往往很大。宽度越宽,说明多空博弈激烈,突破后容易反复。
2.4 高成交量节点
高成交量节点,High Volume Node,简称HVN。它指的是成交量显著高于平均水平的那些价格格子。
注意,HVN和POC的区别:POC只有一个,是成交量最大的那个点。而HVN可以有多个,只要成交量超过某个阈值(比如平均成交量的1.5倍或2倍),都可以算作HVN。
高成交量节点在实战中非常有用:
- 作为支撑/阻力:价格回到HVN附近时,往往会有反应
- 作为突破确认:价格放量突破HVN,说明趋势可能延续
- 作为止损参考:如果价格跌破HVN后无法收回,说明多头已经放弃抵抗
我记得有一次做螺纹钢的日内交易,价格在3800元附近形成了一个HVN,成交量是平均水平的2.3倍。我当时判断这个位置有强支撑,就在3805元挂了多单。结果价格最低打到3801元,然后反弹到3850元。那一单赚了45个点。
关键区别总结:
| 概念 | 定义 | 实战用途 |
|---|---|---|
| POC | 成交量最大的价格 | 价值中枢、多空平衡点 |
| VA | 70%成交量所在的价格区间 | 判断市场是否“合理” |
| HVN | 成交量显著偏高的价格 | 支撑/阻力、突破确认 |
2.5 用Python计算Volume Profile
光说不练假把式。咱们用Python来实现一个简单的Volume Profile计算。
import pandas as pd
import numpy as np
def calculate_volume_profile(df, price_step=0.5):
"""
计算Volume Profile
参数:
df: DataFrame,必须包含'price'和'volume'两列
price_step: 价格格子的步长
返回:
vp_df: Volume Profile数据
poc: 控制点价格
va_high: 价值区域上边界
va_low: 价值区域下边界
"""
# 将价格离散化为格子
df['price_bin'] = np.floor(df['price'] / price_step) * price_step
# 按价格格子汇总成交量
vp = df.groupby('price_bin')['volume'].sum().reset_index()
vp.columns = ['price', 'volume']
vp = vp.sort_values('price').reset_index(drop=True)
# 找到POC
poc_idx = vp['volume'].idxmax()
poc = vp.loc[poc_idx, 'price']
# 计算价值区域(70%成交量)
total_volume = vp['volume'].sum()
target_volume = total_volume * 0.7
# 从POC向上下累加
cum_volume = vp.loc[poc_idx, 'volume']
upper_idx = poc_idx
lower_idx = poc_idx
while cum_volume < target_volume:
# 向上扩展
if upper_idx + 1 < len(vp):
upper_idx += 1
cum_volume += vp.loc[upper_idx, 'volume']
# 向下扩展
if cum_volume < target_volume and lower_idx - 1 >= 0:
lower_idx -= 1
cum_volume += vp.loc[lower_idx, 'volume']
# 如果已经到边界,退出
if upper_idx == len(vp) - 1 and lower_idx == 0:
break
va_high = vp.loc[upper_idx, 'price'] + price_step
va_low = vp.loc[lower_idx, 'price']
# 标记高成交量节点(成交量 > 平均值的1.5倍)
avg_volume = vp['volume'].mean()
vp['is_hvn'] = vp['volume'] > avg_volume * 1.5
return vp, poc, va_high, va_low
# 使用示例
# 假设df是包含price和volume的DataFrame
# vp_df, poc, vah, val = calculate_volume_profile(df, price_step=0.5)
# print(f"POC: {poc}, VAH: {vah}, VAL: {val}")
这段代码的核心逻辑其实就三步:离散化价格、按价格汇总成交量、从POC向上下扩展找价值区域。你想想看,是不是很简单?
个人建议:
price_step的选择很关键。步长太小,数据会稀疏,POC不明显;步长太大,会丢失细节。我一般用ATR(平均真实波幅)的1/10作为步长,效果不错。
2.6 知识体系结构图
下面这张图,把本章的核心概念串起来了。你可以把它当作一个思维导图来看。
嗯,这张图把POC、VA、HVN以及它们之间的关联都画出来了。你保存下来,以后做分析时可以参考。
好了,这一章的内容就到这里。成交量分布是订单流分析的基础,理解了它,后面的订单流失衡、Delta分析等内容才能学得扎实。记住一句话:价格是表象,成交量是本质。
公众号:蓝海数据掘金营,微信deep3321