IVランクとIVパーセンタイルの計算式と違い
IVランクとIVパーセンタイルの違いを、両方の計算式と手計算できる例で解説します。同じ銘柄で数値が大きく異なる理由も説明します。
IVランクとIVパーセンタイルの違いは、同じデータに対して行う二つの算術計算に集約されます。IVランクは、今日のインプライド・ボラティリティが過去52週間の最低値から最高値までのレンジのどこに位置するかを測ります。IVパーセンタイルは、対象期間中に今日の数値を下回って取引を終えた営業日の割合を数えます。同じ銘柄でも、同じ日の午後に、一方が18、もう一方が70になることがあります。
二つの計算式
IV rank =(現在のIV − 52週間のIV最低値)/(52週間のIV最高値 − 52週間のIV最低値)× 100
IV percentile =(期間内でIVが本日のIVを下回った取引日数)/(期間内の総取引日数)× 100
いずれも0から100の範囲に収まります。必要な入力値も同じ二つです。対象銘柄の日次インプライド・ボラティリティ系列と、一般に252取引日とする振り返り期間です。インプライド・ボラティリティは、リアルタイムのオプション価格から逆算した、株価がどの程度変動するかに関するオプション市場の年率換算の推計値です。詳しくはインプライド・ボラティリティが測るもので基本から説明しています。
両者を分けるのは、期間内のデータをどの程度参照するかです。IV rankが見るのは、252日のうち厳密には二日だけです。最高値と最低値です。その間の数値は考慮しません。IV percentileは各日を均等に参照し、数値同士の差がどれほど大きいかは問いません。一方はレンジ内の位置です。もう一方は日数のカウントです。
手計算で確認できる例
十セッション分の架空のIV系列を使う。各セッションの数値は、22、24、21、60、26、25、23、27、24、そして本日の28とする。最小値は21、最大値は60である。
IVランク: (28 - 21) / (60 - 21) x 100 = 7 / 39 x 100 = 17.9。
IVパーセンタイル:28を下回る数値は、22、24、21、26、25、23、24の七つである。したがって、7 / 10 x 100 = 70.0となる。
IVランク17.9は、ボラティリティが割安であることを示す。IVパーセンタイル70は、対象期間の大半の日において、ボラティリティが現在の水準を下回っていたことを示す。どちらも、同じ十個の数値を正しく説明している。
ここで一つの数値を変える。60を30に置き換え、残り九つの数値はそのままとする。IVランクは (28 - 21) / (30 - 21) x 100 = 77.8となる。IVパーセンタイルは変わらず、70.0のままである。最高値を形成した一セッションは、IVランクには60ポイント分の影響を与えるが、IVパーセンタイルにはまったく影響しない。
これがIVランクの構造的な弱点である。対象期間に一度だけ急上昇があると、決算発表を受けた急落や一日限りの不安心理であっても、分母が大きく広がる。その結果、オプションチェーンからその急上昇の影響が消えた後も、続く十二カ月間、ランクは底近くに固定される。二つのスコアが大きく食い違う場合、その食い違いは通常、対象期間内に外れ値があることを示している。ボラティリティが実際にどの水準で推移してきたかをより忠実に示すのは、IVパーセンタイルである。レンジが滑らかで、両端の水準が複数のセッションで形成されている場合は、IVランクの方が適切な指標となる。どちらの数値も、方向性については何も示さない。
実際のIV系列の形
以下は、両方の計算式に使う元データです。下のパネルでは、AAPLについて、満期まで20〜45日で株価から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() - 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)この系列は54週分のデータで構成されています。Jul 28, 2025の週の平均値は30.03%で、Aug 3, 2026の週は27.7%でした。この線の形によって、順位とパーセンタイルが一致するかどうかが決まります。孤立した大きな急騰が一度だけある系列では、両者に差が生じます。安定したレンジ内で推移する系列では、両者は近い値になります。当社のAAPLインプライド・ボラティリティページでは、この銘柄の推移を確認できます。過去の推移を伴わない絶対水準の判断については、IV30%は高いかをご覧ください。
8銘柄におけるIVランクとIVパーセンタイルの比較
同じ計算式、同じ参照期間、流動性の高い8銘柄、1セッションです。gap列は、2つのスコアの絶対差を示します。
各数値の背後にある正確な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時点で、表中の乖離が最大なのは35.6ポイントです。該当するAAPLでは、IVランクが32.4、IVパーセンタイルが68となっています。一方、表の反対側では、TSLAの2つの指標の差は6.5ポイント以内に収まっています。一方の数値でスクリーニングすると、もう一方の数値を使った場合とは異なる銘柄リストになります。利用するプラットフォームがどちらの数値を表示しているのかを把握すべき理由はここにあります。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同じティッカーで二つのプラットフォームの数値が異なる理由
どちらの計算式も曖昧ではない。異なるのは入力値だ。データベンダーは、どのIV系列を使っているかを公表しないことが多い。一般的な選択肢は、算定期間の両側にある二つの限月の間を補間した30日一定満期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直近のセッションでは、Wide net, any expiryが37.6%を示す一方、Near 30 day ATMは27.7%を示し、IVランクはそれぞれ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ルックバック期間を1 monthとした場合、この銘柄のIVランクは0.4、IVパーセンタイルは4.8となる。期間を24 monthsまで延ばすと、同じセッションでの数値はそれぞれ23.4と63.3になる。これらの行の間でオプションチェーンに変化はない。変わったのは期間だけだ。二つの画面で同じティッカーの数値が一致しない場合、最初に確認すべきなのはルックバック設定とIV系列である。
2つの数値の使い方
どちらの数値も、戦略選択のフィルターとして使います。予測に使うものではありません。オプション・プレミアムを売るトレーダーは、カバードコールと現金担保付きプットを含め、高い数値を探す傾向があります。対象期間に株価が通常示してきた値動きよりも大きな値動きを、オプション価格が織り込んでいる局面です。プレミアムを買うトレーダーは、同じ考え方を逆に適用し、低い水準に注目します。この用途では、絶対値のIVより相対スコアの方が有効です。ある銘柄ではIV 40%が通常でも、別の銘柄では極端な水準になり得ます。銘柄を自身の過去実績と比較すれば、この問題を取り除けます。高いインプライド・ボラティリティは良いのかという問いは、売り手と買い手それぞれのトレードオフを通じて考える必要があります。
ただし、数値だけでは判断できない点があります。高い数値はさらに上昇する可能性があります。月曜日のランクが95でも、ポジションを変えていなければ、金曜日には60になっていることがあります。どちらのスコアにも方向性の情報はありません。IVが高いということは、市場が大きな値動きを織り込んでいることを示しますが、上昇か下落かまでは示しません。
よくある質問
IVランクとIVパーセンタイルでは、どちらが優れていますか?
両者は異なる問いに答えます。ルックバック期間に急激なスパイクが一度含まれる場合は、単一の極端値との比較ではなく日数を数えるIVパーセンタイルの方が安定します。一方、値が十分に分布している場合は、12カ月高値に今日の水準がどれだけ近いかを直接示すIVランクの方が直感的です。
IVランクが高いとは、どの程度ですか?
多くのトレーディングデスクでは、50を超える水準をその銘柄固有のレンジの上半分、80を超える水準をその銘柄にとって明確に高い水準とみなします。IVランクは仕組み上、相対指標です。そのため、値が80でも、値動きの小さい生活必需品銘柄と、ボラティリティの高いグロース銘柄では、絶対的なIV水準は大きく異なります。
IVランクとIVパーセンタイルは、同じルックバック期間を使いますか?
通常は両方とも252取引日です。ただし、ほとんどのプラットフォームでは設定を変更でき、初期設定はベンダーによって異なります。上のパネルでは、同じ銘柄でも期間の長さによってスコアが異なっています。二つのツールの結果が一致しない場合、まず確認すべき点です。
IVランクが0または100になることはありますか?
あります。株式のインプライド・ボラティリティが52週間の新高値を付けた日にIVランクは100となり、新安値を付けた日に0となります。今日の値自体がレンジの一方の端点になるためです。IVパーセンタイルがいずれかの極端値に達することは、通常ほとんどありません。今日のセッション自体が分母に含まれるためです。
IVが動いていないのに、IVランクが変わったのはなぜですか?
期間は毎セッション更新されます。過去52週間のローリング期間から過去のスパイクが外れると、分母となる高値が低い水準に更新されます。その結果、今日のIVが変わらなくてもIVランクは上昇します。決算発表直後にIV自体が低下する、もう一つの典型的な変化については、IVクラッシュで説明しています。
ここにある各パネルには、その下で実行されるSQLが正確に表示されています。いずれかのパネルでtickerを入れ替えれば、Strasmore terminalで別の銘柄を分析できます。