技术分析 · 成交量指标

VWAP 是什么?
为什么机构看这条线、散户却常常用错

2026-08-18·10 分钟阅读

你在图上拉了条 VWAP,把它当多空分界线——上方就做多、下方就做空。跑几天之后你会发现,这条线每天开盘 flip 一次,中间常常无感触发。照着做的日子甚至比不看它还糟。

没有人先跟你讲的是:VWAP 从设计之初就不是拿来预测方向的——它是机构做完一笔单之后,用来检查「我这笔执行有没有比市场的平均成本差」的计分板。把计分板当入场信号,就像看温度计来决定要不要感冒。

这篇不重复 VWAP 的公式与图表操作——那些在 Volume Profile / VWAP / TWAP 完整教程 已经写过。这里只讲四个散户把它用错的地方,以及少数几种它真正有意义的用法。

先讲结论:两边看的是同一条线,用途完全不同

同一个 VWAP 数字,在机构桌上与散户图表上代表的意义几乎不重叠。这张表是给你比对用的,不用背——后面每一节会拆一遍。

机构执行台散户图表
拿来做什么事后检查执行成本事前预测进出场
时间轴从自己下单开始、到单子做完为止整个交易日
怎么算胜负成交均价比 VWAP 差几个 bp价格穿越 VWAP 有没有续走
谁在推动这条线不含自己这笔单包含所有人的单,包括你
重置点自己单子的起点当日开盘(一个习惯)

落差一:VWAP 是给执行后打分用的,不是给入场前预测用的

VWAP 这个指标最早出现在机构的 execution desk,用途是解决一个很具体的问题:一个大单子被拆成几百笔小单塞出去之后,怎么证明自己「没有把市场推很多」?

于是就有了 Σ(price × volume) / Σ(volume) 这个公式——它不是猜下一笔会走去哪,而是把整段时间里的成交,按量加权平均起来。做完单之后,把自己的平均成交价跟这个数字相减,差距用 basis point(bp,也就是一个百分点的百分之一)报回去。这是一种回头看的计分板。

散户拿到这条线的时候顺序反过来:它已经被画在 K 线上,看起来像一条可以「反弹」的支撑。但这条线的每个点都是过去成交价的加权平均,跟未来没有结构性的关系。它在图上长得像均线,只是因为它每根 K 棒都往前算一次。

机制与后果分开讲
这件事对你的影响是:VWAP 适合放进「回顾」——这一天我进出场的均价比 VWAP 好还是差几个 bp;不适合放进「触发」——价格穿过 VWAP 就做多。前者是它被设计来做的事,后者是把工具反过来用。

落差二:跨日累积的 VWAP 是自己发明出来的

TradingView 的 ta.vwap() 预设在每个 session boundary(也就是交易时段的边界,例如美股每天 9:30 开盘那一刻)重置。Pine Script v5 以后允许你自己指定 anchor(ta.vwap(source, anchor, stdev_mult)),可以是 session、week、month,或任何你自己算出来的 bool 条件。

但常见的一种误用是:把 anchor 设成 barstate.isfirst、然后从资料的第一根 K 棒一路累积下去,用意是「拿到一条稳定的长期均线」。这条线在图上看起来很平滑,但它已经不是 VWAP 了,它是「从你可看到的历史起点以来的成交量加权平均价」。这个数字没有任何机构会拿去用。

1 天
VWAP 的原始重置周期(传统股市)
自订
Pine v5 起可以指定的 anchor 粒度
0
「历史起点累积 VWAP」在机构执行桌的实际用途

想要一条「跨日的成交量加权平均」,那个东西叫 anchored VWAP:从某个明确事件开始重新累积——某次财报、某次跳空缺口、某个减半日。它有意义是因为 anchor 本身是事件;从历史第一根 K 棒起不算事件,只算「Pine 有多少资料」。同一条脚本换一个交易对、换一段时间范围,那条线的位置就完全不同。

落差三:VWAP 假设你不会推动市场——加密散户刚好相反

