Strasmore Research
शिक्षण Matt Connorद्वारे Matt Connor

Anchored VWAP: सूत्र आणि उपयोग स्पष्ट

Anchored VWAP निवडलेल्या बारपासून संचयी सरासरी सुरू करतो आणि रीसेट होत नाही. साध्या Python सूत्रातून anchor बदलल्यावर उत्तर कसे बदलते ते समजा.

Anchored VWAP हा एक व्हॉल्यूम-वेटेड सरासरी किंमत निर्देशक आहे. तुम्ही निवडलेल्या एका बारपासून त्याची संचयी गणना सुरू होते आणि ती कधीही रीसेट होत नाही. Session VWAP प्रत्येक बाजारउघडणीवेळी पुन्हा सुरू होतो. त्यामुळे तो केवळ आज सरासरी शेअर कोणत्या किमतीला व्यवहारात बदलला हे सांगतो. Anchored VWAP वेगळ्या प्रश्नाचे उत्तर देतो: तुम्ही सुरुवातीचा बिंदू म्हणून निवडलेल्या क्षणापासून सरासरी शेअर कोणत्या किमतीला व्यवहारात बदलला?

Anchored VWAP म्हणजे काय?

दोन्ही प्रकारांत एकच गणित वापरले जाते. सुरुवातीपासून प्रत्येक बारची किंमत त्या बारच्या व्हॉल्यूमने गुणा करा आणि त्याची संचयी बेरीज ठेवा. व्हॉल्यूमची स्वतंत्र संचयी बेरीजही ठेवा. पहिल्या बेरजेला दुसऱ्या बेरजेने भागा. गणिती स्वरूपात, nव्या बारवरील anchored VWAP म्हणजे anchor barपासून nव्या बारपर्यंत किंमत × व्हॉल्यूमची बेरीज, त्याच बारमधील व्हॉल्यूमच्या बेरजेने भागलेली.

बारची किंमत सामान्यतः त्याची typical price असते. ती high, low आणि close यांची सरासरी असते. Feedमध्ये बारचा स्वतःचा VWAP उपलब्ध असल्यास तोही वापरला जाऊ शकतो.

दोन्ही बेरजांमधून कोणतीही जुनी माहिती काढली जात नाही. 50-day moving averageमध्ये नवी observation घेताना सर्वात जुनी observation काढली जाते. त्यामुळे तो बदलू शकतो. Anchored VWAPमध्ये मात्र केवळ बेरीज होत राहते. त्यामुळे त्याची स्मृती कायम राहते. Session VWAPमध्ये प्रत्येक market openवेळी दोन्ही बेरीज शून्यावर आणल्या जातात. त्यामुळे त्याचा anchor हा opening bell असलेला anchored VWAP समजता येतो.

VWAP आणि anchored VWAPमध्ये काय फरक आहे?

खालील panelमध्ये एका quarterमधील Appleच्या daily barsवर दोन्ही निर्देशक दाखवले आहेत. session_vwap स्तंभ प्रत्येक स्वतंत्र sessionमधील volume weighted average price दाखवतो. त्यामुळे दररोज नवी किंमत मिळते. anchored_vwap स्तंभ windowच्या पहिल्या sessionपासून सुरू होतो आणि त्यानंतरची माहिती जमा करत जातो.

क्वेरीदैनिक सत्र 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 sessionsमध्ये, Apr 1 ते Jun 30 या कालावधीत, daily series बाजारातील व्यवहारांसोबत हलते. Anchored series मात्र हळूहळू वळते. पहिल्या दिवशी एका sessionमध्येच संपूर्ण इतिहास समाविष्ट असल्याने anchored line 255.02वर सुरू होते. Windowच्या शेवटी ती 286.86वर पोहोचते. त्या वेळी अंतिम session VWAP 288.09 असतो. या आकारातून मुख्य मुद्दा स्पष्ट होतो. सुरुवातीला anchored line daily lineच्या जवळ राहते. नंतर तिच्यामागील व्हॉल्यूम वाढत गेल्याने ती सपाट होत जाते.

लोक anchor कुठे ठेवतात?

लोकप्रिय anchors म्हणजे earnings release, gapचा पहिला bar, 52-week low किंवा नव्याने सूचीबद्ध झालेल्या शेअरचा opening print. या सर्वांमागील दावा एकच आहे. त्या क्षणानंतर व्यवहार करणाऱ्या सर्वांनी सरासरी anchored VWAPच्या आसपास किंमत दिली. त्यामुळे त्या lineच्या वरची किंमत सरासरी सहभागी paper gainमध्ये असल्याचे दर्शवते.

