13、订单流与成交量分布:Volume Profile与订单流数据的互补分析
做交易这些年,我越来越觉得,单一维度的数据就像盲人摸象。订单流告诉你每一笔交易的微观博弈,成交量分布(Volume Profile)则给你宏观的市场结构。两者结合,才是真正的立体作战。
今天我们就来聊聊,怎么把这两套工具拧在一起用。
13.1 先搞清楚各自在干嘛
订单流数据,说白了就是逐笔成交的明细。谁在买,谁在卖,主动还是被动,一目了然。我习惯把它看作市场的「心跳」——每一秒都在跳动,反应最真实的供需博弈。
成交量分布(Volume Profile)呢?它不关心时间顺序,只看价格水平上的成交量堆积。哪个价格成交最多,哪个价格是真空区,一眼就能看出来。这更像是市场的「骨架」——支撑和阻力的位置。
你想想看,一个只看订单流的人,容易陷入微观噪音里出不来。一个只看Volume Profile的人,又可能错过关键的瞬时爆发点。两者互补,才是完整视角。
核心观点:订单流解决「谁在推动价格」的问题,Volume Profile解决「哪里是战场」的问题。两者结合,你既知道战场在哪,也知道敌人从哪个方向进攻。
13.2 我常用的互补分析框架
在实际项目中,我一般分三步走:
- 先用Volume Profile定区间——找到高成交量节点(HVN)和低成交量节点(LVN),确定关键支撑阻力区。
- 再用订单流找信号——在关键价位附近,观察Delta、大单、吸收等行为,确认突破或反转。
- 最后做共振确认——如果Volume Profile的关键价位恰好出现订单流的异常信号,那就是高胜率机会。
举个例子。我曾经在BTC的日线图上看到一个明显的POC(控制点),价格在这个位置反复测试。当时订单流显示,每次价格打到POC下方,Delta就迅速转正,大买单不断出现。这就是典型的「吸收」行为——大资金在偷偷接货。嗯,那次我果断跟了进去,效果不错。
13.3 关键指标怎么配合
| Volume Profile指标 | 订单流指标 | 互补用法 |
|---|---|---|
| POC(控制点) | Delta反转 | POC附近Delta由负转正,确认支撑有效 |
| VAH/VAL(价值区间上下沿) | 大单突破 | 价格突破VAH时伴随大单放量,确认趋势启动 |
| LVN(低成交量节点) | 真空区回补 | 价格快速穿过LVN时,订单流显示无阻力,可追 |
| HVN(高成交量节点) | 吸收/堆积 | HVN附近出现吸收行为,说明主力在吸筹 |
这张表我建议你存下来。每次复盘的时候,对照着看,慢慢就有感觉了。
13.4 实战代码:Volume Profile + 订单流共振信号
下面是我写的一个简单示例,把两者结合起来做信号检测。代码不长,但核心逻辑都在里面了。
import pandas as pd
import numpy as np
def volume_profile_resonance(df, price_col='price', volume_col='volume', bins=24):
"""
计算Volume Profile,并标记关键价位
"""
price_min = df[price_col].min()
price_max = df[price_col].max()
bin_width = (price_max - price_min) / bins
df['price_bin'] = ((df[price_col] - price_min) // bin_width).astype(int)
vp = df.groupby('price_bin')[volume_col].sum()
poc_bin = vp.idxmax()
poc_price = price_min + (poc_bin + 0.5) * bin_width
# 计算价值区间(VAH/VAL)
total_vol = vp.sum()
cum_vol = 0
val_bin = None
vah_bin = None
for b in sorted(vp.index):
cum_vol += vp[b]
if cum_vol >= total_vol * 0.3 and val_bin is None:
val_bin = b
if cum_vol >= total_vol * 0.7:
vah_bin = b
break
val_price = price_min + (val_bin + 0.5) * bin_width
vah_price = price_min + (vah_bin + 0.5) * bin_width
return poc_price, val_price, vah_price
def orderflow_resonance_signal(df, poc, val, vah, delta_col='delta'):
"""
在Volume Profile关键价位上检测订单流信号
"""
signals = []
for i in range(len(df)):
price = df.iloc[i]['price']
delta = df.iloc[i][delta_col]
# 在POC附近检测Delta反转
if abs(price - poc) / poc < 0.002:
if delta > 0 and df.iloc[i-1][delta_col] < 0:
signals.append({'time': df.index[i], 'type': 'POC支撑', 'price': price})
# 在VAH附近检测大单突破
if abs(price - vah) / vah < 0.002:
if delta > 50: # 假设大单阈值
signals.append({'time': df.index[i], 'type': 'VAH突破', 'price': price})
# 在VAL附近检测吸收
if abs(price - val) / val < 0.002:
if delta > 0 and df.iloc[i]['big_buy'] > 100:
signals.append({'time': df.index[i], 'type': 'VAL吸收', 'price': price})
return signals
个人小技巧:我一般不会直接用原始Delta值做判断,而是用Delta的Z-score。这样能过滤掉一些随机波动,信号更干净。你可以试试看。
13.5 避坑指南:我踩过的几个坑
做互补分析,有几个地方特别容易翻车。我一个个说。
第一个坑:时间周期不匹配。我曾经犯过一个低级错误——用日线的Volume Profile去匹配1分钟订单流。结果呢?日线的POC在1分钟图上根本没什么意义。后来我学乖了,Volume Profile和订单流尽量用同一个时间框架,或者至少是相近的。
第二个坑:过度解读小级别数据。订单流数据太细了,容易让人产生幻觉。明明只是随机波动,非觉得是主力动作。我的经验是:至少看3根K线的订单流数据,形成连续行为,才值得关注。
第三个坑:忽略市场背景。Volume Profile和订单流都是工具,不是预言。如果大趋势是下跌,哪怕POC附近有支撑信号,也可能只是反弹。我一般会先看日线趋势,再在小时级别做共振分析。
重要提醒:不要为了共振而共振。如果两个指标给出的信号矛盾,宁可观望也不要强行交易。市场不会因为你「觉得应该共振」就给你机会。
13.6 知识体系总览
下面这张图是我自己梳理的,把Volume Profile和订单流的关系画清楚了。你看一眼,应该就能理解整个框架。
这张图我画了好几次才满意。你看,左边是Volume Profile的宏观结构,右边是订单流的微观博弈,中间通过相互验证和修正,最终输出共振信号。说白了,就是「宏观定区间,微观找时机」这八个字。
13.7 最后说几句
Volume Profile和订单流的互补分析,不是简单的1+1=2。它需要你同时理解两个工具的本质,然后在实战中不断磨合。我刚开始做的时候,也经常搞混,信号对不上就烦躁。后来慢慢发现,市场其实很有规律——关键价位上的异常行为,往往就是大资金留下的痕迹。
嗯,今天就聊到这。记住一点:工具是死的,人是活的。多复盘,多总结,慢慢你就能找到自己的节奏。
无相订单流研究社 微信Lucian808555