Strasmore Research
শেখা Matt Connorদ্বারা Matt Connor · data as of August 6, 2026 · refreshed weekly

IV Rank বনাম IV Percentile: সূত্রসহ ব্যাখ্যা

IV rank ও IV percentile-এর সূত্র, হাতে যাচাইযোগ্য একটি উদাহরণ এবং একই ticker-এ কেন স্কোর 18 ও 70-এর মতো আলাদা হতে পারে তা জানুন।

IV rank বনাম IV percentile-এর পার্থক্য মূলত একই ডেটার ওপর করা দুটি গাণিতিক হিসাবের ফল। IV rank দেখায়, গত 52 সপ্তাহের সর্বনিম্ন থেকে সর্বোচ্চ রেঞ্জের মধ্যে আজকের implied volatility কোথায় অবস্থান করছে। IV percentile গণনা করে, lookback window-তে কত শতাংশ trading day আজকের reading-এর নিচে বন্ধ হয়েছে। একই ticker-এর ক্ষেত্রে একই বিকেলে একটি মেট্রিকে স্কোর 18 এবং অন্যটিতে 70 হতে পারে।

দুটি সূত্র, পূর্ণভাবে লেখা

IV rank = (বর্তমান IV − 52 সপ্তাহের সর্বনিম্ন IV) / (52 সপ্তাহের সর্বোচ্চ IV − 52 সপ্তাহের সর্বনিম্ন IV) x 100

IV percentile = (উইন্ডোতে আজকের IV-এর চেয়ে কম IV থাকা ট্রেডিং দিনের সংখ্যা) / (উইন্ডোর মোট ট্রেডিং দিনের সংখ্যা) x 100

উভয়টির মান 0 থেকে 100-এর মধ্যে থাকে। উভয়ের জন্য একই দুটি ইনপুট দরকার: শেয়ারটির দৈনিক implied volatility সিরিজ এবং একটি lookback window, যা প্রচলিতভাবে 252টি ট্রেডিং দিন। Implied volatility হলো option market-এর নির্ধারিত বার্ষিকীকৃত হিসাব—জীবন্ত option price থেকে নির্ণীত—যে শেয়ারটির মূল্য কতটা পরিবর্তিত হতে পারে। implied volatility কী পরিমাপ করে নিবন্ধে বিষয়টি শুরু থেকে ব্যাখ্যা করা হয়েছে।

দুটির পার্থক্য হলো, প্রতিটি সূচক উইন্ডোর কতটা অংশ বিবেচনা করে। IV rank 252 দিনের মধ্যে ঠিক দুটি দিন দেখে: সর্বোচ্চ এবং সর্বনিম্ন। মাঝের সবকিছু এখানে গৌণ। IV percentile প্রতিটি দিনকে সমান গুরুত্ব দেয় এবং readings-এর মধ্যে ব্যবধান কত ছিল, তা বিবেচনা করে না। একটি হলো range-এর মধ্যে অবস্থান। অন্যটি হলো দিনের সংখ্যা।

হাতে যাচাই করা যায় এমন একটি উদাহরণ

ধরা যাক, 10 দিনের একটি কাল্পনিক IV সিরিজ আছে, প্রতি সেশনে একটি করে রিডিং: 22, 24, 21, 60, 26, 25, 23, 27, 24 এবং আজকের রিডিং 28। সর্বনিম্ন মান 21 এবং সর্বোচ্চ মান 60।

IV rank: (28 - 21) / (60 - 21) x 100 = 7 / 39 x 100 = 17.9।

IV percentile: 10টি রিডিংয়ের মধ্যে 7টি—22, 24, 21, 26, 25, 23 এবং 24—28-এর নিচে রয়েছে। তাই 7 / 10 x 100 = 70.0।

IV rank 17.9 থেকে বোঝা যায়, volatility তুলনামূলকভাবে সস্তা। IV percentile 70 থেকে বোঝা যায়, এই সময়সীমার বেশিরভাগ দিনে volatility আজকের স্তরের চেয়ে কম ছিল। একই 10টি সংখ্যার ক্ষেত্রে দুটিই সঠিক বর্ণনা।

এবার একটি মান পরিবর্তন করুন। 60-এর জায়গায় 30 বসান এবং বাকি 9টি রিডিং অপরিবর্তিত রাখুন। IV rank হবে (28 - 21) / (30 - 21) x 100 = 77.8। IV percentile বদলাবে না; তা 70.0-ই থাকবে। সর্বোচ্চ মান নির্ধারণ করা একটি সেশন IV rank-এ 60 পয়েন্টের প্রভাব ফেলছে, কিন্তু IV percentile-এ কোনো প্রভাবই ফেলছে না।

