VWAP 是什麼?
為什麼機構看這條線、散戶卻常常用錯
你在圖上拉了條 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 是自己發明出來的
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 了,它是「從你可看到的歷史起點以來的成交量加權平均價」。這個數字沒有任何機構會拿去用。
想要一條「跨日的成交量加權平均」,那個東西叫 anchored VWAP:從某個明確事件開始重新累積——某次財報、某次跳空缺口、某個減半日。它有意義是因為 anchor 本身是事件;從歷史第一根 K 棒起不算事件,只算「Pine 有多少資料」。同一條腳本換一個交易對、換一段時間範圍,那條線的位置就完全不同。
落差三:VWAP 假設你不會推動市場——加密散戶剛好相反
再回頭看那個公式:Σ(price × volume) / Σ(volume)。「量」這一項是市場的量——所有人的成交加起來。機構的假設是「我的單子相對市場很小,我加進去也不會歪太多」,這在美股大盤股上大致成立。
加密散戶身上這個假設常常反過來。原因不是散戶單子大,而是「這條線是哪個交易所的 VWAP」這件事本身就很糊。BTC 在幣安、OKX、Bybit、Coinbase 之間同時報價,每個交易所自己的 VWAP 都不一樣,也都只反映自己那一小塊的成交。你在 TradingView 拉出來的 VWAP 通常掛在某個單一交易所的資料源上,那條線代表的是那一個交易所的加權平均,不是「市場」的平均。
落差四:把 VWAP 當均線做交叉,是把它當成了另一個東西
這是新手 Pine Script 最愛寫的策略:close 上穿 ta.vwap 進場、下穿出場。回測跑起來曲線看起來還行,實盤跑一個月你會看到它整天在 flip。
原因很簡單:VWAP 每天重置,均線不會。開盤那幾根 K 棒 VWAP 幾乎貼著價格,因為累積量小、權重被最新那根 K 棒吃走大半,任何一個小波動都會觸發穿越。真正的均線用一段固定歷史窗口做平均,開盤時它跟昨天差不多,不會這樣過度反應。
更根本的問題是:均線與 VWAP 在「單位」上就不一樣——EMA(20) 是「最近 20 根 K 棒的價格趨勢」,VWAP 是「今天到現在為止量分佈的中心」。把兩個放在同一個規則裡當交叉條件,等於用溫度計跟血壓計比大小。
那什麼時候用 VWAP 才是對的?
兩種用法在既有的機構工作流裡是穩定的,散戶照著用不會走偏:
用法一:檢查自己的執行成本
你這一天做了幾筆單,把每筆的成交均價跟同一時段的 VWAP 相減。這是機構桌上 execution trader 的日常 KPI:你的均價比 VWAP 好,代表你這筆單的時機沒有拖累市場;比 VWAP 差,代表你追高或殺低了。這對散戶也成立,尤其是分批建倉或分批平倉的情況——它比「我上次進場的價格是多少」更能告訴你節奏對不對。
用法二:anchored VWAP,掛在具體事件上
這是 Brian Shannon 這一路人推廣起來的用法:把 anchor 掛在某個所有人都看到的事件——財報公佈那根 K 棒、跳空缺口的那根 K 棒、某次減半、某次協議升級。從那個 anchor 開始算的 VWAP,代表「這個事件之後所有進場的人的加權平均持倉成本」。這條線在圖上有一個具體含義:如果你是那個事件之後才進場的人,你現在是賺還是賠、賺賠幅度平均在哪。
用 Pine 寫起來的骨架是這樣(v5 起 ta.vwap 就吃 anchor 參數):
//@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)誠實的一段:這條線的極限
就算你把它用對了,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 是哪個交易所的?
anchored VWAP 跟一般 VWAP 差在哪?只是換個起點嗎?
為什麼 Pine 內建的 ta.vwap 預設不能算跨日?
ta.vwap(source, anchor) 的第二個參數是 bool,你可以在裡面自己算出「每週一開盤」或「某個事件時間」再送進去。但預設值是 session 重置,這是刻意的——把跨日累積做預設會誤導絕大多數使用者。我把 VWAP 當做多空分界線在做日內交易,是不是完全不對?
機構的 VWAP algo 跟我在 TradingView 看到的 VWAP 是同一個東西嗎?
Get started
把 anchored VWAP 過濾器加進你的 Pine 策略,webhook 到交易所這段交給 TVSBot——用你自己的 API key,先 dry-run,風控自己設。
免費開始使用