再回头看那个公式:Σ(price × volume) / Σ(volume)。「量」这一项是市场的量——所有人的成交加起来。机构的假设是「我的单子相对市场很小,我加进去也不会歪太多」,这在美股大盘股上大致成立。

加密散户身上这个假设常常反过来。原因不是散户单子大,而是「这条线是哪个交易所的 VWAP」这件事本身就很糊。BTC 在币安、OKX、Bybit、Coinbase 之间同时报价,每个交易所自己的 VWAP 都不一样,也都只反映自己那一小块的成交。你在 TradingView 拉出来的 VWAP 通常挂在某个单一交易所的资料源上,那条线代表的是那一个交易所的加权平均,不是「市场」的平均。

这种错不会吵,它会安静地坏掉
单一交易所的 VWAP 在流动性最深的那家(例如 BTC 的币安 spot)跟聚合资料很接近,你不会发现差异。但一到二线标的,同一个时间点不同交易所的 VWAP 差 0.3~0.8% 是常态——你以为的「跌破 VWAP」在别家可能还在 VWAP 上方。

落差四:把 VWAP 当均线做交叉,是把它当成了另一个东西

这是新手 Pine Script 最爱写的策略:close 上穿 ta.vwap 入场、下穿出场。回测跑起来曲线看起来还行,实盘跑一个月你会看到它整天在 flip。

原因很简单:VWAP 每天重置,均线不会。开盘那几根 K 棒 VWAP 几乎贴着价格,因为累积量小、权重被最新那根 K 棒吃走大半,任何一个小波动都会触发穿越。真正的均线用一段固定历史窗口做平均,开盘时它跟昨天差不多,不会这样过度反应。

更根本的问题是:均线与 VWAP 在「单位」上就不一样——EMA(20) 是「最近 20 根 K 棒的价格趋势」,VWAP 是「今天到现在为止量分布的中心」。把两个放在同一个规则里当交叉条件,等于用温度计跟血压计比大小。

1
你想从 VWAP 拿到什么?
检查我这一笔单的执行成本正解。做完单之后把成交均价跟同时段 VWAP 相减,用 bp 表达。
把它当均线做交叉换成 EMA / SMA。VWAP 每天重置,开盘几根 K 棒的信号几乎全是噪音。
找出某个事件之后的平均持仓成本用 anchored VWAP,把 anchor 设在事件那根 K 棒,不要从历史起点累积。
当作日内的多空分界线对很短线的日内交易有一定意义,但要接受它每天早上会失效一次。搭配成交量条件过滤。

那什么时候用 VWAP 才是对的?

两种用法在既有的机构工作流里是稳定的,散户照着用不会走偏:

用法一:检查自己的执行成本

你这一天做了几笔单,把每笔的成交均价跟同一时段的 VWAP 相减。这是机构桌上 execution trader 的日常 KPI:你的均价比 VWAP 好,代表你这笔单的时机没有拖累市场;比 VWAP 差,代表你追高或杀低了。这对散户也成立,尤其是分批建仓或分批平仓的情况——它比「我上次入场的价格是多少」更能告诉你节奏对不对。

用法二:anchored VWAP,挂在具体事件上

这是 Brian Shannon 这一路人推广起来的用法:把 anchor 挂在某个所有人都看到的事件——财报公布那根 K 棒、跳空缺口的那根 K 棒、某次减半、某次协议升级。从那个 anchor 开始算的 VWAP,代表「这个事件之后所有入场的人的加权平均持仓成本」。这条线在图上有一个具体含义:如果你是那个事件之后才入场的人,你现在是赚还是赔、赚赔幅度平均在哪。

用 Pine 写起来的骨架是这样(v5 起 ta.vwap 就吃 anchor 参数):

pine
//@version=5
        indicator("Anchored VWAP from event", overlay=true)

        // 让你在图上点一根 K 棒当 anchor(input.time 可以用鼠标指定)
        anchorTime = input.time(timestamp("2026-01-01T00:00:00+00:00"), "Anchor 事件时间")

        // 这根 K 棒的开盘时间到了 anchorTime,就重置累积
        newAnchor = time >= anchorTime and time[1] < anchorTime

        // ta.vwap 的第二个参数就是 bool 型的重置信号
        avwap = ta.vwap(hlc3, newAnchor)
        plot(avwap, "Anchored VWAP", color.orange, 2)
