Anchored VWAP: Formula dan Kegunaannya
Fahami cara anchored VWAP bermula pada bar pilihan dan tidak menetapkan semula jumlah terkumpul, termasuk formula Python serta kesan mengubah titik anchor.
Anchored VWAP ialah purata harga berwajaran volum yang memulakan jumlah terkumpulnya pada satu bar yang anda pilih dan tidak pernah menetapkan semula jumlah tersebut. Session VWAP bermula semula pada setiap pembukaan pasaran. Oleh itu, ia hanya menjawab berapakah harga purata saham bertukar tangan pada hari ini. Versi anchored menjawab soalan yang berbeza: berapakah harga purata saham bertukar tangan sejak saat yang anda pilih sebagai titik permulaan.
Apakah anchored VWAP?
Kedua-dua versi menggunakan pengiraan yang sama. Ambil setiap bar sejak permulaan, darabkan harga setiap bar dengan volum bar tersebut, kemudian simpan jumlah terkumpul. Simpan jumlah terkumpul kedua untuk volum secara berasingan. Bahagikan jumlah pertama dengan jumlah kedua. Secara matematik, anchored VWAP pada bar n ialah jumlah harga didarab volum dari bar anchor hingga bar n, dibahagikan dengan jumlah volum bagi bar yang sama.
Harga bar biasanya ialah harga tipikalnya, iaitu purata harga tinggi, rendah dan tutup. Ia juga boleh menjadi VWAP bar itu sendiri apabila data feed menerbitkannya.
Tiada apa-apa yang dikeluarkan daripada mana-mana jumlah tersebut. Purata bergerak 50 hari menggugurkan pemerhatian tertua setiap kali pemerhatian baharu ditambah. Inilah yang membolehkannya berubah arah. Anchored VWAP hanya menambah data, maka rekod sejarahnya kekal. Session VWAP menggunakan pengiraan yang sama, tetapi kedua-dua jumlah ditetapkan kepada sifar pada setiap pembukaan pasaran. Ini menjadikannya anchored VWAP yang mempunyai loceng pembukaan sebagai anchor.
Apakah perbezaan antara VWAP dengan anchored VWAP?
Panel di bawah mengira kedua-duanya menggunakan bar harian Apple bagi satu suku tahun. Lajur session_vwap ialah purata harga berwajaran volum dalam setiap sesi tunggal. Nilainya dikira semula setiap hari. Lajur anchored_vwap bermula pada sesi pertama dalam tempoh tersebut dan mengumpul data dari situ.
SQL tepat di sebalik setiap nombor
SELECT
toString(date) AS session_date,
formatDateTime(date, '%b %e') AS bar_label,
round(toFloat64(vwap), 2) AS session_vwap,
round(
sum(toFloat64(vwap) * toFloat64(volume)) OVER (ORDER BY date ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)
/ sum(toFloat64(volume)) OVER (ORDER BY date ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)
, 2) AS anchored_vwap
FROM global_markets.stocks_daily_aggs
WHERE ticker = 'AAPL'
AND date >= '2026-04-01'
AND date <= '2026-06-30'
ORDER BY dateMerentasi 62 sesi, dari Apr 1 hingga Jun 30, siri harian bergerak mengikut urus niaga pasaran, manakala siri anchored berubah secara perlahan. Garis anchored bermula pada 255.02 kerana pada hari pertama, satu sesi merangkumi keseluruhan sejarah. Garis itu mencapai 286.86 pada penghujung tempoh, berbanding VWAP sesi terakhir pada 288.09. Bentuk garis itu memberikan pengajaran utama. Pada awalnya, garis anchored bergerak hampir seiring dengan garis harian. Kemudian, garis itu menjadi lebih mendatar apabila volum terkumpul di belakangnya semakin besar.
Di manakah pedagang biasanya meletakkan anchor?
Anchor yang biasa digunakan ialah pengumuman pendapatan, bar pertama selepas jurang harga, paras terendah 52 minggu, atau print pembukaan saham yang baru disenaraikan. Kesimpulan yang dikaitkan dengan semua anchor ini adalah sama. Semua pihak yang berurus niaga selepas saat tersebut membayar harga purata yang diwakili oleh anchored VWAP. Oleh itu, harga di atas garis itu menunjukkan peserta purata berada pada keuntungan belum direalisasi.
Inilah perkara yang biasanya tidak dinyatakan. Pemilihan anchor ialah pertimbangan subjektif, dan kesimpulan berubah mengikut pemilihannya. Panel di bawah meletakkan anchor pada permulaan setiap daripada dua belas bulan terakhir bagi saham yang sama. Panel itu kemudian mengira harga purata yang dibayar dari bulan tersebut hingga satu tarikh akhir yang tetap.
SQL tepat di sebalik setiap nombor
WITH
monthly AS (
SELECT
toStartOfMonth(date) AS m,
sum(toFloat64(vwap) * toFloat64(volume)) AS pv,
sum(toFloat64(volume)) AS vol
FROM global_markets.stocks_daily_aggs
WHERE ticker = 'AAPL'
AND date >= '2025-07-01'
AND date <= '2026-06-30'
GROUP BY m
),
anchored AS (
SELECT
m,
sum(pv) OVER (ORDER BY m ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING)
/ sum(vol) OVER (ORDER BY m ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING) AS avwap
FROM monthly
),
final_close AS (
SELECT toFloat64(argMax(close, date)) AS last_close
FROM global_markets.stocks_daily_aggs
WHERE ticker = 'AAPL'
AND date >= '2026-06-01'
AND date <= '2026-06-30'
)
SELECT
formatDateTime(a.m, '%b %Y') AS anchor_from,
round(a.avwap, 2) AS anchored_vwap,
round(100 * (f.last_close / a.avwap - 1), 2) AS close_vs_avwap_pct
FROM anchored AS a
CROSS JOIN final_close AS f
ORDER BY a.mAnchor pada Jul 2025 menghasilkan harga purata yang dibayar sebanyak 259.52. Harga tutup terakhir dalam tempoh itu berada pada 11.5% berbanding harga purata tersebut. Angka itu positif apabila harga tutup berada di atas garis. Anchor pada Jun 2026 menghasilkan 294.07 dan -1.6%. Saham yang sama dan harga terakhir yang sama menghasilkan dua belas kesimpulan berbeza tentang sama ada pemegang sejak tarikh anchor berada dalam keuntungan. Pengiraan itu sendiri tidak memilih anchor untuk anda. Anchor yang dipilih selepas sesuatu peristiwa boleh diubah sehingga menyokong maksud yang mahu disampaikan oleh carta. Sebab itu tarikh anchor perlu dinyatakan dalam kapsyen setiap carta anchored VWAP yang anda baca.
Bagaimanakah anchored VWAP dikira dalam Python?
Kedua-dua siri itu terhasil melalui satu laluan merentasi semua bar. Skrip di bawah ialah Python 3 daripada pustaka standard, tanpa pakej tambahan dan tanpa rangkaian. Skrip itu membaca tiga puluh bar dan mencetak siri sesi di sebelah siri anchored. Kemudian, skrip melaporkan bar pertama apabila harga melintasi semula garis anchored. Bar tersebut dicipta untuk demonstrasi. Jika gelung yang sama digunakan pada bar sebenar, pengiraannya tidak berubah.
"""Session VWAP and anchored VWAP from the same running totals. Standard library only."""
import csv
import io
# Illustrative bars, not market data: three sessions of ten 30 minute bars.
BARS = """bar,price,volume
2026-03-02 09:30,100.40,240000
2026-03-02 10:00,100.90,180000
2026-03-02 10:30,101.30,150000
2026-03-02 11:00,101.10,130000
2026-03-02 11:30,100.60,120000
2026-03-02 12:00,100.20,110000
2026-03-02 12:30,99.80,120000
2026-03-02 13:00,99.50,140000
2026-03-02 13:30,99.70,170000
2026-03-02 14:00,99.40,260000
2026-03-03 09:30,99.10,300000
2026-03-03 10:00,98.70,210000
2026-03-03 10:30,98.90,160000
2026-03-03 11:00,98.40,150000
2026-03-03 11:30,98.10,140000
2026-03-03 12:00,98.30,120000
2026-03-03 12:30,98.80,130000
2026-03-03 13:00,99.20,150000
2026-03-03 13:30,99.60,190000
2026-03-03 14:00,99.90,280000
2026-03-04 09:30,100.20,320000
2026-03-04 10:00,100.60,230000
2026-03-04 10:30,100.90,170000
2026-03-04 11:00,101.40,160000
2026-03-04 11:30,101.20,140000
2026-03-04 12:00,101.60,130000
2026-03-04 12:30,102.10,140000
2026-03-04 13:00,102.40,160000
2026-03-04 13:30,102.20,200000
2026-03-04 14:00,102.60,290000
"""
ANCHOR = "2026-03-02 10:30" # the bar the anchored series starts on
session_pv = session_vol = 0.0
anchor_pv = anchor_vol = 0.0
current_day = None
anchored = False
start_side = None
crossover = None
print(f"{'bar':<18}{'price':>8}{'session':>10}{'anchored':>10}")
for row in csv.DictReader(io.StringIO(BARS)):
stamp = row["bar"]
day, price, vol = stamp[:10], float(row["price"]), float(row["volume"])
if day != current_day: # the session totals reset at every open
session_pv = session_vol = 0.0
current_day = day
session_pv += price * vol
session_vol += vol
session_vwap = session_pv / session_vol
anchored = anchored or stamp == ANCHOR
if not anchored:
print(f"{stamp:<18}{price:>8.2f}{session_vwap:>10.2f}{'.':>10}")
continue
anchor_pv += price * vol # the anchored totals never reset
anchor_vol += vol
anchored_vwap = anchor_pv / anchor_vol
print(f"{stamp:<18}{price:>8.2f}{session_vwap:>10.2f}{anchored_vwap:>10.2f}")
gap = price - anchored_vwap
if start_side is None and abs(gap) > 1e-9:
start_side = gap > 0
elif start_side is not None and crossover is None and (gap > 0) != start_side:
crossover = stamp
print("first bar back through the anchored VWAP:", crossover or "no crossing here")
Dua pasangan pembilang dan penyebut itu merangkumi keseluruhan konsep. session_pv dan session_vol ditetapkan kepada sifar apabila tarikh berubah. anchor_pv dan anchor_vol tidak pernah ditetapkan semula. Selebihnya hanyalah proses mencetak keputusan.
Mengapakah garis anchored berhenti bergerak?
Anchored VWAP semakin sukar digerakkan apabila usianya meningkat, atas sebab mekanikal. Setiap bar baharu memasuki purata dengan wajaran yang sama dengan volumnya sendiri dibahagikan dengan jumlah volum sejak anchor. Pada hari kedua, satu sesi boleh mewakili separuh daripada jumlah keseluruhan. Selepas dua ratus sesi, sesi yang sama hanya mewakili sebahagian kecil daripada satu peratus. Panel di bawah mengukur wajaran itu menggunakan bar Apple, dalam blok sepuluh sesi.
SQL tepat di sebalik setiap nombor
WITH running AS (
SELECT
row_number() OVER (ORDER BY date) AS n,
toFloat64(volume)
/ sum(toFloat64(volume)) OVER (ORDER BY date ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS weight
FROM global_markets.stocks_daily_aggs
WHERE ticker = 'AAPL'
AND date >= '2026-01-02'
AND date <= '2026-06-30'
)
SELECT
intDiv(n - 1, 10) * 10 + 10 AS bars_since_anchor,
round(100 * avg(weight), 2) AS newest_bar_weight_pct
FROM running
GROUP BY bars_since_anchor
ORDER BY bars_since_anchorDalam sepuluh sesi pertama, bar yang masuk menyumbang purata 30.09% kepada perubahan garis. Bar anchor sendiri menyumbang keseluruhan wajaran tersebut. Menjelang sesi 130, bar terbaharu hanya menyumbang 2.14%. Dua kesimpulan boleh dibuat daripada carta ini. Anchor lama menghasilkan garis yang hampir mendatar dan tidak banyak bertindak balas terhadap pergerakan semasa. Anchor baharu menghasilkan garis yang bergerak pantas mengikut harga dan kerap melintasinya. Tiada satu pun yang lebih tepat. Kedua-duanya menggunakan formula yang sama pada usia berbeza. Untuk melihat secara langsung jumlah volum yang masuk berbanding paras biasa, purata volum harian dan volum relatif boleh digunakan.
Apakah yang didakwa ditunjukkan oleh anchored VWAP?
Dakwaan standardnya ialah bacaan kedudukan pelabur. Apabila anchor diletakkan pada sesuatu peristiwa, garis itu mewakili harga purata yang dibayar oleh semua pihak yang berurus niaga selepas peristiwa tersebut. Oleh itu, harga di atas garis menunjukkan majoriti pemegang berada pada keuntungan belum direalisasi. Harga di bawah garis menunjukkan keadaan sebaliknya. Panel di bawah meletakkan anchor bagi lima saham nama isi rumah pada harga tutup harian terendah yang dicatatkan oleh setiap saham sepanjang dua belas bulan lalu. Kemudian, panel itu mengukur harga tutup terakhir dalam tempoh tersebut berbanding purata yang terhasil.
SQL tepat di sebalik setiap nombor
WITH
bars AS (
SELECT
ticker,
date,
toFloat64(vwap) AS px,
toFloat64(volume) AS vol,
toFloat64(close) AS c
FROM global_markets.stocks_daily_aggs
WHERE ticker IN ('AAPL', 'MSFT', 'NVDA', 'KO', 'SPY')
AND date >= '2025-07-01'
AND date <= '2026-06-30'
),
lows AS (
SELECT
ticker,
argMin(date, c) AS low_date
FROM bars
GROUP BY ticker
)
SELECT
b.ticker AS symbol,
formatDateTime(l.low_date, '%b %e, %Y') AS anchored_at,
round(sumIf(b.px * b.vol, b.date >= l.low_date) / sumIf(b.vol, b.date >= l.low_date), 2) AS anchored_vwap,
round(argMax(b.c, b.date), 2) AS last_close,
round(100 * (argMax(b.c, b.date)
/ (sumIf(b.px * b.vol, b.date >= l.low_date) / sumIf(b.vol, b.date >= l.low_date)) - 1), 1) AS close_vs_avwap_pct
FROM bars AS b
INNER JOIN lows AS l ON b.ticker = l.ticker
GROUP BY b.ticker, l.low_date
ORDER BY close_vs_avwap_pct DESCLima saham itu berada dalam julat daripada SPY pada 10.4% hingga MSFT pada 1.3%. Setiap satu diukur berbanding tarikh anchornya sendiri. Julat tersebut menerangkan perkara yang telah berlaku, tetapi hadnya perlu dinyatakan dengan tepat. Anchored VWAP ialah statistik deskriptif yang dikira daripada harga dan volum yang telah dicatatkan. Ia bukan ramalan dan bukan peraturan yang mempunyai kelebihan terbukti dalam penyelidikan yang diterbitkan. Ia tidak mengandungi maklumat yang tiada dalam sejarah harga dan volum. Selain itu, anchor yang menghasilkan garis tersebut dipilih oleh seseorang. Sebagai ringkasan pergerakan pasaran sejak sesuatu tarikh, ia berguna dan jujur. Sebagai suatu kesimpulan muktamad, pemilihan anchor itulah yang menentukan tafsirannya.
Soalan lazim
Apakah perbezaan antara VWAP dengan anchored VWAP?
Session VWAP menetapkan semula jumlah terkumpulnya pada setiap pembukaan pasaran. Oleh itu, ia hanya menerangkan hari semasa. Anchored VWAP memulakan jumlahnya pada bar yang anda pilih dan tidak pernah menetapkan semula jumlah tersebut. Oleh itu, ia menerangkan harga purata yang dibayar merentasi semua sesi sejak bar itu.
Di manakah pedagang meletakkan anchor untuk VWAP?
Pilihan yang biasa ialah tarikh pengumuman pendapatan, bar pertama selepas jurang harga, paras tertinggi atau terendah ayunan, dan hari pertama dagangan bagi saham yang baru disenaraikan. Mana-mana bar boleh dijadikan anchor. Tarikh anchor perlu diketahui oleh pembaca untuk mentafsir garis tersebut.
Adakah anchored VWAP ditetapkan semula semalaman?
Tidak. Itulah sifat utamanya. Jumlah terkumpul harga didarab volum dan jumlah terkumpul volum kedua-duanya dibawa merentasi penutupan pasaran. Pengiraan itu kemudian disambung pada sesi berikutnya, walau berapa banyak sesi telah berlalu.
Adakah anchored VWAP meramalkan sesuatu?
Ia ialah statistik deskriptif, bukan ramalan. Ia meringkaskan jumlah yang telah dibayar sejak anchor. Perubahan anchor mengubah garis dan boleh membalikkan kesimpulan yang kelihatan. Oleh itu, setiap dakwaan yang berasaskannya hanya kukuh setakat alasan yang menyokong tarikh anchor tersebut.
Bolehkah anchored VWAP dikira menggunakan bar harian?
Ya. Panel di halaman ini menggunakan bar harian, dengan setiap Session VWAP dijadikan harga bar. Carta intrahari pula menggunakan bar minit. Formula yang digunakan adalah sama bagi kedua-dua resolusi. Yang berubah hanyalah saiz setiap kenaikan.
Setiap panel di atas disertakan dengan SQL yang menghasilkannya. Anda boleh membukanya dan mengubah sendiri tarikh anchor. Untuk menjalankan jumlah terkumpul yang sama dari tarikh yang anda pilih, minta pengiraan itu dalam bahasa biasa melalui terminal Strasmore.