Strasmore Research
למידה Matt Connorמאת Matt Connor

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 מתחילה בסשן הראשון של התקופה ומצטברת משם.

שאילתהVWAP של סשן יומי לעומת VWAP המעוגן על תאריך אחד (AAPL)
ה-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
Run this yourself

במהלך 62 סשנים, מ-Apr 1 ועד Jun 30, הסדרה היומית נעה עם המסחר, ואילו הסדרה anchored מתעקמת באיטיות. הקו anchored מתחיל ב-255.02, משום שביום הראשון סשן יחיד הוא כל ההיסטוריה, ומגיע ל-286.86 בסוף התקופה, לעומת VWAP סופי של 288.09 בסשן האחרון. צורת הקווים היא המסר. בתחילה הקו anchored עוקב מקרוב אחר הקו היומי, אך בהמשך הוא משתטח ככל שהמחזור המצטבר מאחוריו גדל.

היכן מציבים את נקודת העוגן?

נקודות עוגן נפוצות הן פרסום דוחות כספיים, הנר הראשון של פער מחיר, שפל של 52 שבועות, או עסקת הפתיחה של מניה שנרשמה למסחר זה עתה. הטענה המשותפת לכולן זהה. כל מי שביצע עסקה לאחר אותו רגע שילם, בממוצע, את מחיר ה-anchored VWAP. לכן מחיר מעל הקו מתאר משתתף ממוצע שנמצא ברווח על הנייר.

זה החלק שבדרך כלל אינו נאמר. בחירת נקודת העוגן היא שיפוט אנליטי, והתוצאה משתנה בהתאם אליה. התרשים שלהלן מציב את אותה מניה בנקודת העוגן בתחילת כל אחד מ-12 החודשים האחרונים ומחשב את המחיר הממוצע ששולם מאותו חודש ועד תאריך סיום קבוע.

שאילתהאותה מניה ואותו מחיר אחרון, שנים־עשר עוגנים שונים (AAPL)
ה-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
Run this yourself

עיגון ב-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 סשנים.

שאילתהעד כמה הסשן האחרון יכול להזיז VWAP מעוגן (AAPL)
ה-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
Run this yourself

במהלך 10 הסשנים הראשונים, הנר הנכנס משפיע על 30.09% מהקו, כאשר נר העוגן עצמו אחראי לכל המשקל. עד סשן 130, משקלו של הנר החדש ביותר יורד ל-2.14%. מקריאת התרשימים האלה עולות שתי מסקנות. עוגן ישן משרטט קו כמעט שטוח, שמגיב בקושי למתרחש כעת. עוגן חדש משרטט קו שנע במהירות סביב המחיר וחוצה אותו לעיתים קרובות. אף אחד מהם אינו נכון יותר. מדובר באותה נוסחה בגילים שונים. כדי לקבל מדד ישיר לכמות המחזור הנכנסת ביחס לרגיל, מחזור יומי ממוצע ו-מחזור יחסי מודדים זאת.

מה anchored VWAP מתיימר להראות?

הטענה המקובלת היא שמדובר במדד למיקום המחזיקים. כאשר נקודת העוגן מוצבת על אירוע, הקו מייצג את המחיר הממוצע ששילמו כל מי שביצעו עסקאות מאז. לכן מחיר מעל הקו מתאר את רוב המחזיקים כשהם ברווח על הנייר, ומחיר מתחת לקו מתאר את המצב ההפוך. התרשים שלהלן מציב את נקודת העוגן של חמש מניות צריכה מוכרות בשער הנעילה היומי הנמוך ביותר שכל אחת מהן הציגה ב-12 החודשים האחרונים, ולאחר מכן מודד את הנעילה האחרונה בתקופה מול הממוצע שהתקבל.

שאילתהמעוגן בשער הסגירה הנמוך ביותר של כל מניה ב־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
Run this yourself

חמש המניות נעות מ-SPY ב-10.4% ועד MSFT ב-1.3%, כאשר כל אחת נמדדת ביחס לתאריך העוגן שלה. פער זה מתאר את מה שאירע, וחשוב לדייק בגבולות המסקנה. anchored VWAP הוא נתון תיאורי המחושב ממחירים וממחזורים שכבר התבצעו, ולא תחזית או כלל בעל יתרון מוכח במחקרים שפורסמו. הוא אינו כולל מידע שאינו קיים כבר בהיסטוריית המחירים והמחזורים, ואת נקודת העוגן בחר אדם. כתקציר של המסחר מאז תאריך מסוים, הוא מדד ישיר. כקביעה חד-משמעית, נקודת העוגן היא שמדברת.

שאלות נפוצות

מה ההבדל בין VWAP לבין anchored VWAP?

VWAP של סשן מאפס את הסכומים המצטברים בכל פתיחת מסחר, ולכן הוא מתאר רק את היום הנוכחי. anchored VWAP מתחיל את הסכומים בנר שאתם בוחרים ואינו מתאפס, ולכן הוא מתאר את המחיר הממוצע ששולם בכל הסשנים מאז אותו נר.

היכן סוחרים מציבים את נקודת העוגן של VWAP?

בחירות נפוצות הן תאריך פרסום דוחות כספיים, הנר הראשון של פער מחיר, שיא או שפל תנודתיים, והיום הראשון למסחר של מניה חדשה. כל נר יכול לשמש נקודת עוגן, ותאריך העוגן הוא הנתון שהקורא צריך לדעת כדי לפרש את הקו.

האם anchored VWAP מתאפס במהלך הלילה?

לא, וזו התכונה המגדירה אותו. הסכום המצטבר של מחיר כפול מחזור והסכום המצטבר של המחזור ממשיכים לעבור את נעילת המסחר, ומתעדכנים שוב בסשן הבא, גם אם חלפו סשנים רבים.

האם anchored VWAP חוזה משהו?

זהו נתון תיאורי ולא תחזית. הוא מסכם את המחירים שכבר שולמו מאז נקודת העוגן. שינוי נקודת העוגן משנה את הקו ועלול להפוך את המסקנה הנראית לעין. לכן כל טענה המבוססת עליו יציבה רק במידה שההצדקה לתאריך העוגן יציבה.

האם אפשר לחשב anchored VWAP על נרות יומיים?

כן. התרשימים בעמוד זה משתמשים בנרות יומיים, כאשר VWAP של כל סשן משמש כמחיר הנר. בתרשימים תוך-יומיים משתמשים במקום זאת בנרות של דקה. הנוסחה זהה בשתי הרזולוציות, ורק גודל התוספות משתנה.


כל תרשים שלעיל מגיע עם שאילתת SQL שהפיקה אותו, כך שתוכלו לפתוח אותו ולשנות בעצמכם את תאריך העוגן. כדי להריץ את אותם סכומים מצטברים מתאריך שמעניין אתכם, בקשו זאת באנגלית פשוטה במסוף Strasmore.