anchor 要能对外解释
自己随便挑「今天早上 10:03」当 anchor 是没意义的——那个时间没有任何人跟你共享。anchor 要选市场上有共识的事件:新闻、公告、跳空缺口、明确的技术破位。这样算出来的线才对得起「其他人的持仓成本」这个含义。

诚实的一段:这条线的极限

就算你把它用对了,VWAP 还是有几件事做不到,先写在前面:

  • 不会告诉你方向——它只是把过去成交往一个中心压过去,中心点本身没有预测力。
  • 对低流动性的标的意义很弱——量太少的时候,加权跟不加权差不了多少。
  • 加密盘本来就 24 小时,若又用短周期切 anchor,样本点会太少,算出来抖动很大。

比较安全的做法:把 VWAP 当成一个补充滤网——你的主策略是某个突破、某个型态、某个信号,VWAP 只是拿来做「这个信号发生在多方成本上方还是下方」的分类器。不要让 VWAP 自己当入场条件。

如果你已经在跑 TradingView webhook

webhook 就是 alert 触发时把 JSON payload 送到你自己伺服器的那条通道。最常见的做法是把 VWAP 的条件写进 Pine 策略里当过滤器:strategy.entry 只在「信号成立 而且 close 在 anchored VWAP 上方」时才触发。这样真正发出去的 alert 是有过滤的,webhook 端不需要再判断。

这种写法的坑不是 VWAP 本身,是「信号的 timing 跟 K 棒收盘的关系」——如果你用 barstate.isconfirmed 才触发,信号会晚一根 K 棒;如果不用,你会拿到会消失的信号(Pine Script 的 Alert 没有记忆那篇解释过为什么)。把 VWAP 加进来之前先确定这件事没踩到。

常见问题

TradingView 内建的那条 VWAP 是哪个交易所的?
你图上 chart 的资料源那家。BTCUSDT 在图表右下角显示的是 BINANCE 就是币安的、BYBIT 就是 Bybit 的——切换交易所资料源,VWAP 也会跟着变。没有一条「全市场」的 VWAP,要自己拿几家的资料算加权平均。
anchored VWAP 跟一般 VWAP 差在哪?只是换个起点吗?
差别就在起点,但意义完全不同。一般 VWAP 以「当日开盘」重置,反映的是这一天的执行成本;anchored VWAP 以「某个事件」为起点,反映的是「这个事件之后入场的人的平均持仓」。前者是一天内的纪律工具,后者是跨时段的成本地图。
为什么 Pine 内建的 ta.vwap 预设不能算跨日?
它可以,只是预设不这样做。ta.vwap(source, anchor) 的第二个参数是 bool,你可以在里面自己算出「每周一开盘」或「某个事件时间」再送进去。但预设值是 session 重置,这是刻意的——把跨日累积做预设会误导绝大多数使用者。
我把 VWAP 当做多空分界线在做日内交易,是不是完全不对?
不是完全不对,但要接受两件事:它每天重置,开盘前 1~2 小时的信号几乎全是噪音;还有它会被大量成交把权重拉走,某一根 K 棒有巨量成交的时候 VWAP 会跳一下。用它当分界线的话,加一个「不在开盘 60 分钟内」的过滤器会少踩一半的坑。
机构的 VWAP algo 跟我在 TradingView 看到的 VWAP 是同一个东西吗?
数学是同一个,用途相反。机构的 VWAP algo 是执行工具——把大单子拆成小单,让自己的成交均价贴近 VWAP。你在 TradingView 看到的是显示工具——把已经成交的资料算出一个中心线画给你看。同一个公式,一边用它决定怎么下单、一边用它决定画在哪里。

Get started

想把今天学到的东西自动化跑起来?

把 anchored VWAP 过滤器加进你的 Pine 策略,webhook 到交易所这段交给 TVSBot——用你自己的 API key,先 dry-run,风控自己设。

免费开始使用