Strasmore Research
Навчання Matt ConnorВід Matt Connor · data as of August 6, 2026 · refreshed weekly

IV rank та IV percentile: формули й приклад

IV rank та IV percentile: обидві формули, приклад для ручної перевірки й пояснення, чому показники одного тикера можуть різко відрізнятися.

IV rank та IV percentile відрізняються двома розрахунками на основі одного масиву даних. IV rank показує, де сьогоднішня implied volatility розташована в межах 52-тижневого діапазону — від мінімального до максимального значення. IV percentile визначає частку торгових днів у періоді спостереження, коли сесія закрилася з показником нижче за сьогоднішній. Для одного й того самого тикера в один і той самий день один показник може дорівнювати 18, а інший — 70.

Дві формули в розгорнутому вигляді

IV rank = (поточна IV мінус мінімальна IV за 52 тижні) / (максимальна IV за 52 тижні мінус мінімальна IV за 52 тижні) x 100

IV percentile = (кількість торгових днів у вибраному періоді, коли IV була нижчою за сьогоднішню IV) / (загальна кількість торгових днів у вибраному періоді) x 100

Обидва показники мають значення від 0 до 100. Для розрахунку обох потрібні однакові два вхідні параметри: щоденний ряд implied volatility для акції та період ретроспективного аналізу, яким зазвичай є 252 торгові дні. Implied volatility — це річна оцінка опціонного ринку щодо потенційної зміни ціни акції, розрахована на основі актуальних цін опціонів. Докладне пояснення наведено в матеріалі що вимірює implied volatility.

Відмінність полягає в тому, яку частину періоду враховує кожен показник. IV rank аналізує лише два дні з 252: день із найвищим і день із найнижчим значенням. Усі проміжні значення не враховуються. IV percentile однаково враховує кожен день і не оцінює, наскільки відрізнялися самі значення. Один показник визначає позицію в діапазоні. Другий — кількість днів.

Приклад із розрахунком, який можна перевірити вручну

Візьмімо умовний десятиденний ряд 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: сім із десяти значень — 22, 24, 21, 26, 25, 23 і 24 — нижчі за 28, тому 7 / 10 x 100 = 70,0.

IV rank на рівні 17,9 свідчить про низьку вартість волатильності. IV percentile на рівні 70 означає, що в більшість днів у межах цього періоду волатильність була нижчою за поточне значення. Обидва показники правильно описують ті самі десять значень.

Тепер змінимо одне значення. Замінимо 60 на 30, а решту дев’ять значень залишимо без змін. IV rank зросте до (28 - 21) / (30 - 21) x 100 = 77,8. IV percentile не зміниться й залишиться на рівні 70,0. Одна сесія, яка визначила максимум, впливає на IV rank на 60 пунктів, але взагалі не впливає на IV percentile.

У цьому полягає структурна слабкість IV rank. Один різкий сплеск у періоді — розрив на тлі звіту про прибутки або одноденний сплеск побоювань — різко збільшує знаменник і протягом наступних дванадцяти місяців утримує rank біля мінімального рівня, навіть після того, як цей сплеск зникає з опціонного ланцюжка. Коли два показники суттєво розходяться, це зазвичай вказує на викид у вибраному періоді. У такому разі percentile точніше показує, на яких рівнях волатильність фактично перебувала більшу частину часу. IV rank краще відображає ситуацію, коли діапазон є плавним, а обидва його екстремуми сформовані більш ніж однією сесією. Жоден із цих показників нічого не говорить про напрямок руху.

Який вигляд має реальний ряд IV

Нижче наведено вихідні дані, на яких працюють обидві формули. Панель будує щоденний показник at-the-money implied volatility для AAPL за контрактами з терміном до експірації від 20 до 45 днів і ціною в межах 5% від ціни акції, а потім усереднює ці значення за тижнями.

ЗапитПозабіржова волатильність 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. Окремий високий сплеск розділяє ці показники. Лінія, що коливається в стабільному діапазоні, зберігає їх близькими. На сторінці implied volatility для AAPL відстежується динаміка цього показника в часі; якщо потрібно оцінити абсолютний рівень без урахування історії, див. чи є IV на рівні 30% високою.

IV rank та IV percentile для восьми тикерів

Однакові формули, однаковий період ретроспективного аналізу, вісім ліквідних акцій, одна торговельна сесія. У стовпці gap наведено абсолютну різницю між двома показниками.

ЗапитРанг IV проти перцентиля IV для восьми ліквідних назв, період огляду 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 у таблиці

Підставте поточне, мінімальне та максимальне значення у формулу rank — і ви отримаєте наведений вище показник у стовпці rank.

