Anchored VWAP: הסבר, נוסחה ושימושים
Anchored VWAP מתחיל את הממוצע המצטבר בנר שתבחרו ואינו מתאפס. למדו את הנוסחה ב-Python פשוט והבינו כיצד שינוי נקודת העוגן משנה את התוצאה.
Anchored VWAP הוא מחיר ממוצע משוקלל לפי מחזור שמתחיל לצבור את הנתונים מנר אחד שבחרתם ואינו מאפס אותם. VWAP של סשן מתחיל מחדש בכל פתיחת מסחר, ולכן הוא עונה רק על השאלה באיזה מחיר ממוצע התבצעו עסקאות במניה היום. הגרסה anchored עונה על שאלה אחרת: באיזה מחיר ממוצע התבצעו עסקאות במניה מאז הרגע שבחרתם כנקודת ההתחלה.
מהו anchored VWAP?
שתי הגרסאות משתמשות באותו חישוב בדיוק. לוקחים כל נר מאז נקודת ההתחלה, מכפילים את מחירו במחזור העסקאות באותו נר ומנהלים סכום מצטבר. במקביל מנהלים סכום מצטבר נפרד של המחזור. מחלקים את הסכום הראשון בשני. בניסוח מתמטי, anchored VWAP בנר n הוא סכום המכפלות של מחיר כפול מחזור מנר העוגן ועד נר n, חלקי סכום המחזור באותם נרות.
מחיר הנר הוא בדרך כלל המחיר הטיפוסי שלו — הממוצע של הגבוה, הנמוך והנעילה — או ה-VWAP של הנר עצמו, כאשר מקור הנתונים מפרסם נתון כזה.
שום נתון אינו מוסר מאף אחד מהסכומים. ממוצע נע ל-50 יום משמיט את התצפית הישנה ביותר בכל פעם שמתווספת תצפית חדשה, וכך הוא יכול לשנות כיוון. anchored VWAP רק מוסיף נתונים, ולכן הזיכרון שלו קבוע. VWAP של סשן הוא אותו חישוב, כאשר שני הסכומים מאופסים בכל פתיחה. במובן זה, מדובר ב-anchored VWAP שנקודת העוגן שלו היא פתיחת המסחר.
מה ההבדל בין VWAP לבין anchored VWAP?
התרשים שלהלן מציג את שניהם על נרות יומיים של Apple במהלך רבעון אחד. העמודה session_vwap היא מחיר ממוצע משוקלל לפי מחזור בתוך כל סשן נפרד — נתון חדש בכל יום. העמודה anchored_vwap מתחילה בסשן הראשון של התקופה ומצטברת משם.
ה-SQL המדויק מאחורי כל מספר
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 dateבמהלך 62 סשנים, מ-Apr 1 ועד Jun 30, הסדרה היומית נעה עם המסחר, ואילו הסדרה anchored מתעקמת באיטיות. הקו anchored מתחיל ב-255.02, משום שביום הראשון סשן יחיד הוא כל ההיסטוריה, ומגיע ל-286.86 בסוף התקופה, לעומת VWAP סופי של 288.09 בסשן האחרון. צורת הקווים היא המסר. בתחילה הקו anchored עוקב מקרוב אחר הקו היומי, אך בהמשך הוא משתטח ככל שהמחזור המצטבר מאחוריו גדל.
היכן מציבים את נקודת העוגן?
נקודות עוגן נפוצות הן פרסום דוחות כספיים, הנר הראשון של פער מחיר, שפל של 52 שבועות, או עסקת הפתיחה של מניה שנרשמה למסחר זה עתה. הטענה המשותפת לכולן זהה. כל מי שביצע עסקה לאחר אותו רגע שילם, בממוצע, את מחיר ה-anchored VWAP. לכן מחיר מעל הקו מתאר משתתף ממוצע שנמצא ברווח על הנייר.
זה החלק שבדרך כלל אינו נאמר. בחירת נקודת העוגן היא שיפוט אנליטי, והתוצאה משתנה בהתאם אליה. התרשים שלהלן מציב את אותה מניה בנקודת העוגן בתחילת כל אחד מ-12 החודשים האחרונים ומחשב את המחיר הממוצע ששולם מאותו חודש ועד תאריך סיום קבוע.
ה-SQL המדויק מאחורי כל מספר
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.mעיגון ב-Jul 2025 מציב את המחיר הממוצע ששולם על 259.52, והנעילה האחרונה בתקופה נמדדת מולו ב-11.5% — נתון חיובי כאשר הנעילה הייתה מעל הקו. עיגון ב-Jun 2026 מניב 294.07 ו--1.6%. אותה מניה, אותו מחיר אחרון, ו-12 מסקנות שונות בשאלה אם המחזיקים מאז נקודת העוגן נמצאים מעל מחיר העלות. החישוב עצמו אינו בוחר עבורכם את נקודת העוגן. ניתן להזיז עוגן שנבחר בדיעבד עד שיתמוך במסר שהתרשים אמור להעביר. לכן תאריך העוגן צריך להופיע בכיתוב של כל תרשים anchored VWAP שאתם קוראים.
כיצד מחשבים anchored VWAP ב-Python?
שתי הסדרות מתקבלות במעבר יחיד על פני הנרות. הסקריפט שלהלן כתוב ב-Python 3 עם ספריית התקן בלבד, ללא חבילות וללא רשת. הוא קורא 30 נרות ומדפיס את סדרת הסשן לצד הסדרה anchored. לאחר מכן הוא מדווח על הנר הראשון שבו המחיר חצה בחזרה את קו ה-anchored VWAP. הנרות נוצרו לצורך ההדגמה. אם תפעילו את אותה לולאה על נרות אמיתיים, החישוב לא ישתנה.
"""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")
שני זוגות המונים הם כל הרעיון. session_pv ו-session_vol מתאפסים בכל פעם שהתאריך משתנה. anchor_pv ו-anchor_vol לעולם אינם מתאפסים. כל מה שנעשה לאחר מכן הוא הדפסה.
מדוע הקו anchored מפסיק לנוע
anchored VWAP נעשה קשה יותר להזזה ככל שהוא מתבגר, מסיבה מכנית. כל נר חדש נכנס לממוצע במשקל השווה למחזור שלו חלקי המחזור הכולל מאז נקודת העוגן. ביום השני, סשן אחד עשוי להוות מחצית מהסכום הכולל. 200 סשנים מאוחר יותר, אותו סשן מהווה חלקיק של אחוז. התרשים שלהלן מודד את המשקל הזה על נרות של Apple, בקבוצות של 10 סשנים.
ה-SQL המדויק מאחורי כל מספר
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_anchorבמהלך 10 הסשנים הראשונים, הנר הנכנס משפיע על 30.09% מהקו, כאשר נר העוגן עצמו אחראי לכל המשקל. עד סשן 130, משקלו של הנר החדש ביותר יורד ל-2.14%. מקריאת התרשימים האלה עולות שתי מסקנות. עוגן ישן משרטט קו כמעט שטוח, שמגיב בקושי למתרחש כעת. עוגן חדש משרטט קו שנע במהירות סביב המחיר וחוצה אותו לעיתים קרובות. אף אחד מהם אינו נכון יותר. מדובר באותה נוסחה בגילים שונים. כדי לקבל מדד ישיר לכמות המחזור הנכנסת ביחס לרגיל, מחזור יומי ממוצע ו-מחזור יחסי מודדים זאת.
מה anchored VWAP מתיימר להראות?
הטענה המקובלת היא שמדובר במדד למיקום המחזיקים. כאשר נקודת העוגן מוצבת על אירוע, הקו מייצג את המחיר הממוצע ששילמו כל מי שביצעו עסקאות מאז. לכן מחיר מעל הקו מתאר את רוב המחזיקים כשהם ברווח על הנייר, ומחיר מתחת לקו מתאר את המצב ההפוך. התרשים שלהלן מציב את נקודת העוגן של חמש מניות צריכה מוכרות בשער הנעילה היומי הנמוך ביותר שכל אחת מהן הציגה ב-12 החודשים האחרונים, ולאחר מכן מודד את הנעילה האחרונה בתקופה מול הממוצע שהתקבל.
ה-SQL המדויק מאחורי כל מספר
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 DESCחמש המניות נעות מ-SPY ב-10.4% ועד MSFT ב-1.3%, כאשר כל אחת נמדדת ביחס לתאריך העוגן שלה. פער זה מתאר את מה שאירע, וחשוב לדייק בגבולות המסקנה. anchored VWAP הוא נתון תיאורי המחושב ממחירים וממחזורים שכבר התבצעו, ולא תחזית או כלל בעל יתרון מוכח במחקרים שפורסמו. הוא אינו כולל מידע שאינו קיים כבר בהיסטוריית המחירים והמחזורים, ואת נקודת העוגן בחר אדם. כתקציר של המסחר מאז תאריך מסוים, הוא מדד ישיר. כקביעה חד-משמעית, נקודת העוגן היא שמדברת.
שאלות נפוצות
מה ההבדל בין VWAP לבין anchored VWAP?
VWAP של סשן מאפס את הסכומים המצטברים בכל פתיחת מסחר, ולכן הוא מתאר רק את היום הנוכחי. anchored VWAP מתחיל את הסכומים בנר שאתם בוחרים ואינו מתאפס, ולכן הוא מתאר את המחיר הממוצע ששולם בכל הסשנים מאז אותו נר.
היכן סוחרים מציבים את נקודת העוגן של VWAP?
בחירות נפוצות הן תאריך פרסום דוחות כספיים, הנר הראשון של פער מחיר, שיא או שפל תנודתיים, והיום הראשון למסחר של מניה חדשה. כל נר יכול לשמש נקודת עוגן, ותאריך העוגן הוא הנתון שהקורא צריך לדעת כדי לפרש את הקו.
האם anchored VWAP מתאפס במהלך הלילה?
לא, וזו התכונה המגדירה אותו. הסכום המצטבר של מחיר כפול מחזור והסכום המצטבר של המחזור ממשיכים לעבור את נעילת המסחר, ומתעדכנים שוב בסשן הבא, גם אם חלפו סשנים רבים.
האם anchored VWAP חוזה משהו?
זהו נתון תיאורי ולא תחזית. הוא מסכם את המחירים שכבר שולמו מאז נקודת העוגן. שינוי נקודת העוגן משנה את הקו ועלול להפוך את המסקנה הנראית לעין. לכן כל טענה המבוססת עליו יציבה רק במידה שההצדקה לתאריך העוגן יציבה.
האם אפשר לחשב anchored VWAP על נרות יומיים?
כן. התרשימים בעמוד זה משתמשים בנרות יומיים, כאשר VWAP של כל סשן משמש כמחיר הנר. בתרשימים תוך-יומיים משתמשים במקום זאת בנרות של דקה. הנוסחה זהה בשתי הרזולוציות, ורק גודל התוספות משתנה.
כל תרשים שלעיל מגיע עם שאילתת SQL שהפיקה אותו, כך שתוכלו לפתוח אותו ולשנות בעצמכם את תאריך העוגן. כדי להריץ את אותם סכומים מצטברים מתאריך שמעניין אתכם, בקשו זאת באנגלית פשוטה במסוף Strasmore.