اندیکاتور VWAP (میانگین قیمت وزنی حجم)

VWAP میانگین قیمتی است که بر اساس حجم معاملات وزن‌دهی شده و هر روز از نو شروع می‌شود؛ معیار محبوب معامله‌گران روزانه و نهادی.

چیست

میانگین قیمت وزنی حجم نشان می‌دهد معامله‌گران امروز به‌طور میانگین با چه قیمتی خرید و فروش کرده‌اند. قیمت‌هایی که حجم بیشتری در آن‌ها معامله شده، وزن بیشتری در VWAP دارند. صندوق‌ها و معامله‌گران نهادی از VWAP برای سنجش کیفیت اجرای سفارش‌هایشان استفاده می‌کنند.

چطور محاسبه می‌شود

  1. قیمت معمول هر کندل = (سقف + کف + بسته شدن) ÷ ۳
  2. VWAP = جمع (قیمت معمول × حجم) ÷ جمع حجم، از ابتدای جلسه‌ی معاملاتی

تریدرها چطور آن را می‌خوانند

  • قیمت بالای VWAP یعنی خریداران امروز کنترل را دارند و زیر آن یعنی فروشندگان.
  • VWAP در طول روز اغلب نقش حمایت یا مقاومت را بازی می‌کند.
  • فاصله‌ی زیاد قیمت از VWAP ممکن است با برگشت به سمت آن همراه شود.

تنظیمات

VWAP کلاسیک هر روز از نو محاسبه می‌شود. برای دید بلندتر، VWAP هفتگی یا ماهانه، یا Rolling VWAP که روی یک پنجره‌ی زمانی ثابت حساب می‌شود، را امتحان کن.

کجا گول می‌زند

  • VWAP به حجم وابسته است؛ در بازارهایی که حجم واقعی متمرکز ندارند، مثل فارکس، حجم تیک جایگزین آن می‌شود و دقت کمتری دارد.
  • VWAP برای معامله‌ی روزانه ساخته شده و روی تایم‌فریم‌های روزانه و بالاتر معنای کمی دارد.

کد Pine Script آن در Vlevel

این همان اسکریپتی است که چارت اجرا می‌کند. در پنجره‌ی اندیکاتورهای چارت می‌توانی آن را باز کنی، تغییر دهی و نسخه‌ی خودت را ذخیره کنی.

Volume Weighted Average Price · Pine Script v6
//@version=6
indicator("Volume Weighted Average Price", shorttitle = "VWAP", overlay = true)
anchor = input.string("Session", "Anchor Period", options = ["Session", "Week", "Month", "Quarter", "Year"])
isNew = switch anchor
    "Session" => timeframe.change("D")
    "Week" => timeframe.change("W")
    "Month" => timeframe.change("M")
    "Quarter" => timeframe.change("M") and (month - 1) % 3 == 0
    => timeframe.change("M") and month == 1
src     = input.source(hlc3, "Source")
offset  = input.int(0, "Offset")
showB1  = input.bool(false, "Bands #1", group = "Bands", inline = "b1")
mult1   = input.float(1.0, "Multiplier #1", group = "Bands", inline = "b1")
showB2  = input.bool(false, "Bands #2", group = "Bands", inline = "b2")
mult2   = input.float(2.0, "Multiplier #2", group = "Bands", inline = "b2")
showB3  = input.bool(false, "Bands #3", group = "Bands", inline = "b3")
mult3   = input.float(3.0, "Multiplier #3", group = "Bands", inline = "b3")
var float pv = 0.0
var float v = 0.0
var float pv2 = 0.0
if isNew
    pv := 0.0
    v := 0.0
    pv2 := 0.0
pv += src * volume
v += volume
pv2 += src * src * volume
vwap = v > 0 ? pv / v : src
sd = v > 0 ? math.sqrt(math.max(pv2 / v - vwap * vwap, 0)) : 0
plot(vwap, "VWAP", color = #ff9f43, offset = offset)
plot(showB1 ? vwap + sd * mult1 : na, "Upper Band #1", color = #2ee6a6, offset = offset)
plot(showB1 ? vwap - sd * mult1 : na, "Lower Band #1", color = #2ee6a6, offset = offset)
plot(showB2 ? vwap + sd * mult2 : na, "Upper Band #2", color = #808000, offset = offset)
plot(showB2 ? vwap - sd * mult2 : na, "Lower Band #2", color = #808000, offset = offset)
plot(showB3 ? vwap + sd * mult3 : na, "Upper Band #3", color = #00897b, offset = offset)
plot(showB3 ? vwap - sd * mult3 : na, "Lower Band #3", color = #00897b, offset = offset)

اندیکاتورها قیمت‌های گذشته را توصیف می‌کنند و هیچ‌کدام آینده را پیش‌بینی نمی‌کنند. برای آموزش است، نه توصیه‌ی سرمایه‌گذاری.