ЗапитПоточна, мінімальна та максимальна ATM IV за 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(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

Чому дві платформи показують різні значення для одного й того самого тикера

Жодна з формул не є неоднозначною. Неоднозначними є вхідні дані. Постачальники рідко повідомляють, який ряд IV вони використовують, а найпоширеніші варіанти розташовані на протилежних кінцях цього ланцюжка: IV із постійним строком до погашення 30 днів, інтерпольований між двома експіраціями по обидва боки від 30 днів, або at-the-money контракт найближчого місяця, який реагує на зміни значно різкіше. Деякі платформи натомість усереднюють увесь ланцюжок. У цій панелі одну акцію пропущено через три визначення вхідного показника IV за ті самі 52 тижні.

ЗапитОдна акція, одна сесія, три визначення вхідного показника IV
Точний 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

На останній сесії Wide net, any expiry показує 37.6%, тоді як Near 30 day ATM показує 27.7%, а їхні IV ranks становлять 23.1 і 32.4. Та сама акція, та сама сесія, та сама формула, але різне визначення вхідного показника.

Другий важливий параметр — тривалість періоду ретроспективного аналізу. Стандартом є 52 тижні, але багато платформ також пропонують налаштування на 30, 60 або 90 днів.

ЗапитТа сама сесія з оцінкою за п’ятьма різними періодами огляду
Точний 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 ця акція має 0.4 за IV rank і 4.8 за IV percentile. Якщо збільшити період до 24 months, за ту саму сесію показники становлять 23.4 і 63.3. Між цими рядками в опціонному ланцюжку нічого не змінилося. Змінився лише період аналізу. Коли два екрани показують різні дані для одного тикера, спочатку слід перевірити налаштування періоду ретроспективного аналізу та ряд IV.

Як використовують ці два показники

Обидва показники слугують фільтром під час вибору стратегії, а не прогнозом. Трейдери, які продають премію, зокрема за стратегіями covered calls і cash-secured puts, зазвичай шукають високі значення. Це означає, що опціон закладає більший рух, ніж акція зазвичай демонструвала протягом відповідного періоду. Трейдери, які купують премію, звертають увагу на нижній діапазон, де діє протилежна логіка. Для цього краще використовувати відносний показник, а не абсолютне значення IV: IV на рівні 40% може бути звичайним для однієї акції та екстремальним для іншої. Порівняння акції з її власною історією усуває цю проблему. Матеріал Чи є висока implied volatility позитивним фактором розглядає компроміси кожної зі сторін.

Є одне застереження, на яке самі показники відповіді не дають. Високе значення може зрости ще більше, а rank на рівні 95 у понеділок може становити 60 у п’ятницю без жодних змін у вашій позиції. Жоден із показників не містить інформації про напрямок руху: підвищена IV означає, що ринок заклав значний рух, але не вказує, у який бік він відбудеться.

FAQ

Що краще: IV rank чи IV percentile?

Вони відповідають на різні запитання. IV percentile краще працює, коли у вікні спостереження був один різкий сплеск, оскільки враховує кількість днів, а не порівнює поточне значення з одним екстремумом. IV rank інтуїтивніший, коли діапазон має достатню кількість спостережень: він безпосередньо показує, наскільки поточне значення близьке до максимуму за дванадцять місяців.

Що таке високий IV rank?

Більшість trading desks вважають значення вище 50 верхньою половиною власного діапазону акції, а значення вище 80 — справді підвищеним рівнем для цієї назви. Оцінка за своєю природою є відносною, тому IV rank на рівні 80 для стабільної акції споживчого сектора та IV rank на рівні 80 для волатильної growth-акції означають дуже різні абсолютні рівні IV.

Чи використовують IV rank та IV percentile однаковий період спостереження?

Зазвичай для обох показників використовують 252 торгові дні, хоча на більшості платформ цей параметр можна змінювати, а значення за замовчуванням залежить від постачальника даних. Панель вище показує, що для однієї акції результати відрізняються залежно від тривалості періоду. Саме це слід перевірити насамперед, коли два інструменти дають різні результати.

Чи може IV rank дорівнювати 0 або 100?

Так. IV rank досягає 100 у день, коли акція показує новий максимум implied volatility за 52 тижні, і падає до 0 у день нового мінімуму, оскільки поточне значення саме є однією з меж діапазону. IV percentile рідко досягає будь-якого з цих крайніх значень, оскільки поточна сесія входить до знаменника.

Чому мій IV rank змінився, хоча IV не змінилася?

Період спостереження зміщується вперед на кожній сесії. Коли давній сплеск виходить із періоду останніх 52 тижнів, максимум у знаменнику знижується, а IV rank зростає, навіть якщо поточна IV не змінилася. IV crush описує інший поширений несподіваний рух — падіння IV одразу після публікації звіту про прибутки.


Під кожною панеллю наведено точний SQL-запит. Замініть ticker у будь-якій із них, щоб розрахувати показники для іншої назви на терміналі Strasmore.