सहसा न सांगितला जाणारा मुद्दा येथे आहे. Anchor ही विश्लेषकाची निवड असते आणि उत्तर त्या निवडीसोबत बदलते. खालील panelमध्ये त्याच शेअरचा anchor मागील बारा महिन्यांपैकी प्रत्येक महिन्याच्या सुरुवातीला ठेवला आहे. त्यानंतर त्या महिन्यापासून एका निश्चित अंतिम तारखेपर्यंत दिलेली सरासरी किंमत मोजली आहे.

क्वेरीतोच स्टॉक आणि तीच अंतिम किंमत, बारा वेगवेगळे अँकर (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 येथे anchor ठेवल्यास दिलेली सरासरी किंमत 259.52 येते. Windowचा अंतिम close त्याच्या तुलनेत 11.5% मोजतो. Close lineच्या वर असल्यास हा आकडा positive असतो. Jun 2026 येथे anchor ठेवल्यास निकाल 294.07 आणि -1.6% येतो. शेअर तोच आहे आणि अंतिम किंमतही तीच आहे. मात्र anchorनंतरचे holders नफ्यात आहेत की नाहीत याबाबत बारा वेगवेगळे निष्कर्ष मिळतात. गणित स्वतः anchor निवडत नाही. एखाद्या घटनेनंतर निवडलेला anchor chartला अपेक्षित अर्थ देईपर्यंत बदलता येतो. म्हणून तुम्ही पाहत असलेल्या प्रत्येक anchored VWAP chartच्या captionमध्ये anchor date असणे आवश्यक आहे.

Pythonमध्ये anchored VWAP कसा मोजतात?

दोन्ही seriesची गणना barsवरून एका passमध्ये करता येते. खालील script standard library Python 3मध्ये आहे. त्यासाठी कोणतेही packages किंवा network आवश्यक नाही. हा script तीस bars वाचतो आणि session seriesच्या शेजारी anchored series छापतो. त्यानंतर किंमत anchored lineला पुन्हा ओलांडते तो पहिला bar दाखवतो. या उदाहरणासाठी bars काल्पनिक आहेत. हाच loop real barsवर चालवला तरी गणित बदलत नाही.

"""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")

दोन counter pairs ही संपूर्ण कल्पना आहे. session_pv आणि session_vol तारीख बदलली की शून्यावर आणले जातात. anchor_pv आणि anchor_vol मात्र कधीही reset होत नाहीत. त्यानंतर उरलेले काम म्हणजे output छापणे.

Anchored lineची हालचाल का कमी होते?

Anchored VWAP जुना होत गेल्यावर तो हलवणे कठीण होते. यामागे यांत्रिक कारण आहे. प्रत्येक नव्या barचे वजन हे त्याच्या व्हॉल्यूमचे anchorनंतरच्या एकूण व्हॉल्यूमशी असलेले प्रमाण असते. दुसऱ्या दिवशी एका sessionचा वाटा एकूण व्हॉल्यूमच्या निम्मा असू शकतो. 200 sessionsनंतर त्याच sessionचा वाटा एक टक्क्याच्या काही अंशाएवढा राहतो. खालील panelमध्ये Appleच्या barsवर हे वजन दहा-दहा sessionsच्या गटांमध्ये मोजले आहे.

क्वेरीसर्वात नवीन सत्र अँकर केलेला 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

पहिल्या दहा sessionsमध्ये येणारा bar lineच्या सरासरी 30.09% इतका भाग बदलतो. Anchor bar स्वतः संपूर्ण वजनाचा भाग असतो. 130व्या sessionपर्यंत नवीनतम barचे वजन 2.14%पर्यंत कमी होते. हे charts वाचताना दोन निष्कर्ष निघतात. जुना anchor जवळपास सपाट line तयार करतो आणि सध्याच्या हालचालींना फारसा प्रतिसाद देत नाही. नवीन anchor किंमतीभोवती वेगाने हलणारी line तयार करतो आणि ती किंमतीला वारंवार cross करते. यापैकी कोणताही अधिक योग्य नाही. वेगवेगळ्या वयातील ही एकच formula आहे. सामान्यपेक्षा किती व्हॉल्यूम येत आहे हे थेट पाहण्यासाठी सरासरी दैनिक व्हॉल्यूम आणि relative volume याचा उपयोग होतो.

Anchored VWAP काय दर्शवतो?

सामान्य दावा हा positioning readचा असतो. एखाद्या घटनेवर anchor ठेवला तर त्यानंतर व्यवहार करणाऱ्या सर्वांनी दिलेली सरासरी किंमत line दाखवते. त्यामुळे lineच्या वरची किंमत बहुसंख्य holders paper gainमध्ये असल्याचे दर्शवते. Lineच्या खालील किंमत याच्या उलट स्थिती दर्शवते. खालील panelमध्ये पाच household namesसाठी मागील बारा महिन्यांतील सर्वात कमी daily closeवर anchor ठेवला आहे. त्यानंतर windowच्या अंतिम closeची संबंधित average priceशी तुलना केली आहे.

क्वेरीप्रत्येक नावाच्या मागील बारा महिन्यांतील स्वतःच्या नीचांकी क्लोजवर अँकर केलेला
प्रत्येक आकड्यामागील अचूक 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

पाच names SPY येथे 10.4%पासून MSFT येथे 1.3%पर्यंत पसरले आहेत. प्रत्येकाची मोजणी त्याच्या स्वतःच्या anchor dateच्या तुलनेत केली आहे. हा फरक काय घडले ते दर्शवतो. मात्र त्याच्या मर्यादा स्पष्टपणे समजून घेणे आवश्यक आहे. Anchored VWAP हा आधीच नोंदलेल्या prices आणि volumesवर आधारित descriptive statistic आहे. तो forecast नाही आणि published researchमध्ये सिद्ध झालेला edge असलेला नियमही नाही. Price आणि volume historyमध्ये आधीपासून नसलेली कोणतीही माहिती त्यात नसते. तसेच हा निकाल देणारा anchor एखाद्या व्यक्तीने निवडलेला असतो. एखाद्या तारखेपासूनच्या tapeचा सारांश म्हणून त्याचा वापर प्रामाणिक आहे. अंतिम verdict म्हणून वापरल्यास निष्कर्षाला दिशा anchorच देत असतो.

वारंवार विचारले जाणारे प्रश्न

VWAP आणि anchored VWAPमध्ये काय फरक आहे?

Session VWAP प्रत्येक market openवेळी आपली संचयी बेरीज reset करतो. त्यामुळे तो केवळ चालू दिवसाचे वर्णन करतो. Anchored VWAP तुमच्या निवडीच्या बारपासून बेरीज सुरू करतो आणि ती कधीही reset करत नाही. त्यामुळे त्या बारनंतरच्या प्रत्येक sessionमधील दिलेली सरासरी किंमत तो दर्शवतो.

Traders VWAPचा anchor कुठे ठेवतात?

सामान्य पर्याय म्हणजे earnings date, gapचा पहिला bar, swing high किंवा swing low आणि नव्या listingचा पहिला trading day. कोणताही bar anchor म्हणून वापरता येतो. मात्र lineचा अर्थ लावण्यासाठी anchor date माहित असणे आवश्यक आहे.

Anchored VWAP overnight reset होतो का?

नाही. हाच त्याचा मूलभूत गुणधर्म आहे. price × volumeची running sum आणि volumeची running sum दोन्ही market closeनंतरही कायम राहतात. पुढील sessionमध्ये, कितीही sessionsनंतर ती गणना पुन्हा पुढे सुरू होते.

Anchored VWAP काही भाकीत करतो का?

तो forecast नसून descriptive statistic आहे. Anchorनंतर प्रत्यक्षात किती किंमत दिली गेली याचा तो सारांश देतो. Anchor बदलल्यास line बदलते आणि निष्कर्षाचा दिसणारा अर्थही उलटू शकतो. त्यामुळे त्यावर आधारित कोणताही दावा त्या anchor dateच्या निवडीइतकाच मजबूत असतो.

Daily barsवर anchored VWAP मोजता येतो का?

होय. या पृष्ठावरील panelsमध्ये daily bars वापरले आहेत आणि प्रत्येक session VWAP ही bar price म्हणून घेतली आहे. Intraday chartsमध्ये त्याऐवजी minute bars वापरले जातात. दोन्ही resolutionsमध्ये formula समान असते. फक्त incrementsचा आकार बदलतो.


वरील प्रत्येक panelसोबत तो तयार करणारा SQL दिलेला आहे. त्यामुळे तुम्ही panel उघडून anchor date स्वतः बदलू शकता. तुम्हाला महत्त्वाच्या असलेल्या तारखेपासून हीच running totalsची गणना चालवायची असल्यास Strasmore terminalवर plain Englishमध्ये विनंती करा.