IV Rank a IV Percentile: różnice i wzory obliczeń
Analiza matematyczna wskaźników IV rank oraz IV percentile. Wyjaśnienie metod obliczeń, praktyczny przykład oraz powody rozbieżności wyników dla tego samego tickera.
27.7%
Porównanie IV rank oraz IV percentile
IV rank oraz IV percentile to dwa różne wskaźniki matematyczne oparte na tych samych danych. IV rank określa pozycję bieżącej zmienności implikowanej w relacji do jej zakresu z ostatnich pięćdziesięciu dwóch tygodni, licząc od najniższego do najwyższego odczytu. IV percentile wskazuje natomiast, jaki odsetek dni sesyjnych w badanym okresie zakończył się odczytem niższym od dzisiejszego. Ten sam ticker, w to samo popołudnie, może uzyskać wynik osiemnaście w jednym wskaźniku i siedemdziesiąt w drugim.
Dwa wzory w zapisie słownym
IV rank = (bieżąca IV minus 52-tygodniowe minimum IV) / (52-tygodniowe maksimum IV minus 52-tygodniowe minimum IV) x 100
IV percentile = (liczba dni sesyjnych w oknie, w których IV była niższa od dzisiejszej) / (całkowita liczba dni sesyjnych w oknie) x 100
Oba wskaźniki przyjmują wartości od zera do stu. Oba wymagają tych samych dwóch danych wejściowych: szeregu dziennej zmienności implikowanej dla akcji oraz okna czasowego, standardowo wynoszącego dwieście pięćdziesiąt dwa dni sesyjne. Sama zmienność implikowana to zannualizowany szacunek rynku opcji dotyczący skali przyszłego ruchu kursu akcji, wyliczony na podstawie bieżących cen opcji, co szczegółowo wyjaśnia artykuł co mierzy zmienność implikowana.
Różnica między nimi polega na tym, jak dużą część okna czasowego uwzględniają. IV rank bierze pod uwagę dokładnie dwa dni z dwustu pięćdziesięciu dwóch: dzień z najwyższym i dzień z najniższym odczytem. Wszystko, co znajduje się pomiędzy nimi, jest pomijane. IV percentile traktuje każdy dzień jednakowo i nie analizuje rozpiętości między odczytami. Pierwszy wskaźnik określa pozycję wewnątrz zakresu. Drugi jest zliczeniem dni.
Przykład obliczeniowy do samodzielnej weryfikacji
Przyjmijmy hipotetyczną dziesięciodniową serię IV, po jednym odczycie na sesję: 22, 24, 21, 60, 26, 25, 23, 27, 24 oraz dzisiejszy wynik 28. Wartość minimalna wynosi 21, a maksymalna 60.
IV rank: (28 - 21) / (60 - 21) x 100 = 7 / 39 x 100 = 17,9.
IV percentile: siedem z dziesięciu odczytów, tj. 22, 24, 21, 26, 25, 23 oraz 24, znajduje się poniżej 28, co daje 7 / 10 x 100 = 70,0.
IV rank na poziomie 17,9 wskazuje na tanią zmienność. IV percentile na poziomie 70 oznacza, że przez większość dni w badanym okresie zmienność była niższa niż obecnie. Oba wskaźniki poprawnie opisują ten sam zestaw dziesięciu liczb.
Teraz zmieńmy jedną wartość. Zastąpmy 60 wartością 30, pozostawiając pozostałe dziewięć odczytów bez zmian. IV rank wynosi wówczas (28 - 21) / (30 - 21) x 100 = 77,8. IV percentile pozostaje bez zmian: nadal 70,0. Jedna sesja, która wyznaczyła maksimum, ma kluczowe znaczenie dla IV rank, ale nie wpływa w żaden sposób na IV percentile.
To właśnie jest strukturalna słabość IV rank. Pojedynczy skok w badanym oknie, wynikający np. z publikacji wyników finansowych lub jednodniowej paniki, drastycznie zwiększa mianownik i utrzymuje wskaźnik na niskim poziomie przez kolejne dwanaście miesięcy, długo po tym, jak dany incydent przestał wpływać na łańcuch opcji. Gdy oba wskaźniki znacząco się różnią, rozbieżność ta zazwyczaj sygnalizuje obecność wartości odstającej w badanym okresie, a IV percentile stanowi wówczas wierniejszy opis historycznego rozkładu zmienności. IV rank lepiej sprawdza się w sytuacjach, gdy zakres zmienności jest stabilny, a oba ekstrema są reprezentowane przez więcej niż jedną sesję. Żaden z tych wskaźników nie informuje o kierunku zmian.
Jak wygląda rzeczywista seria IV
Oto surowe dane, na których bazują oba wzory. Poniższy panel tworzy dzienny odczyt implikowanej zmienności dla instrumentów at-the-money dla AAPL z kontraktów o terminie wygaśnięcia od dwudziestu do czterdziestu pięciu dni i w przedziale pięciu procent od ceny akcji, a następnie uśrednia te odczyty w ujęciu tygodniowym.
Dokładny kod SQL dla każdej liczby
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)Seria obejmuje 54 punktów tygodniowych, od tygodnia Jul 28, 2025, w którym średnia wyniosła 30.03%, aż po tydzień Aug 3, 2026 z wynikiem 27.7%. Kształt tej linii decyduje o tym, czy ranga i percentyl są ze sobą zgodne. Linia z jednym wysokim, odizolowanym skokiem powoduje ich rozbieżność. Linia poruszająca się wewnątrz stabilnego pasma utrzymuje je blisko siebie. Nasza strona implikowana zmienność AAPL śledzi ten walor w czasie; w kwestii poziomu bezwzględnego bez uwzględnienia historii, zobacz czy 30% IV to dużo.
IV rank a IV percentile dla ośmiu tickerów
Te same wzory, ten sam okres analizy, osiem płynnych walorów, jedna sesja. Kolumna gap przedstawia bezwzględną różnicę między obydwoma wynikami.
Dokładny kod SQL dla każdej liczby
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 DESCWedług stanu na Aug 3, 2026, największa rozbieżność w tabeli wynosi 35.6 punktów i dotyczy AAPL, gdzie IV rank wynosi 32.4 przy IV percentile na poziomie 68. Na drugim końcu zestawienia znajduje się TSLA, gdzie różnica między tymi wartościami wynosi 6.5 punktów. Skanowanie rynku oparte na jednym wskaźniku zwraca inną listę niż skanowanie oparte na drugim, co stanowi praktyczny powód, dla którego należy wiedzieć, który z nich wyświetla dana platforma. Skaner akcji o najwyższym IV rank sortuje rynek według pierwszego z nich.
Zakres danych wejściowych dla każdego rankingu w tabeli
Podstawienie bieżących wartości oraz minimów i maksimów do wzoru na ranking pozwala uzyskać wynik przedstawiony w powyższej kolumnie.
Dokładny kod SQL dla każdej liczby
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 DESCDlaczego dwie platformy podają różne wartości dla tego samego tickera
Żaden ze wzorów nie jest niejednoznaczny. Niejednoznaczne są dane wejściowe. Dostawcy rzadko publikują informacje o tym, który szereg IV wykorzystują, a powszechnie stosowane rozwiązania znajdują się na przeciwległych końcach łańcucha: IV o stałym terminie zapadalności trzydziestu dni, interpolowana między dwiema seriami wygasającymi po obu stronach trzydziestu dni, lub kontrakt z najbliższego miesiąca wygasania typu at the money, który wykazuje znacznie większą zmienność. Niektóre platformy uśredniają cały łańcuch. Niniejszy panel analizuje jedną spółkę przy użyciu trzech definicji danych wejściowych IV w tym samym okresie pięćdziesięciu dwóch tygodni.
Dokładny kod SQL dla każdej liczby
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 DESCPodczas ostatniej sesji Wide net, any expiry odnotowuje 37.6%, podczas gdy Near 30 day ATM odnotowuje 27.7%, a ich rangi IV wynoszą odpowiednio 23.1 oraz 32.4. Ta sama spółka, ta sama sesja, ten sam wzór, inna definicja danych wejściowych.
Drugim czynnikiem jest długość okresu analizy wstecznej. Standardem jest pięćdziesiąt dwa tygodnie, a wiele platform oferuje obok tego ustawienia trzydziestu, sześćdziesięciu lub dziewięćdziesięciu dni.
Dokładny kod SQL dla każdej liczby
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_daysPrzy okresie analizy wstecznej 1 month spółka ta uzyskuje wynik 0.4 w randze IV oraz 4.8 w percentylu IV. Po wydłużeniu okna do 24 months ta sama sesja daje wyniki 23.4 oraz 63.3. W łańcuchu opcji między tymi wierszami nie zmieniło się nic. Zmieniło się tylko okno czasowe. Gdy dwa ekrany pokazują rozbieżne dane dla tego samego tickera, ustawienie okresu analizy wstecznej oraz szereg IV są pierwszymi dwoma elementami, które należy sprawdzić.
Sposób wykorzystania obu wskaźników
Oba odczyty służą jako filtr przy wyborze strategii, a nie jako prognoza. Traderzy sprzedający zmienność, w tym stosujący strategie covered call oraz cash secured put, zazwyczaj poszukują wysokich odczytów, przy których opcja jest wyceniana na większy ruch, niż zazwyczaj wykazywał instrument bazowy w danym okresie. Traderzy kupujący zmienność analizują dolne zakresy, gdzie ta sama logika działa w odwrotnym kierunku. Wynik relatywny sprawdza się w tym zadaniu lepiej niż surowa wartość IV: poziom IV wynoszący czterdzieści procent jest typowy dla jednej spółki, a ekstremalny dla innej, dlatego ocena akcji w odniesieniu do własnej historii eliminuje ten problem. Artykuł Czy wysoka zmienność implikowana jest korzystna szczegółowo omawia kompromisy po obu stronach.
Należy zachować jedną ostrożność, której liczby nie wyjaśnią. Wysoki odczyt może wzrosnąć jeszcze bardziej, a ranga na poziomie dziewięćdziesięciu pięciu w poniedziałek może spaść do sześćdziesięciu w piątek bez żadnej zmiany w pozycji. Żaden z tych wskaźników nie dostarcza informacji o kierunku: podwyższona zmienność implikowana oznacza, że rynek wycenił duży ruch, nie wskazując jednak, w którą stronę on nastąpi.
Najczęściej zadawane pytania
Co jest lepsze: IV rank czy IV percentile?
Wskaźniki te odpowiadają na odmienne pytania. IV percentile sprawdza się lepiej, gdy w badanym okresie wystąpił jeden gwałtowny skok zmienności, ponieważ zlicza dni, zamiast odnosić się do pojedynczej wartości ekstremalnej. IV rank jest bardziej intuicyjny, gdy zakres danych jest dobrze wypełniony, ponieważ bezpośrednio wskazuje, jak blisko dzisiejszy poziom znajduje się względem maksimum z ostatnich dwunastu miesięcy.
Jaki poziom IV rank uznaje się za wysoki?
Większość zespołów trading desk traktuje odczyty powyżej 50 jako górną połowę zakresu zmienności danej spółki, a odczyty powyżej 80 jako poziom istotnie podwyższony dla danego waloru. Wynik ten jest z założenia relatywny, dlatego IV rank na poziomie 80 dla stabilnej spółki z sektora dóbr konsumpcyjnych oraz dla zmiennej spółki wzrostowej opisują zupełnie inne bezwzględne poziomy IV.
Czy IV rank i IV percentile wykorzystują ten sam okres historyczny?
Zazwyczaj jest to dwieście pięćdziesiąt dwie sesje giełdowe dla obu wskaźników, choć ustawienie to można zmieniać na większości platform, a wartości domyślne różnią się w zależności od dostawcy. Powyższy panel pokazuje, że ta sama spółka może uzyskiwać różne wyniki przy różnych długościach okna czasowego; jest to pierwsza rzecz, którą należy sprawdzić w przypadku rozbieżności między dwoma narzędziami.
Czy IV rank może wynosić 0 lub 100?
Tak. IV rank osiąga 100 w dniu, w którym spółka notuje nowe pięćdziesięciodwutygodniowe maksimum zmienności implikowanej, oraz 0 w przypadku nowego minimum, ponieważ dzisiejszy odczyt stanowi jeden z punktów krańcowych zakresu. IV percentile rzadko osiąga te ekstrema, ponieważ dzisiejsza sesja jest uwzględniana w mianowniku.
Dlaczego mój IV rank zmienił się, mimo że IV pozostało bez zmian?
Okno czasowe przesuwa się z każdą sesją. Gdy stary skok zmienności wypada z okresu ostatnich pięćdziesięciu dwóch tygodni, wartość maksymalna w mianowniku zostaje zaktualizowana do niższego poziomu, co powoduje wzrost rankingu, nawet jeśli dzisiejsze IV pozostaje niezmienione. IV crush opisuje drugie częste zaskoczenie, czyli spadek samej wartości IV bezpośrednio po publikacji raportu o wynikach finansowych.
Każdy panel w tym miejscu zawiera odpowiadające mu zapytanie SQL. Wystarczy zmienić ticker w dowolnym z nich, aby uzyskać wycenę innego waloru w terminalu Strasmore.