27、订单流与成交量加权价格区间(VWAP Range)

VWAP 这个指标,做交易的人应该都不陌生。但大多数人只把它当个均线用——价格在 VWAP 上面就看多,下面就看空。说实话,这种用法太粗糙了。

我做了这么多年订单流交易,发现一个很有意思的现象:VWAP 真正的价值不在于那条线本身,而在于它形成的价格区间。今天我就把这个 VWAP Range 的玩法拆开来讲。

VWAP Range 的构建

先说说什么是 VWAP Range。它不是一条线,而是一个带——由 VWAP 线、上轨和下轨组成。

我个人习惯用标准差来构建这个区间。具体做法是:

// VWAP Range 计算示例(伪代码)
VWAP = Σ(价格 × 成交量) / Σ(成交量)

// 计算标准差
标准差 = sqrt( Σ( (价格 - VWAP)² × 成交量 ) / Σ(成交量) )

// 构建区间
上轨 = VWAP + 2 × 标准差
下轨 = VWAP - 2 × 标准差
中轨 = VWAP

这里有个细节要注意:计算标准差时一定要用成交量加权。普通标准差会把每个价格点同等对待,但订单流交易里,成交量大的价格点显然更重要。

我在项目中遇到过一个问题:用 1 分钟 K 线算 VWAP Range,结果区间太窄,频繁被突破。后来改成用 tick 数据计算,效果就好多了。你想想看,tick 级别的数据能捕捉到每一笔成交的细节,区间自然更准确。

参数 说明 我常用的值
计算周期 用于计算 VWAP 的时间窗口 当日(日内交易)或 20 周期
标准差倍数 决定区间宽度 1.5 或 2.0
数据粒度 tick 级别或分钟级别 tick 级别优先

订单流在 VWAP Range 内的行为

区间建好了,接下来看订单流在里面怎么动。我总结了三个典型行为模式:

1. 区间内的吸筹与派发

当价格在 VWAP Range 内震荡时,大资金往往在悄悄干活。如果 Delta(主动买卖量差)持续为正,但价格不涨——这叫吸筹。反过来,Delta 持续为负但价格不跌——这叫派发。

我曾经在某个品种上看到过这种情况:价格在 VWAP 中轨附近晃了整整两个小时,Delta 一直是正的,累计 Delta 曲线稳步上升。我当时就判断有人在吸筹,果断跟了进去。结果半小时后价格突破上轨,直接拉了一波。

关键信号:价格不动 + Delta 持续偏离 = 大资金在行动

2. 订单簿的堆积效应

VWAP 中轨附近经常会出现订单簿的堆积。为什么?因为很多算法交易会把 VWAP 作为参考价,在中轨附近挂单。

我观察到一个规律:如果中轨附近出现大单堆积,且 Delta 在向某个方向倾斜,那突破的方向大概率就是 Delta 指向的方向。说白了,订单簿告诉你阻力在哪,Delta 告诉你谁会赢。

3. 区间边界的测试行为

价格碰到上轨或下轨时,订单流会给出明确的信号。如果价格触轨时 Delta 急剧放大,说明突破意愿强。如果 Delta 萎缩,说明只是试探。

嗯,这里要注意:不要看到触轨就进场。我吃过这个亏——有一次价格碰到上轨,我直接追多,结果 Delta 瞬间转负,价格被打回区间内。后来我学乖了,一定要等 Delta 确认。

VWAP Range 突破策略

好了,重头戏来了。基于上面的分析,我设计了一套 VWAP Range 突破策略。这套策略我实盘跑过,效果还不错。

策略框架

  1. 识别区间:用 tick 数据计算 VWAP Range,取 1.5 倍标准差
  2. 等待突破:价格突破上轨或下轨,且突破 K 线的 Delta 大于前 5 根 K 线的平均 Delta 的 2 倍
  3. 确认信号:突破后回测区间边界,如果回测时 Delta 不减弱,确认突破有效
  4. 进场:在确认信号出现后进场,止损设在区间边界另一侧
  5. 止盈:目标为区间宽度的 1.5 倍
我的小技巧:突破进场后,如果价格快速脱离成本区(比如 1 分钟内盈利超过 0.5%),我会把止损移到成本价。这样即使后面反转,也不会亏。

代码实现片段

def vwap_range_breakout(df, std_mult=1.5):
    # 计算 VWAP 和区间
    df['vwap'] = (df['price'] * df['volume']).cumsum() / df['volume'].cumsum()
    df['std'] = np.sqrt(
        ((df['price'] - df['vwap']) ** 2 * df['volume']).cumsum() / df['volume'].cumsum()
    )
    df['upper'] = df['vwap'] + std_mult * df['std']
    df['lower'] = df['vwap'] - std_mult * df['std']
    
    # 检测突破
    df['breakout_up'] = (df['price'] > df['upper']) & (df['delta'] > df['delta'].rolling(5).mean() * 2)
    df['breakout_down'] = (df['price'] < df['lower']) & (df['delta'] < df['delta'].rolling(5).mean() * 2)
    
    return df

避坑指南

我曾经在震荡市里用这个策略,结果连续被打脸。后来我加了一个过滤器:只有当 VWAP Range 的宽度在最近 20 个周期的 30% 分位数以上时,才执行突破策略。区间太窄说明市场在收敛,突破往往是假突破。

警告:VWAP Range 突破策略不适合在重大数据发布前后使用。数据发布时的瞬间波动会打乱所有区间结构,这时候用订单流分析基本是白费力气。

知识体系图

下面这张图总结了 VWAP Range 的核心逻辑:

VWAP Range 核心知识体系 VWAP Range 构建 订单流行为分析 突破策略 成交量加权标准差 tick 级别数据粒度 1.5-2.0 倍标准差 吸筹与派发识别 订单簿堆积效应 边界测试与 Delta 确认 Delta 放大确认突破 回测边界确认信号 区间宽度过滤器 核心原则:价格 + 成交量 + Delta 三位一体确认 不要只看价格突破,要等订单流信号确认

说实话,VWAP Range 这套东西,刚开始用的时候会觉得有点复杂。但一旦你习惯了用订单流去验证每一个突破信号,你会发现胜率提升得很明显。我自己的账户曲线就是最好的证明——从最初的频繁止损,到现在的稳定盈利,关键就在于学会了等待那个 Delta 确认的信号。

记住一句话:价格可以骗人,但成交量不会。VWAP Range 给了你框架,订单流给了你眼睛,两者结合,你就能看清市场的真实意图。


无相订单流研究社 微信Lucian808555