এটাই IV rank-এর কাঠামোগত দুর্বলতা। সময়সীমার মধ্যে earnings gap বা এক দিনের আতঙ্কের মতো কোনো একক spike হলে denominator অনেক বড় হয়ে যায়। এর ফলে পরবর্তী 12 মাস IV rank প্রায় সর্বনিম্ন স্তরে আটকে থাকতে পারে, যদিও সেই spike অনেক আগেই option chain থেকে বেরিয়ে গেছে। দুটি score-এর মধ্যে বড় অমিল দেখা দিলে সাধারণত বোঝা যায়, সময়সীমার মধ্যে একটি outlier রয়েছে। Volatility বাস্তবে কোন স্তরে কতটা সময় কাটিয়েছে, percentile সেটিই বেশি নির্ভুলভাবে তুলে ধরে। Range মসৃণ হলে এবং সর্বনিম্ন ও সর্বোচ্চ—দুই প্রান্তেই একাধিক সেশন থাকলে IV rank তুলনামূলকভাবে ভালো নির্দেশক। কোনো সংখ্যাই দিকনির্দেশ সম্পর্কে কিছু বলে না।

বাস্তব IV সিরিজ কেমন দেখায়

উভয় সূত্র যে কাঁচা ডেটার ওপর কাজ করে, সেটি এখানে দেওয়া হলো। নিচের প্যানেলটি AAPL-এর জন্য মেয়াদ শেষ হতে 20 থেকে 45 দিন বাকি থাকা এবং শেয়ারের দামের 5%-এর মধ্যে থাকা কন্ট্রাক্ট ব্যবহার করে দৈনিক at the money implied volatility রিডিং তৈরি করে। এরপর সপ্তাহভিত্তিক গড় হিসাব করে।

কুয়েরিAAPL-এর অ্যাট-দ্য-মনি ইমপ্লাইড ভোলাটিলিটি, সাপ্তাহিক, গত 52 সপ্তাহ
প্রতিটি সংখ্যার পেছনের সঠিক 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)
Run this yourself

এই সিরিজে 54টি সাপ্তাহিক পয়েন্ট রয়েছে। এটি Jul 28, 2025-এর সপ্তাহ থেকে শুরু হয়েছে, যেখানে গড় ছিল 30.03%, এবং শেষ হয়েছে Aug 3, 2026-এর সপ্তাহে 27.7%-এ। রেখাটির আকৃতি নির্ধারণ করে rank এবং percentile একমত হবে কি না। একটি মাত্র উঁচু, বিচ্ছিন্ন spike থাকলে দুটির মধ্যে পার্থক্য তৈরি হয়। রেখাটি স্থিতিশীল একটি সীমার মধ্যে ওঠানামা করলে দুটির মান কাছাকাছি থাকে। আমাদের AAPL implied volatility পেজে সময়ের সঙ্গে এই নামটির গতিপ্রকৃতি অনুসরণ করা হয়েছে। ইতিহাস ছাড়া শুধু absolute level জানতে চাইলে দেখুন 30% IV কি বেশি

আটটি টিকারে IV rank বনাম IV percentile

একই সূত্র, একই lookback, উচ্চ-লিকুইডিটির আটটি নাম, একটি ট্রেডিং সেশন। gap কলামে দুই স্কোরের পরম ব্যবধান দেখানো হয়েছে।

কুয়েরিIV র‍্যাঙ্ক বনাম IV পার্সেন্টাইল, 8টি লিকুইড নাম, 52 সপ্তাহের লুকব্যাক
প্রতিটি সংখ্যার পেছনের সঠিক 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 DESC
Run this yourself

Aug 3, 2026-এর হিসাবে, টেবিলে সবচেয়ে বড় অমিল 35.6 পয়েন্ট। এটি AAPL-এ দেখা যাচ্ছে, যেখানে IV rank 32.4, আর IV percentile 68। টেবিলের অন্য প্রান্তে, TSLA-এ দুই স্কোরের ব্যবধান 6.5 পয়েন্টের মধ্যে রয়েছে। একটি সংখ্যার ভিত্তিতে তৈরি স্ক্রিন অন্য সংখ্যার ভিত্তিতে তৈরি স্ক্রিনের চেয়ে ভিন্ন তালিকা দেয়। আপনার প্ল্যাটফর্ম কোন মানটি দেখায়, তা জানা গুরুত্বপূর্ণ এটাই তার বাস্তব কারণ। সর্বোচ্চ IV rank থাকা স্টকের স্ক্রিনটি প্রথম মানটির ভিত্তিতে বাজার সাজায়।

