IV Rank بمقابلہ IV Percentile: فارمولے اور فرق
IV rank اور IV percentile کے دونوں فارمولے، ہاتھ سے جانچنے کی ایک مثال، اور وہ صورت جب ایک ہی ticker پر دونوں readings میں نمایاں فرق ہو۔
IV rank اور IV percentile کا فرق بنیادی طور پر ایک ہی data پر کی جانے والی دو الگ arithmetic calculations کا نتیجہ ہے۔ IV rank یہ دکھاتا ہے کہ آج کی implied volatility اپنے 52 ہفتوں کے range میں کہاں کھڑی ہے، یعنی lowest reading سے highest reading تک۔ IV percentile lookback window کے دوران ان trading days کا تناسب شمار کرتا ہے جو آج کی reading سے کم سطح پر بند ہوئے تھے۔ ایک ہی ticker میں، اسی دوپہر، ایک metric کی reading 18 اور دوسرے کی 70 ہو سکتی ہے۔
دو فارمولے، مکمل طور پر تحریر شدہ
IV rank = (موجودہ IV منفی 52 ہفتوں کی کم ترین IV) / (52 ہفتوں کی بلند ترین IV منفی 52 ہفتوں کی کم ترین IV) x 100
IV percentile = (window میں آج کی IV سے کم IV رکھنے والے trading days) / (window کے کل trading days) x 100
دونوں کی قدر 0 سے 100 کے درمیان ہوتی ہے۔ دونوں کے لیے ایک ہی دو inputs درکار ہوتے ہیں: اسٹاک کی روزانہ implied volatility series، اور lookback window، جو عموماً 252 trading days پر مشتمل ہوتی ہے۔ Implied volatility دراصل option market کا سالانہ تخمینہ ہے کہ اسٹاک کی قیمت میں کتنی تبدیلی آ سکتی ہے۔ یہ تخمینہ موجودہ option prices سے اخذ کیا جاتا ہے۔ implied volatility کیا ناپتی ہے میں اس کی مکمل وضاحت موجود ہے۔
دونوں indicators میں بنیادی فرق یہ ہے کہ ہر ایک window کے کتنے حصے کو دیکھتا ہے۔ IV rank صرف 252 میں سے دو دنوں کو دیکھتا ہے: سب سے بلند اور سب سے کم۔ درمیان کی تمام readings اس کے لیے اہم نہیں ہوتیں۔ IV percentile ہر دن کو یکساں اہمیت دیتا ہے اور یہ نہیں دیکھتا کہ readings ایک دوسرے سے کتنی دور تھیں۔ ایک range کے اندر position کو ظاہر کرتا ہے۔ دوسرا دنوں کی تعداد کو۔
ایک عملی مثال جسے آپ خود حساب کر کے جانچ سکتے ہیں
دس دن کی ایک فرضی IV series لیں، جس میں ہر session کی ایک reading ہو: 22، 24، 21، 60، 26، 25، 23، 27، 24، اور آج کی reading 28 ہے۔ کم ترین قدر 21 اور زیادہ ترین قدر 60 ہے۔
IV rank: (28 - 21) / (60 - 21) x 100 = 7 / 39 x 100 = 17.9۔
IV percentile: دس readings میں سے سات، یعنی 22، 24، 21، 26، 25، 23 اور 24، 28 سے کم ہیں۔ اس لیے 7 / 10 x 100 = 70.0۔
IV rank کی 17.9 کی قدر سستی volatility کی نشاندہی کرتی ہے۔ IV percentile کی 70 کی قدر یہ بتاتی ہے کہ اس window کے بیشتر دنوں میں volatility موجودہ سطح سے کم رہی ہے۔ دونوں اسی دس اعداد کی درست تشریحات ہیں۔
اب ایک قدر تبدیل کریں۔ 60 کی جگہ 30 رکھیں اور باقی نو readings کو جوں کا توں رہنے دیں۔ IV rank اب (28 - 21) / (30 - 21) x 100 = 77.8 ہو جائے گا۔ IV percentile تبدیل نہیں ہوگا؛ یہ اب بھی 70.0 رہے گا۔ ایک session، جس نے high مقرر کیا تھا، IV rank کے لیے 60 points کی اہمیت رکھتا ہے، مگر IV percentile کے لیے اس کی کوئی اہمیت نہیں۔
یہی IV rank کی بنیادی کمزوری ہے۔ Window میں ایک single spike، مثلاً earnings gap یا ایک روزہ تشویش، denominator کو بہت بڑا کر دیتا ہے اور اگلے twelve months تک rank کو نچلی سطح کے قریب محدود رکھتا ہے، حالانکہ وہ spike option chain سے بہت پہلے خارج ہو چکا ہوتا ہے۔ جب دونوں scores میں نمایاں اختلاف ہو تو عموماً اس کا مطلب ہوتا ہے کہ window کے اندر کوئی outlier موجود ہے۔ ایسی صورت میں percentile اس بات کی زیادہ درست عکاسی کرتا ہے کہ volatility نے حقیقتاً اپنا وقت کن levels پر گزارا ہے۔ جب range ہموار ہو اور دونوں extremes کو ایک سے زیادہ sessions نے تشکیل دیا ہو تو IV rank بہتر اشارہ دیتا ہے۔ دونوں میں سے کوئی بھی number direction کے بارے میں کچھ نہیں بتاتا۔
حقیقی IV series کی شکل
یہ وہ raw material ہے جس پر دونوں formulas چلتے ہیں۔ ذیل کا panel AAPL کے لیے روزانہ at-the-money implied volatility reading تیار کرتا ہے۔ اس میں expiry سے 20 سے 45 دن دور اور share price کے 5% کے اندر موجود contracts شامل ہیں۔ پھر ان readings کا ہفتہ وار average نکالا جاتا ہے۔
ہر عدد کے پیچھے موجود درست SQL
WITH daily AS
(
SELECT
date,
avg(toFloat64(implied_volatility)) * 100 AS atm_iv
FROM global_markets.options_greeks
WHERE underlying_symbol = 'AAPL'
AND date >= today() - 371
AND iv_converged = 1
AND volume > 0
AND days_to_expiry BETWEEN 20 AND 45
AND abs(toFloat64(strike_price) / toFloat64(underlying_close) - 1) < 0.05
GROUP BY date
)
SELECT
toString(toMonday(date)) AS week,
formatDateTime(toMonday(date), '%b %e, %Y') AS week_label,
round(avg(atm_iv), 2) AS aapl_atm_iv_pct,
round(min(atm_iv), 2) AS week_low_iv_pct,
round(max(atm_iv), 2) AS week_high_iv_pct
FROM daily
GROUP BY toMonday(date)
ORDER BY toMonday(date)اس series میں 54 ہفتہ وار points ہیں۔ یہ Jul 28, 2025 کے ہفتے سے شروع ہوتی ہے، جس کا average 30.03% تھا، اور Aug 3, 2026 کے ہفتے تک جاتی ہے، جہاں یہ 27.7% رہی۔ اس line کی شکل طے کرتی ہے کہ rank اور percentile ایک دوسرے سے متفق ہوں گے یا نہیں۔ ایک بلند اور الگ تھلگ spike دونوں کے درمیان فرق پیدا کرتا ہے۔ ایک مستحکم band کے اندر محدود رہنے والی line دونوں کو قریب رکھتی ہے۔ ہمارا AAPL implied volatility page وقت کے ساتھ اس نام کی حرکت دکھاتا ہے۔ اگر سوال صرف absolute level سے متعلق ہو اور اس کے ساتھ تاریخی data نہ ہو تو کیا 30% IV زیادہ ہے دیکھیں۔
آٹھ tickers میں IV rank بمقابلہ IV percentile
ایک جیسے formulas، ایک جیسا lookback، آٹھ liquid names، اور ایک ہی session۔ gap column دونوں scores کے درمیان absolute distance دکھاتا ہے۔
ہر عدد کے پیچھے موجود درست SQL
WITH daily AS
(
SELECT
underlying_symbol AS symbol,
date,
avg(toFloat64(implied_volatility)) * 100 AS atm_iv
FROM global_markets.options_greeks
WHERE underlying_symbol IN ('AAPL', 'MSFT', 'NVDA', 'AMZN', 'TSLA', 'SPY', 'QQQ', 'KO')
AND date >= today() - 371
AND iv_converged = 1
AND volume > 0
AND days_to_expiry BETWEEN 20 AND 45
AND abs(toFloat64(strike_price) / toFloat64(underlying_close) - 1) < 0.05
GROUP BY symbol, date
),
latest AS
(
SELECT
symbol,
argMax(atm_iv, date) AS iv_now,
max(date) AS as_of
FROM daily
GROUP BY symbol
)
SELECT
d.symbol AS symbol,
round(100 * (l.iv_now - min(d.atm_iv)) / nullIf(max(d.atm_iv) - min(d.atm_iv), 0), 1) AS iv_rank,
round(100 * countIf(d.atm_iv < l.iv_now) / count(), 1) AS iv_percentile,
round(abs(iv_rank - iv_percentile), 1) AS gap,
formatDateTime(any(l.as_of), '%b %e, %Y') AS as_of_label
FROM daily AS d
INNER JOIN latest AS l ON l.symbol = d.symbol
GROUP BY d.symbol, l.iv_now
ORDER BY gap DESCAug 3, 2026 تک، table میں سب سے بڑا اختلاف 35.6 points کا ہے۔ یہ AAPL میں ہے، جہاں IV rank 32.4 ہے، جبکہ IV percentile 68 ہے۔ table کے دوسرے سرے پر TSLA دونوں scores کے درمیان فرق کو 6.5 points تک محدود رکھتا ہے۔ ایک number کی بنیاد پر بنایا گیا screen، دوسرے number کی بنیاد پر بنائے گئے screen سے مختلف فہرست دیتا ہے۔ یہی عملی وجہ ہے کہ آپ کے platform پر کون سا number print ہوتا ہے، یہ جاننا ضروری ہے۔ سب سے زیادہ IV rank والے stocks screen مارکیٹ کو ان دونوں میں سے پہلے number کی بنیاد پر sort کرتا ہے۔
اس table میں ہر rank کے پیچھے موجود range inputs
موجودہ، کم ترین اور بلند ترین columns کو rank formula میں شامل کریں، تو اوپر موجود rank column دوبارہ حاصل ہو جاتا ہے۔
ہر عدد کے پیچھے موجود درست SQL
WITH daily AS
(
SELECT
underlying_symbol AS symbol,
date,
avg(toFloat64(implied_volatility)) * 100 AS atm_iv
FROM global_markets.options_greeks
WHERE underlying_symbol IN ('AAPL', 'MSFT', 'NVDA', 'AMZN', 'TSLA', 'SPY', 'QQQ', 'KO')
AND date >= today() - 371
AND iv_converged = 1
AND volume > 0
AND days_to_expiry BETWEEN 20 AND 45
AND abs(toFloat64(strike_price) / toFloat64(underlying_close) - 1) < 0.05
GROUP BY symbol, date
),
latest AS
(
SELECT
symbol,
argMax(atm_iv, date) AS iv_now,
max(date) AS as_of
FROM daily
GROUP BY symbol
)
SELECT
d.symbol AS symbol,
round(l.iv_now, 2) AS current_iv_pct,
round(min(d.atm_iv), 2) AS low_52w_iv_pct,
round(max(d.atm_iv), 2) AS high_52w_iv_pct,
count() AS observations,
formatDateTime(any(l.as_of), '%b %e, %Y') AS as_of_label
FROM daily AS d
INNER JOIN latest AS l ON l.symbol = d.symbol
GROUP BY d.symbol, l.iv_now
ORDER BY current_iv_pct DESCایک ہی ticker کے لیے دو پلیٹ فارم مختلف values کیوں دکھاتے ہیں
کوئی بھی formula مبہم نہیں ہے۔ مسئلہ inputs کا ہے۔ Vendors شاذونادر ہی یہ بتاتے ہیں کہ وہ کون سی IV series استعمال کرتے ہیں، اور عام انتخاب option chain کے دو بالکل مختلف سروں پر ہوتے ہیں: 30 دن کی constant maturity IV، جسے 30 دن سے پہلے اور بعد کی دونوں expiries کے درمیان interpolate کیا جاتا ہے؛ یا front-month at-the-money contract، جس میں اتار چڑھاؤ کہیں زیادہ ہوتا ہے۔ بعض platforms پوری chain کا average بھی استعمال کرتے ہیں۔ یہ panel ایک ہی stock پر 52 ہفتوں کے دوران IV input کی تین definitions کا اطلاق کرتا ہے۔
ہر عدد کے پیچھے موجود درست SQL
WITH contracts AS
(
SELECT
date,
days_to_expiry,
abs(toFloat64(strike_price) / toFloat64(underlying_close) - 1) AS moneyness,
toFloat64(implied_volatility) * 100 AS iv_pct
FROM global_markets.options_greeks
WHERE underlying_symbol = 'AAPL'
AND date >= today() - 371
AND iv_converged = 1
AND volume > 0
),
defs AS
(
SELECT
spec.1 AS iv_series,
spec.2 AS min_dte,
spec.3 AS max_dte,
spec.4 AS max_moneyness
FROM
(
SELECT arrayJoin([
('Near 30 day ATM', 20, 45, 0.05),
('Front month ATM', 1, 19, 0.05),
('Wide net, any expiry', 1, 400, 0.30)
]) AS spec
)
),
daily AS
(
SELECT
s.iv_series AS iv_series,
c.date AS date,
avg(c.iv_pct) AS atm_iv
FROM contracts AS c
CROSS JOIN defs AS s
WHERE c.days_to_expiry BETWEEN s.min_dte AND s.max_dte
AND c.moneyness < s.max_moneyness
GROUP BY iv_series, date
),
latest AS
(
SELECT
iv_series,
argMax(atm_iv, date) AS iv_now
FROM daily
GROUP BY iv_series
)
SELECT
d.iv_series AS iv_series,
round(l.iv_now, 2) AS current_iv_pct,
round(min(d.atm_iv), 2) AS low_52w_iv_pct,
round(max(d.atm_iv), 2) AS high_52w_iv_pct,
round(100 * (l.iv_now - min(d.atm_iv)) / nullIf(max(d.atm_iv) - min(d.atm_iv), 0), 1) AS iv_rank,
round(100 * countIf(d.atm_iv < l.iv_now) / count(), 1) AS iv_percentile
FROM daily AS d
INNER JOIN latest AS l ON l.iv_series = d.iv_series
GROUP BY d.iv_series, l.iv_now
ORDER BY current_iv_pct DESCتازہ ترین session میں، Wide net, any expiry کی value 37.6% ہے، جبکہ Near 30 day ATM کی value 27.7% ہے، اور ان کے IV ranks بالترتیب 23.1 اور 32.4 ہیں۔ Stock ایک ہی ہے، session ایک ہی ہے، formula ایک ہی ہے، مگر input کی definition مختلف ہے۔
دوسرا اہم عامل lookback length ہے۔ 52 ہفتے عام convention ہے، اور بہت سے platforms اس کے ساتھ 30، 60 یا 90 دن کی settings بھی فراہم کرتے ہیں۔
ہر عدد کے پیچھے موجود درست SQL
WITH daily AS
(
SELECT
date,
avg(toFloat64(implied_volatility)) * 100 AS atm_iv
FROM global_markets.options_greeks
WHERE underlying_symbol = 'AAPL'
AND date >= today() - 800
AND iv_converged = 1
AND volume > 0
AND days_to_expiry BETWEEN 20 AND 45
AND abs(toFloat64(strike_price) / toFloat64(underlying_close) - 1) < 0.05
GROUP BY date
),
latest AS
(
SELECT
argMax(atm_iv, date) AS iv_now,
max(date) AS as_of
FROM daily
),
windows AS
(
SELECT
spec.1 AS lookback_label,
spec.2 AS lookback_days
FROM
(
SELECT arrayJoin([
('1 month', 30),
('3 months', 90),
('6 months', 180),
('12 months', 371),
('24 months', 742)
]) AS spec
)
)
SELECT
w.lookback_label AS lookback_label,
round(100 * (l.iv_now - min(d.atm_iv)) / nullIf(max(d.atm_iv) - min(d.atm_iv), 0), 1) AS iv_rank,
round(100 * countIf(d.atm_iv < l.iv_now) / count(), 1) AS iv_percentile,
count() AS observations
FROM daily AS d
CROSS JOIN windows AS w
CROSS JOIN latest AS l
WHERE d.date >= l.as_of - w.lookback_days
GROUP BY w.lookback_label, w.lookback_days, l.iv_now
ORDER BY w.lookback_days1 month کے lookback پر اس stock کا IV rank 0.4 اور IV percentile 4.8 ہے۔ Window کو بڑھا کر 24 months کرنے پر اسی session میں scores 23.4 اور 63.3 ہو جاتے ہیں۔ ان دونوں rows کے درمیان option chain میں کوئی تبدیلی نہیں ہوئی۔ صرف window بدلی ہے۔ جب دو screens کسی ticker کے بارے میں مختلف نتائج دکھائیں تو سب سے پہلے lookback setting اور IV series کو چیک کرنا چاہیے۔
یہ دونوں اعداد کیسے استعمال ہوتے ہیں
دونوں readings حکمتِ عملی کے انتخاب کے لیے filter کا کام کرتی ہیں، forecast کا نہیں۔ Premium فروخت کرنے والے traders، جن میں covered calls اور cash secured puts فروخت کرنے والے بھی شامل ہیں، عموماً بلند readings تلاش کرتے ہیں۔ ایسی صورت میں option کی قیمت میں اس movement سے زیادہ اتار چڑھاؤ شامل ہوتا ہے جو متعلقہ window کے دوران stock نے عموماً دکھایا ہو۔ Premium خریدنے والے traders کم readings پر توجہ دیتے ہیں، جہاں یہی منطق الٹ سمت میں کام کرتی ہے۔ اس مقصد کے لیے raw IV number کے مقابلے میں relative score زیادہ مؤثر ہے: ایک stock کے لیے 40% IV معمول کی سطح ہو سکتی ہے، جبکہ دوسرے کے لیے انتہائی بلند۔ کسی stock کو اس کی اپنی history کے مقابلے میں جانچنے سے یہ مسئلہ دور ہو جاتا ہے۔ کیا high implied volatility اچھی ہوتی ہے اس بات کو دونوں جانب کے trade-offs کے ذریعے واضح کرتا ہے۔
ایک اہم احتیاط یہ ہے کہ یہ اعداد ہر سوال کا جواب نہیں دے سکتے۔ بلند reading مزید بلند ہو سکتی ہے، اور پیر کو 95 کا rank جمعے کو 60 ہو سکتا ہے، چاہے آپ کی position میں کوئی تبدیلی نہ آئی ہو۔ دونوں scores سمت کے بارے میں کوئی معلومات نہیں دیتے۔ بلند IV کا مطلب ہے کہ market نے بڑی حرکت کو قیمت میں شامل کر لیا ہے، لیکن یہ نہیں بتایا کہ حرکت کس سمت ہوگی۔
FAQ
IV rank یا IV percentile میں سے بہتر کون سا ہے؟
یہ دونوں مختلف سوالات کا جواب دیتے ہیں۔ جب lookback window میں volatility کا ایک شدید spike شامل ہو تو IV percentile زیادہ مؤثر رہتا ہے، کیونکہ یہ کسی ایک انتہائی قدر سے موازنہ کرنے کے بجائے دنوں کی تعداد گنتا ہے۔ جب range میں کافی observations موجود ہوں تو IV rank زیادہ intuitive ہوتا ہے، کیونکہ یہ براہِ راست بتاتا ہے کہ آج کی قدر 12 ماہ کی بلند ترین سطح سے کتنی قریب ہے۔
بلند IV rank کیا ہوتا ہے؟
زیادہ تر trading desks کسی stock کی اپنی range میں 50 سے اوپر کی reading کو اوپری نصف اور 80 سے اوپر کی reading کو واقعی بلند سمجھتے ہیں۔ یہ score اپنی ساخت کے اعتبار سے relative ہوتا ہے۔ اس لیے کسی پُرسکون consumer staple کا 80 rank اور کسی volatile growth name کا 80 rank، absolute IV کی بہت مختلف سطحوں کی نمائندگی کر سکتے ہیں۔
کیا IV rank اور IV percentile ایک ہی lookback استعمال کرتے ہیں؟
عام طور پر دونوں کے لیے 252 trading days استعمال ہوتے ہیں، اگرچہ زیادہ تر platforms پر یہ setting تبدیل کی جا سکتی ہے اور default ہر vendor کے لحاظ سے مختلف ہوتا ہے۔ اوپر کا panel دکھاتا ہے کہ ایک ہی stock مختلف window lengths پر مختلف score حاصل کر سکتا ہے۔ جب دو tools کے نتائج مختلف ہوں تو سب سے پہلے یہی چیز چیک کرنی چاہیے۔
کیا IV rank 0 یا 100 ہو سکتا ہے؟
ہاں۔ جس دن کسی stock کی implied volatility نئی 52-week high بناتی ہے، IV rank 100 ہو جاتا ہے، اور نئی low پر 0، کیونکہ آج کی reading خود range کا ایک endpoint ہوتی ہے۔ IV percentile شاذونادر ہی ان دونوں انتہائی سطحوں تک پہنچتا ہے، کیونکہ آج کا اپنا session بھی denominator میں شامل ہوتا ہے۔
IV میں تبدیلی کے بغیر میرا IV rank کیوں بدل گیا؟
Window ہر session کے ساتھ آگے بڑھتی ہے۔ جب گزشتہ 52 ہفتوں کا کوئی پرانا spike trailing window سے باہر نکل جاتا ہے تو denominator میں موجود high کم سطح پر reset ہو جاتی ہے۔ اس کے نتیجے میں آج کی IV تبدیل نہ ہونے کے باوجود rank بڑھ جاتا ہے۔ IV crush دوسری عام حیرت کی وضاحت کرتا ہے، یعنی earnings report کے فوراً بعد خود IV میں آنے والی کمی۔
یہاں موجود ہر panel کے نیچے بالکل وہی SQL موجود ہے۔ کسی بھی panel میں ticker تبدیل کر کے Strasmore terminal پر کسی دوسرے نام کا score حاصل کریں۔