Anchored VWAP: فارمولا اور استعمال کیا ہے؟
Anchored VWAP آپ کے منتخب bar سے running average شروع کرتا ہے اور reset نہیں ہوتا۔ سادہ Python formula دیکھیں اور جانیں کہ anchor بدلنے سے نتیجہ کیسے بدلتا ہے۔
Anchored VWAP ایک volume weighted average price ہے جس کے running totals آپ کے منتخب کردہ ایک bar سے شروع ہوتے ہیں اور پھر کبھی reset نہیں ہوتے۔ Session VWAP ہر opening bell پر دوبارہ شروع ہوتا ہے، اس لیے یہ صرف یہ بتاتا ہے کہ آج اوسط شیئر کس قیمت پر trade ہوا ہے۔ Anchored version ایک مختلف سوال کا جواب دیتا ہے: آپ کے منتخب کردہ starting point سے اب تک اوسط شیئر کس قیمت پر trade ہوا ہے۔
Anchored VWAP کیا ہے؟
دونوں versions میں arithmetic ایک جیسی ہوتی ہے۔ آغاز سے ہر bar لیں، اس کی قیمت کو اسی bar کے volume سے ضرب دیں اور running total برقرار رکھیں۔ volume کا الگ running total بھی رکھیں۔ پہلے total کو دوسرے total سے divide کریں۔ تفصیل کے ساتھ، bar n پر anchored VWAP، anchor bar سے bar n تک price اور volume کی حاصل ضربوں کے مجموعے کو انہی bars کے volume کے مجموعے سے تقسیم کرنے کے برابر ہے۔
Bar کی price عموماً اس کی typical price ہوتی ہے، یعنی اس کے high، low اور close کی اوسط۔ اگر feed bar کا VWAP شائع کرے تو وہ بھی استعمال کیا جا سکتا ہے۔
دونوں totals میں سے کچھ بھی کبھی حذف نہیں ہوتا۔ 50-day moving average ہر نئی observation شامل کرتے وقت اپنی قدیم ترین observation نکال دیتا ہے، اسی وجہ سے وہ رخ بدل سکتا ہے۔ Anchored VWAP صرف اضافہ کرتا ہے، اس لیے اس کی memory مستقل رہتی ہے۔ Session VWAP میں یہی calculation ہر open پر دونوں totals کو zero کر کے کی جاتی ہے۔ یوں یہ ایسا anchored VWAP ہے جس کا anchor opening bell ہے۔
VWAP اور anchored VWAP میں کیا فرق ہے؟
نیچے دیا گیا panel ایک quarter کے دوران Apple کے daily bars پر دونوں calculations چلاتا ہے۔ session_vwap column ہر single session کے اندر volume weighted average price دکھاتا ہے، اس لیے ہر دن ایک نیا number آتا ہے۔ anchored_vwap column window کے پہلے session سے شروع ہوتا ہے اور وہاں سے total جمع کرتا ہے۔
ہر عدد کے پیچھے موجود درست 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 date62 sessions کے دوران، Apr 1 سے Jun 30 تک، daily series tape کے ساتھ حرکت کرتی ہے جبکہ anchored series آہستہ آہستہ خم کھاتی ہے۔ پہلے دن ایک session ہی پوری history ہوتا ہے، اس لیے anchored line 255.02 پر کھلتی ہے۔ Window کے اختتام تک یہ 286.86 پر پہنچتی ہے، جبکہ آخری session VWAP 288.09 ہوتی ہے۔ اصل سبق اس کی shape میں ہے۔ Anchored line ابتدا میں daily line کو قریب سے follow کرتی ہے، پھر اس کے پیچھے volume جمع ہونے کے ساتھ flat ہونے لگتی ہے۔
لوگ anchor کہاں لگاتے ہیں؟
عام anchors میں earnings release، gap کا پہلا bar، 52-week low، یا نئے listed stock کا opening print شامل ہیں۔ ان سب کے پیچھے بنیادی دعویٰ ایک ہی ہے۔ اس لمحے کے بعد transaction کرنے والے ہر شخص نے اوسطاً anchored VWAP پر ادائیگی کی، اس لیے line سے اوپر کی price یہ ظاہر کرتی ہے کہ اوسط participant کو paper gain حاصل ہے۔
یہ وہ حصہ ہے جو عموماً بیان نہیں کیا جاتا۔ Anchor ایک judgment call ہے، اور جواب بھی اسی کے ساتھ بدلتا ہے۔ نیچے دیا گیا panel اسی stock کو گزشتہ بارہ months میں سے ہر ماہ کے آغاز پر anchor کرتا ہے، پھر اس ماہ سے ایک مقررہ آخری تاریخ تک ادا کی گئی اوسط price نکالتا ہے۔
ہر عدد کے پیچھے موجود درست 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.mJul 2025 پر anchoring سے average price paid 259.52 آتی ہے۔ Window کی آخری close اس کے مقابل 11.5% بنتی ہے۔ Close line سے اوپر ہو تو یہ figure مثبت ہوتی ہے۔ Jun 2026 پر anchoring 294.07 اور -1.6% دیتی ہے۔ Stock وہی ہے، آخری price وہی ہے، مگر anchor کے بعد سے holders کی مالی پوزیشن کے بارے میں بارہ مختلف نتائج سامنے آتے ہیں۔ Arithmetic آپ کے لیے anchor منتخب نہیں کرتی۔ ماضی کا کوئی anchor بعد میں اس وقت تک بدلا جا سکتا ہے جب تک وہ chart کے مطلوبہ مؤقف کی حمایت نہ کرے۔ اسی لیے ہر anchored VWAP chart کے caption میں anchor date درج ہونی چاہیے۔
Python میں anchored VWAP کیسے calculate کرتے ہیں؟
دونوں series bars پر ایک ہی pass سے حاصل ہو جاتی ہیں۔ نیچے دیا گیا script standard library Python 3 ہے۔ اس میں کوئی package یا network استعمال نہیں ہوتا۔ یہ تیس bars پڑھتا ہے، session series کو anchored series کے ساتھ print کرتا ہے، پھر وہ پہلا bar بتاتا ہے جہاں price دوبارہ anchored line کو cross کرتی ہے۔ Demonstration کے لیے bars فرضی ہیں۔ اسی loop کو real bars پر چلائیں تو arithmetic تبدیل نہیں ہوتی۔
"""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")
Counters کے دونوں pairs ہی پوری concept کی بنیاد ہیں۔ session_pv اور session_vol date بدلنے پر zero ہو جاتے ہیں۔ anchor_pv اور anchor_vol کبھی zero نہیں ہوتے۔ اس کے بعد باقی کام صرف printing کا ہے۔
Anchored line حرکت کرنا کیوں چھوڑ دیتی ہے؟
Anchored VWAP عمر بڑھنے کے ساتھ move کرنا مشکل ہو جاتا ہے۔ اس کی وجہ mechanical ہے۔ ہر نیا bar average میں اتنے weight کے ساتھ شامل ہوتا ہے جو anchor کے بعد کے کل volume میں اس bar کے volume کے برابر ہوتا ہے۔ دوسرے دن ایک session کل volume کا نصف ہو سکتا ہے۔ دو سو sessions بعد یہی session one percent کے بھی ایک حصے کے برابر رہ جاتا ہے۔ نیچے دیا گیا panel Apple bars پر اس weight کو دس دس sessions کے blocks میں measure کرتا ہے۔
ہر عدد کے پیچھے موجود درست 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پہلے دس sessions میں آنے والا bar line کو اوسطاً 30.09% move کرتا ہے، جبکہ anchor bar خود اس پورے اثر کا ذمہ دار ہوتا ہے۔ Session 130 تک newest bar کا weight کم ہو کر 2.14% رہ جاتا ہے۔ ان charts کو پڑھتے وقت دو باتیں سامنے آتی ہیں۔ پرانا anchor تقریباً flat line بناتا ہے جو موجودہ حرکت پر بہت کم ردِعمل دیتی ہے۔ نیا anchor ایسی line بناتا ہے جو price کے گرد تیزی سے گھومتی ہے اور اسے بار بار cross کرتی ہے۔ ان میں سے کوئی زیادہ درست نہیں۔ یہ مختلف عمر میں ایک ہی formula ہیں۔ معمول کے مقابلے میں کتنا volume آ رہا ہے، یہ براہِ راست جانچنے کے لیے average daily volume اور relative volume استعمال کیے جاتے ہیں۔
Anchored VWAP کیا ظاہر کرنے کا دعویٰ کرتا ہے؟
عام دعویٰ positioning سے متعلق ہوتا ہے۔ اگر anchor کسی event پر رکھا جائے تو line اس کے بعد transaction کرنے والے تمام participants کی average price paid ہوتی ہے۔ اس لیے line سے اوپر کی price یہ ظاہر کرتی ہے کہ اکثریت paper gain پر hold کر رہی ہے، جبکہ line سے نیچے کی price اس کے برعکس صورتِ حال دکھاتی ہے۔ نیچے دیا گیا panel پانچ معروف household names کو گزشتہ بارہ months میں ان کے شائع کردہ lowest daily close پر anchor کرتا ہے، پھر window کی آخری close کو resulting average کے مقابل measure کرتا ہے۔
ہر عدد کے پیچھے موجود درست 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پانچ names SPY سے 10.4% تک، اور پھر MSFT سے 1.3% تک پھیلتے ہیں۔ ہر name کو اس کی اپنی anchor date کے مقابل measure کیا گیا ہے۔ یہ spread جو کچھ ہوا اسے بیان کرتا ہے، مگر اس کی حدود واضح رہنی چاہییں۔ Anchored VWAP prices اور volumes سے calculated ایک descriptive statistic ہے جو پہلے ہی print ہو چکے ہیں۔ یہ forecast نہیں اور published research میں ثابت شدہ edge رکھنے والا rule بھی نہیں۔ اس میں price اور volume history سے باہر کی کوئی information نہیں ہوتی۔ اسے پیدا کرنے والا anchor بھی کسی شخص نے منتخب کیا ہوتا ہے۔ کسی date کے بعد tape کا خلاصہ سمجھ کر اسے پڑھیں تو یہ honest ہے۔ اسے حتمی verdict سمجھیں تو اصل بات anchor بتا رہا ہوتا ہے۔
عمومی سوالات
VWAP اور anchored VWAP میں کیا فرق ہے؟
Session VWAP ہر market open پر اپنے running totals reset کرتا ہے، اس لیے یہ صرف موجودہ دن کو describe کرتا ہے۔ Anchored VWAP اپنے totals آپ کے منتخب کردہ bar سے شروع کرتا ہے اور کبھی reset نہیں ہوتا، اس لیے یہ اس bar کے بعد ہر session میں ادا کی گئی average price کو describe کرتا ہے۔
Traders VWAP پر anchor کہاں لگاتے ہیں؟
عام انتخاب earnings date، gap کا پہلا bar، swing high یا swing low، اور نئی listing کے پہلے trading day پر مشتمل ہوتے ہیں۔ کوئی بھی bar anchor بن سکتا ہے۔ Line کو interpret کرنے کے لیے reader کو anchor date معلوم ہونا ضروری ہے۔
کیا anchored VWAP overnight reset ہوتا ہے؟
نہیں۔ یہی اس کی defining property ہے۔ price اور volume کی حاصل ضرب کا running sum اور volume کا running sum دونوں close کے بعد بھی برقرار رہتے ہیں، پھر اگلے session میں دوبارہ چلتے ہیں، چاہے اس وقت تک کتنے ہی sessions گزر چکے ہوں۔
کیا anchored VWAP کسی چیز کی پیش گوئی کرتا ہے؟
یہ forecast کے بجائے descriptive statistic ہے۔ یہ anchor کے بعد اب تک ادا کی گئی price کا خلاصہ پیش کرتا ہے۔ Anchor بدلنے سے line بدل جاتی ہے اور بظاہر نتیجہ بھی الٹ سکتا ہے۔ اس لیے اس پر مبنی ہر دعویٰ اتنا ہی مضبوط ہے جتنا اس anchor date کے انتخاب کا جواز۔
کیا anchored VWAP daily bars پر calculate کیا جا سکتا ہے؟
ہاں۔ اس page کے panels daily bars استعمال کرتے ہیں، جہاں ہر session کا VWAP bar price ہوتا ہے۔ Intraday charts میں اس کے بجائے minute bars استعمال ہوتے ہیں۔ دونوں resolutions پر formula ایک جیسا رہتا ہے۔ صرف increments کا size بدلتا ہے۔
اوپر موجود ہر panel کے ساتھ وہ SQL بھی دیا گیا ہے جس سے اسے تیار کیا گیا۔ آپ اسے کھول کر anchor date خود تبدیل کر سکتے ہیں۔ اپنی دلچسپی کی تاریخ سے یہی running totals چلانے کے لیے Strasmore terminal پر plain English میں درخواست دیں۔