ওই টেবিলের প্রতিটি rank-এর পেছনে থাকা range ইনপুট

বর্তমান, সর্বনিম্ন এবং সর্বোচ্চ কলামের মান rank সূত্রে বসালে ওপরের rank কলামের মান পাওয়া যায়।

কুয়েরিপ্রতিটি নামের বর্তমান, 52 সপ্তাহের সর্বনিম্ন এবং 52 সপ্তাহের সর্বোচ্চ ATM IV
প্রতিটি সংখ্যার পেছনের সঠিক 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
Run this yourself

একই ticker-এর জন্য দুইটি প্ল্যাটফর্ম কেন ভিন্ন মূল্য দেখায়

কোনো সূত্রই অস্পষ্ট নয়। অস্পষ্টতা ইনপুটে। কোন IV series ব্যবহার করা হয়েছে, vendors সাধারণত তা প্রকাশ করে না। প্রচলিত পছন্দগুলো option chain-এর দুই প্রান্তে থাকে: 30 দিনের constant maturity IV, যা 30 দিনের আগের ও পরের দুই expiry-এর মধ্যে interpolated হয়; অথবা front month-এর at-the-money contract, যা অনেক বেশি দ্রুত পরিবর্তিত হয়। কিছু প্ল্যাটফর্ম পুরো chain-এর গড়ও ব্যবহার করে। এই panel-এ একই 52 সপ্তাহে IV input-এর তিনটি সংজ্ঞা দিয়ে একটি stock পরীক্ষা করা হয়েছে।

কুয়েরিএকটি স্টক, একটি সেশন, IV ইনপুটের 3টি সংজ্ঞা
প্রতিটি সংখ্যার পেছনের সঠিক 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
Run this yourself

সর্বশেষ session-এ, Wide net, any expiry-এ 37.6% দেখা যাচ্ছে, আর Near 30 day ATM-এ 27.7% দেখা যাচ্ছে। তাদের IV rank যথাক্রমে 23.1 এবং 32.4। একই stock, একই session, একই formula—শুধু input-এর সংজ্ঞা ভিন্ন।

দ্বিতীয় পরিবর্তনশীল হলো lookback length। 52 সপ্তাহ প্রচলিত মান। এর পাশাপাশি অনেক প্ল্যাটফর্মে 30, 60 বা 90 দিনের setting-ও থাকে।

কুয়েরি5টি ভিন্ন লুকব্যাক উইন্ডোতে একই সেশনের স্কোর
প্রতিটি সংখ্যার পেছনের সঠিক 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_days
Run this yourself

1 month lookback-এ এই stock-এর IV rank হলো 0.4 এবং IV percentile হলো 4.8। Window বাড়িয়ে 24 months করলে একই session-এ মান দুটি দাঁড়ায় 23.4 এবং 63.3। ওই সারিগুলোর মধ্যে option chain-এ কোনো পরিবর্তন হয়নি। শুধু window পরিবর্তিত হয়েছে। দুইটি screen-এ একই ticker নিয়ে মতভেদ হলে প্রথমে lookback setting এবং IV series পরীক্ষা করুন।

দুটি সংখ্যার ব্যবহার

দুটি রিডিংই কৌশল বাছাইয়ের ফিল্টার হিসেবে কাজ করে, কখনও পূর্বাভাস হিসেবে নয়। প্রিমিয়াম বিক্রি করা ট্রেডাররা, যাদের মধ্যে covered call এবং cash-secured put কৌশল ব্যবহারকারীরাও রয়েছেন, সাধারণত উচ্চ রিডিং খোঁজেন। এর অর্থ, নির্ধারিত সময়পর্বে শেয়ারটি যতটা নড়াচড়া করেছে, তার চেয়ে বেশি নড়াচড়ার সম্ভাবনা ধরে নিয়ে অপশনের দাম নির্ধারিত হয়েছে। প্রিমিয়াম কেনা ট্রেডাররা নিম্ন প্রান্তের দিকে নজর দেন। সেখানে একই যুক্তি উল্টোভাবে প্রযোজ্য। এই কাজে কাঁচা IV সংখ্যার চেয়ে আপেক্ষিক স্কোর বেশি কার্যকর। একটি শেয়ারের ক্ষেত্রে 40% IV স্বাভাবিক হতে পারে, অন্যটির ক্ষেত্রে তা চরম মাত্রার হতে পারে। কোনো শেয়ারকে তার নিজস্ব ইতিহাসের সঙ্গে তুলনা করলে এই সমস্যা দূর হয়। উচ্চ implied volatility কি ভালো—এর উত্তর দুই পক্ষের trade-off-এর ওপর নির্ভর করে।

