7、Volume Profile 结构分析:识别高成交量节点(HVN)与低成交量节点(LVN),构建交易区间
说实话,很多做订单流的朋友一开始都盯着逐笔成交看。但我觉得,Volume Profile 才是真正能让你看清市场骨架的东西。它不关心时间,只关心价格。说白了,就是告诉你——哪个价格区间,大家最愿意交易。
我个人习惯把 Volume Profile 比作市场的「地基」。地基打得牢,价格就稳;地基是空的,价格就容易塌。今天我们就来拆解这个地基,看看怎么用 HVN 和 LVN 来构建你的交易区间。
HVN(高成交量节点):价格在这里停留久,成交量大,是市场的「价值区域」。
LVN(低成交量节点):价格在这里一掠而过,成交量小,是市场的「真空地带」。
7.1 什么是 HVN 和 LVN?
先别急着上代码。我们得先理解这两个东西到底在说什么。
HVN(High Volume Node),高成交量节点。你想想看,如果某个价格上成交了巨量,说明什么?说明买卖双方在这个价格上达成了高度共识。买方觉得值,卖方也愿意卖。这个价格就是市场的「价值中枢」。价格离开这里后,往往还会回来。
LVN(Low Volume Node),低成交量节点。这个更有意思。价格在这里几乎没怎么停留,就像一阵风刮过去。为什么会这样?要么是跳空,要么是快速突破。这种地方没有支撑,也没有阻力。价格一旦再次触及,很容易直接穿过。
嗯,这里要注意:LVN 不是没用,恰恰相反,它是交易员最该盯的地方。 因为价格从 HVN 出发,冲向 LVN 时,速度最快,利润空间也最大。
7.2 如何计算 Volume Profile?
计算其实不复杂。我们把价格分成一个个小格子(比如每 1 个 tick 或每 0.5 美元),然后统计每个价格上成交了多少手。
下面是我常用的一个 Python 实现。代码不长,但很实用。
import pandas as pd
import numpy as np
def calculate_volume_profile(df, price_step=0.5):
"""
计算 Volume Profile
:param df: 包含 'price' 和 'volume' 列的 DataFrame
:param price_step: 价格分档步长
:return: 每个价格区间的成交量
"""
# 将价格离散化到最近的 price_step 整数倍
df['price_bin'] = np.round(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)
return vp
# 示例用法
# 假设你有一份逐笔成交数据
# data = pd.read_csv('trades.csv')
# vp_result = calculate_volume_profile(data, price_step=1.0)
# print(vp_result.head())
这段代码的核心就两步:离散化价格,然后按价格聚合成交量。你可能会问,price_step 设多少合适?我个人习惯用 1 个 tick 或者 0.5 美元。太小了噪音大,太大了看不清结构。
7.3 识别 HVN 和 LVN
有了 Volume Profile 数据,接下来就是找 HVN 和 LVN。方法很简单:
- HVN:成交量最大的那个节点,或者成交量超过某个阈值(比如平均成交量的 2 倍)的节点。
- LVN:成交量最小的节点,或者成交量低于某个阈值(比如平均成交量的 0.3 倍)的节点。
我一般会画一张图,一眼就能看出来。下面这个函数可以帮你标记出 HVN 和 LVN。
def identify_hvn_lvn(vp_df, volume_threshold_high=2.0, volume_threshold_low=0.3):
"""
识别 HVN 和 LVN
:param vp_df: 包含 'price' 和 'volume' 列的 DataFrame
:param volume_threshold_high: 高成交量倍数阈值
:param volume_threshold_low: 低成交量倍数阈值
:return: 标记后的 DataFrame
"""
avg_volume = vp_df['volume'].mean()
vp_df['type'] = 'normal'
vp_df.loc[vp_df['volume'] >= avg_volume * volume_threshold_high, 'type'] = 'HVN'
vp_df.loc[vp_df['volume'] <= avg_volume * volume_threshold_low, 'type'] = 'LVN'
return vp_df
# 示例
# vp_marked = identify_hvn_lvn(vp_result)
# print(vp_marked[vp_marked['type'] != 'normal'])
7.4 构建交易区间
有了 HVN 和 LVN,交易区间就呼之欲出了。我通常这样构建:
- 找到主 HVN:成交量最大的那个节点,作为区间的「价值中心」。
- 找到上下 LVN:在主 HVN 上方和下方,找到最近的 LVN。这些是潜在的突破目标。
- 定义区间边界:主 HVN 上下各一个标准差(或者用肉眼观察),作为区间的上下轨。
举个例子。假设主 HVN 在 100 美元,上方最近的 LVN 在 105 美元,下方最近的 LVN 在 95 美元。那么交易区间就是 95-105 美元。价格在区间内震荡时,靠近 HVN 做多,靠近边界做空。一旦突破 LVN,就顺势追。
下面这张图展示了 Volume Profile 的核心结构:
你看这张图,中间那个粗壮的绿色柱子就是 HVN,上下两个红色小柱子是 LVN。价格在 HVN 附近反复摩擦,一旦突破 LVN,就像子弹穿过真空,速度极快。
7.5 实战中的注意事项
光有理论不行,实战中坑很多。我踩过的几个,分享给你:
- 时间窗口别乱选:Volume Profile 对时间窗口很敏感。日内的 HVN 和日线的 HVN 完全不是一回事。我一般用「当日」和「当周」两个窗口对照看。
- 别只看一个节点:有时候会有多个 HVN 挨在一起,形成一个「价值区域」。这时候别死盯着单个节点,要看整个区域的宽度。
- LVN 不是一定会突破:价格到了 LVN 附近,也可能折返。我通常会等价格在 LVN 附近出现「二次确认」——比如放量突破后回踩不破,再进场。
7.6 代码实战:自动构建交易区间
最后,我们写一个完整的函数,自动识别 HVN、LVN,并输出交易区间。
def build_trading_zone(df, price_step=0.5, hvn_threshold=2.0, lvn_threshold=0.3):
"""
自动构建交易区间
:return: (zone_low, zone_high, hvn_price, lvn_above, lvn_below)
"""
# 1. 计算 Volume Profile
vp = calculate_volume_profile(df, price_step)
# 2. 识别 HVN 和 LVN
vp = identify_hvn_lvn(vp, hvn_threshold, lvn_threshold)
# 3. 找到主 HVN
hvn_row = vp[vp['type'] == 'HVN'].sort_values('volume', ascending=False).iloc[0]
hvn_price = hvn_row['price']
# 4. 找到上下 LVN
above = vp[vp['price'] > hvn_price]
lvn_above = above[above['type'] == 'LVN']['price'].min() if not above[above['type'] == 'LVN'].empty else None
below = vp[vp['price'] < hvn_price]
lvn_below = below[below['type'] == 'LVN']['price'].max() if not below[below['type'] == 'LVN'].empty else None
# 5. 定义区间
zone_low = hvn_price - price_step * 5 # 简单示例,实际可用标准差
zone_high = hvn_price + price_step * 5
return zone_low, zone_high, hvn_price, lvn_above, lvn_below
# 使用示例
# low, high, hvn, lvn_up, lvn_down = build_trading_zone(data)
# print(f"交易区间: {low:.2f} - {high:.2f}, 主HVN: {hvn:.2f}")
这段代码虽然简单,但已经能应付大部分日内交易场景了。你可以在实盘中跑一跑,看看效果。
好了,关于 Volume Profile 的结构分析,我们就聊到这里。记住一句话:HVN 是家,LVN 是路。 在家附近做震荡,在路上做突破。别搞反了。
交易系统化学习资料 微信Strategy888888