তবে একটি বিষয় এই সংখ্যাগুলো আপনার হয়ে নির্ধারণ করতে পারে না। উচ্চ রিডিং আরও বাড়তে পারে। আবার সোমবারের 95 র‍্যাঙ্ক শুক্রবারে 60 হতে পারে, আপনার অবস্থানে কোনো পরিবর্তন না থাকলেও। কোনো স্কোরই দিকনির্দেশ সম্পর্কে তথ্য দেয় না। উচ্চ IV-এর অর্থ হলো বাজার বড় ধরনের মূল্যপরিবর্তনের সম্ভাবনা দামে অন্তর্ভুক্ত করেছে; সেই পরিবর্তন কোন দিকে হবে, সে বিষয়ে কোনো মতামত এতে নেই।

প্রায়শই জিজ্ঞাসিত প্রশ্ন

IV rank নাকি IV percentile—কোনটি বেশি কার্যকর?

দুটি সূচক ভিন্ন প্রশ্নের উত্তর দেয়। Lookback window-তে একটি তীব্র ঊর্ধ্বগতি থাকলে IV percentile তুলনামূলকভাবে বেশি নির্ভরযোগ্য, কারণ এটি একটি মাত্র চরম মানের সঙ্গে তুলনা না করে কত দিন সেই স্তরে ছিল তা গণনা করে। Range-এ পর্যাপ্ত ডেটা থাকলে IV rank বেশি স্বচ্ছন্দবোধ্য, কারণ এটি সরাসরি জানায় আজকের মান 12 মাসের সর্বোচ্চ মানের কতটা কাছাকাছি।

উচ্চ IV rank বলতে কী বোঝায়?

বেশিরভাগ trading desk 50-এর বেশি reading-কে কোনো শেয়ারের নিজস্ব range-এর ওপরের অর্ধেক এবং 80-এর বেশি reading-কে ওই শেয়ারের জন্য প্রকৃতপক্ষে elevated হিসেবে বিবেচনা করে। Score-টি গঠনগতভাবেই আপেক্ষিক। তাই একটি স্থিতিশীল consumer staple এবং একটি অস্থির growth stock—উভয়ের IV rank 80 হলেও তাদের প্রকৃত IV level সম্পূর্ণ ভিন্ন হতে পারে।

IV rank এবং IV percentile কি একই lookback ব্যবহার করে?

সাধারণত উভয়ের জন্য 252 trading days ব্যবহার করা হয়। তবে বেশিরভাগ platform-এ এই setting পরিবর্তন করা যায় এবং vendor ভেদে default আলাদা হয়। উপরের panel-এ একই stock-কে ভিন্ন window length-এ ভিন্ন score পেতে দেখা যাচ্ছে। দুটি tool-এর ফল না মিললে এটিই প্রথমে পরীক্ষা করা উচিত।

IV rank কি 0 বা 100 হতে পারে?

হ্যাঁ। কোনো stock-এর implied volatility-তে নতুন 52 week high হলে সেদিন IV rank 100 হয় এবং নতুন low হলে 0 হয়, কারণ আজকের reading-ই range-এর একটি endpoint। IV percentile সাধারণত এই দুই চরম মানে পৌঁছায় না, কারণ denominator-এ আজকের session-টিও অন্তর্ভুক্ত থাকে।

IV না বদলালেও আমার IV rank কেন বদলেছে?

প্রতিটি session-এ window সামনের দিকে এগিয়ে যায়। Trailing 52 weeks থেকে কোনো পুরোনো spike বাদ পড়লে denominator-এর high কমে যায় এবং আজকের IV অপরিবর্তিত থাকলেও rank বেড়ে যায়। IV crush অন্য একটি সাধারণ বিস্ময়কর পরিস্থিতি বোঝায়—earnings report প্রকাশের ঠিক পরেই IV কমে যাওয়া।


এখানে প্রতিটি panel-এর নিচে ব্যবহৃত সঠিক SQL দেওয়া আছে। Strasmore terminal-এ ভিন্ন কোনো নামের score দেখতে যেকোনো panel-এ ticker পরিবর্তন করুন।