プット/コールレシオの計算方法
プット/コールレシオの計算式を解説します。出来高と未決済建玉の違い、指数で数値が高くなりやすい理由、2026年の正常な水準を確認できます。
プット/コールレシオは、同じ期間に取引されたプット契約数をコール契約数で割って算出します。あるセッションでプットが250,000枚、コールが500,000枚取引された場合、レシオは0.50です。この指標を巡る議論はすべて、出来高と未決済建玉のどちらを使うか、株式オプションと指数オプションのどちらを対象にするかを含め、割り算の両側で何を数えたかに行き着きます。基本的な定義については、プット/コールレシオとは何かから確認してください。このページでは計算方法を説明します。
プット/コール比率の計算方法を段階的に確認
この計算式には二つの入力値と一つの演算がある。約定したプットの数を数え、約定したコールの数を数え、前者を後者で割る。プットは、保有者に原資産100株を固定された行使価格で満期日までに売る権利を与える契約だ。コールは、固定された行使価格で買う権利を与える。出来高は、取引時間中に売買された契約数を示し、次の取引開始時にはゼロに戻る。
集計では、どの契約にも加重しない。大きくアウト・オブ・ザ・マネーのweeklyの一枚も、板で最も売買が集中する行使価格の一枚も、同じ一枚として数える。リスクにさらされている金額に応じて調整することもない。この比率は契約数の比率である。
結果を変えるのは、どの契約を集計対象にするかだ。以下のパネルでは、流動性の高い八銘柄について、一カ月間にわたり同じ計算を行っている。
各数値の背後にある正確なSQL
SELECT
underlying_symbol AS symbol,
sumIf(volume, right_letter = 'P') AS put_volume,
sumIf(volume, right_letter = 'C') AS call_volume,
round(toFloat64(sumIf(volume, right_letter = 'P'))
/ toFloat64(sumIf(volume, right_letter = 'C')), 2) AS put_call_ratio
FROM
(
SELECT
underlying_symbol,
volume,
substring(ticker, length(ticker) - 8, 1) AS right_letter
FROM global_markets.options_greeks
WHERE date >= '2026-07-01'
AND date < '2026-08-01'
AND underlying_symbol IN ('SPY', 'QQQ', 'IWM', 'AAPL', 'MSFT', 'NVDA', 'TSLA', 'KO')
AND volume > 0
)
GROUP BY symbol
HAVING call_volume > 0 AND put_volume > 0
ORDER BY put_call_ratio DESC2026年7月には、IWMの比率が八銘柄中で最も高く、コール一枚当たり3.11枚のプットとなった。一方、MSFTは0.38で最も低かった。同じ計算式と一カ月の期間でも、首位銘柄と最下位銘柄の差は、日々の小幅な変動として語られる差を大きく上回る。カテゴリーを付けずに示された比率から得られる情報は、ほとんどない。
出来高ベースか、建玉ベースか
分子と分母には、異なる二つのカウントを使えます。
出来高ベースでは、対象期間中に取引された契約数を数えます。これは毎セッション、ゼロから始まるフロー指標で、当日に市場参加者が何をしたかを示します。市場報道で示される一般的な見出しベースの比率は、すべてこちらです。
建玉ベースでは、未決済のプットを未決済のコールで割ります。建玉とは、建てられた後、まだ決済、権利行使、満期を迎えていない契約数です。これは当日の活動ではなく、累積したポジションを示すストック指標で、動きは緩やかです。既存の二人の保有者間で30,000プットが売買されたセッションでは、出来高は30,000増えますが、建玉は変わりません。オプションの出来高と建玉で、この計上方法を説明しています。
仮に、ある銘柄が火曜日の取引終了時点で、未決済のプット40,000枚、コール50,000枚を抱えていたとします。建玉比率は0.80です。水曜日にはプット30,000枚、コール10,000枚が取引され、出来高比率は3.00になります。同じ日に同じオプションチェーンを示す二つの数値ですが、ほぼ四倍の差があり、どちらも正しい値です。建玉比率は最大損失計算の基礎にもなっています。この計算では、取引された契約数ではなく、未決済契約数に基づいて行使価格を加重します。
フロー指標は変動が大きくなります。以下は、同じ月について、あるETFと一つの個別株の日次出来高比率を示したものです。
各数値の背後にある正確なSQL
SELECT
toString(d) AS session_date,
concat(formatDateTime(d, '%b '), toString(toDayOfMonth(d))) AS day_label,
round(toFloat64(sumIf(volume, sym = 'SPY' AND right_letter = 'P'))
/ toFloat64(sumIf(volume, sym = 'SPY' AND right_letter = 'C')), 2) AS spy_put_call_ratio,
round(toFloat64(sumIf(volume, sym = 'AAPL' AND right_letter = 'P'))
/ toFloat64(sumIf(volume, sym = 'AAPL' AND right_letter = 'C')), 2) AS aapl_put_call_ratio
FROM
(
SELECT
date AS d,
underlying_symbol AS sym,
volume,
substring(ticker, length(ticker) - 8, 1) AS right_letter
FROM global_markets.options_greeks
WHERE date >= '2026-07-01'
AND date < '2026-08-01'
AND underlying_symbol IN ('SPY', 'AAPL')
AND volume > 0
)
GROUP BY d
HAVING countIf(sym = 'SPY' AND right_letter = 'C') > 0
AND countIf(sym = 'AAPL' AND right_letter = 'C') > 0
ORDER BY dJul 1には、SPYの値が1.1、AAPLの値が0.49でした。Jul 31までに、両銘柄の値は2と0.55になりました。22セッションにわたり日々の取引値は大きく変動し、チャート上では二つの系列が異なる水準で推移しています。二つの水準の差のほうが、より有用な情報です。
株式、指数、ETP、合計:Cboeの4種類の比率
「プット/コールレシオ」として引用される数値は、複数の比率を公表しているCboeの日次市場統計に基づく。Cboeの名称では、カテゴリーは次のとおりである。
- 株式プット/コールレシオ:個別株のオプション。
- 指数プット/コールレシオ:SPXやVIXを含む指数のオプション。
- 取引所取引商品プット/コールレシオ:SPY、QQQ、IWMなどのETFのオプション。
- 合計プット/コールレシオ:すべてのカテゴリーを合算したもの。
各比率の計算方法は同じで、カテゴリー内のプット総数をコール総数で割る。違いは、集計対象に何が含まれるかだけである。各カテゴリーは互換性がない。
指数オプションは、ポートフォリオ全体を一度の取引でヘッジする標準的な手段である。幅広い銘柄を保有するファンドは、保有ポジションに対するヘッジとして指数プットを購入するが、指数コールを購入する理由は通常ない。この需要は一方向に偏り、指数カテゴリーの分子にすべて反映される。これに対し、個別株の売買フローは逆の傾向を示す。個別銘柄のコール買いが、出来高の大きく持続的な割合を占めるためである。両カテゴリーの水準は構造的に異なる。したがって、この指標で最も多い誤りは、一方のカテゴリーの数値を他方のカテゴリーのベンチマークと比較することである。
幅広い市場を対象とするETFは、指数オプションと同じヘッジ機能を担う一方、取引所取引商品カテゴリーに集計される。下のパネルは、この二つの区分について、月次中央値を追跡している。
各数値の背後にある正確なSQL
WITH
daily AS
(
SELECT
d,
toFloat64(sumIf(volume, right_letter = 'P' AND sym IN ('SPY', 'QQQ', 'IWM')))
/ toFloat64(sumIf(volume, right_letter = 'C' AND sym IN ('SPY', 'QQQ', 'IWM'))) AS etf_ratio,
toFloat64(sumIf(volume, right_letter = 'P' AND sym NOT IN ('SPY', 'QQQ', 'IWM')))
/ toFloat64(sumIf(volume, right_letter = 'C' AND sym NOT IN ('SPY', 'QQQ', 'IWM'))) AS stock_ratio
FROM
(
SELECT
date AS d,
underlying_symbol AS sym,
volume,
substring(ticker, length(ticker) - 8, 1) AS right_letter
FROM global_markets.options_greeks
WHERE date >= '2025-08-01'
AND date < '2026-08-01'
AND underlying_symbol IN ('SPY', 'QQQ', 'IWM', 'AAPL', 'MSFT', 'NVDA', 'TSLA', 'KO')
AND volume > 0
)
GROUP BY d
HAVING countIf(right_letter = 'C' AND sym IN ('SPY', 'QQQ', 'IWM')) > 0
AND countIf(right_letter = 'C' AND sym NOT IN ('SPY', 'QQQ', 'IWM')) > 0
)
SELECT
toString(toStartOfMonth(d)) AS month,
formatDateTime(toStartOfMonth(d), '%b %Y') AS month_label,
round(quantileExact(0.5)(etf_ratio), 2) AS etf_median_ratio,
round(quantileExact(0.5)(stock_ratio), 2) AS stock_median_ratio
FROM daily
GROUP BY month, month_label
ORDER BY monthこのパネルの期間はAug 2025からJul 2026までである。両端の時点で、ETFバスケットの1日当たり比率の中央値は1.0前後またはそれ以上だった。最初の月は1.52、最後の月は1.49である。個別株バスケットは両端の時点で1.0を下回り、それぞれ0.6と0.56だった。チャート上の全12カ月を通じて、この状態が続いた。この恒常的な乖離があるため、ベンチマークは意味を持つ前にカテゴリーを明示しなければならない。
正常なプット/コールレシオとは
「正常」は一定の範囲を指します。そして、その範囲は指標ではなくカテゴリーに属します。以下のパネルでは、直近12カ月の各セッションを対象に、バスケットごとの日次レシオの中央値を示し、その周囲に10パーセンタイルと90パーセンタイルの境界を示しています。
各数値の背後にある正確なSQL
WITH
daily AS
(
SELECT
d,
toFloat64(sumIf(volume, right_letter = 'P' AND sym IN ('SPY', 'QQQ', 'IWM')))
/ toFloat64(sumIf(volume, right_letter = 'C' AND sym IN ('SPY', 'QQQ', 'IWM'))) AS etf_ratio,
toFloat64(sumIf(volume, right_letter = 'P' AND sym NOT IN ('SPY', 'QQQ', 'IWM')))
/ toFloat64(sumIf(volume, right_letter = 'C' AND sym NOT IN ('SPY', 'QQQ', 'IWM'))) AS stock_ratio,
toFloat64(sumIf(volume, right_letter = 'P'))
/ toFloat64(sumIf(volume, right_letter = 'C')) AS all_ratio
FROM
(
SELECT
date AS d,
underlying_symbol AS sym,
volume,
substring(ticker, length(ticker) - 8, 1) AS right_letter
FROM global_markets.options_greeks
WHERE date >= '2025-08-01'
AND date < '2026-08-01'
AND underlying_symbol IN ('SPY', 'QQQ', 'IWM', 'AAPL', 'MSFT', 'NVDA', 'TSLA', 'KO')
AND volume > 0
)
GROUP BY d
HAVING countIf(right_letter = 'C' AND sym IN ('SPY', 'QQQ', 'IWM')) > 0
AND countIf(right_letter = 'C' AND sym NOT IN ('SPY', 'QQQ', 'IWM')) > 0
)
SELECT
p.2 AS category,
round(quantileExact(0.1)(p.3), 2) AS p10_ratio,
round(quantileExact(0.5)(p.3), 2) AS median_ratio,
round(quantileExact(0.9)(p.3), 2) AS p90_ratio
FROM
(
SELECT arrayJoin([
tuple(1, 'Broad market ETFs', etf_ratio),
tuple(2, 'Single stocks', stock_ratio),
tuple(3, 'All eight names', all_ratio)
]) AS p
FROM daily
)
GROUP BY p.1, p.2
ORDER BY p.1単一銘柄バスケットでは、セッションの中央値が0.58となり、10パーセンタイルは0.45、90パーセンタイルは0.76でした。幅広い市場ETFのバスケットは、分布全体でこれを上回り、中央値は1.54、境界は1.25と1.86でした。
では、1.20は高いのでしょうか。単一銘柄バスケットでは、1.20という約定値は0.76の90パーセンタイルを上回っており、通常とはいえません。ETFバスケットでは、ほぼ通常の範囲です。前述したヘッジフローが集中する指数カテゴリーでは、同じ数値でも、別の水準に照らして判断する必要があります。数値は一つでも、解釈を始める前にカテゴリーによって結論が決まります。
こうした範囲も変動します。直近12カ月を対象に算出したパーセンタイルは、直近12カ月の状況を示すものです。10年前の記事から引用したベンチマークの範囲は、契約構成が異なり、ゼロデイ満期取引がほとんど存在しなかった市場を示しています。数値が高いか低いかを判断するには、直近の期間でパーセンタイルを再計算するのが唯一、適切な方法です。
解釈は、計算とは別の作業です。高い数値を弱気ポジションとみなす人もいれば、逆張り投資家はヘッジが集中している状態とみなします。高いプット/コールレシオが強気なのかという論点が、この議論を適切に整理します。
21日移動平均を使う理由
一セッションの比率はノイズの多い系列における小さなサンプルであるため、公表値は通常、平滑化される。一般的には21セッション移動平均を使う。おおむね一取引月に相当し、直近21日間の比率を合計して21で割り、その後、対象期間を一セッションずつ前に移動させる。10セッションや50セッションの移動平均もあり、採用する期間によって、単日の急上昇がどの程度残るかが決まる。
二つの点を理解しておく必要がある。日次比率を21日分平均する計算は、一カ月間のプット出来高を一カ月間のコール出来高で割る計算とは異なる。前者は各セッションを均等に扱うが、後者は取引量の多いセッションをより重く反映する。また、極端な水準にある平滑化後の値は、一カ月分のセッションを使って算出されている。そのため、その極端な水準から離れる動きも緩やかになる。
各数値の背後にある正確なSQL
WITH
daily AS
(
SELECT
d,
toFloat64(sumIf(volume, right_letter = 'P'))
/ toFloat64(sumIf(volume, right_letter = 'C')) AS raw_ratio
FROM
(
SELECT
date AS d,
volume,
substring(ticker, length(ticker) - 8, 1) AS right_letter
FROM global_markets.options_greeks
WHERE date >= '2026-01-02'
AND date < '2026-08-01'
AND underlying_symbol IN ('AAPL', 'MSFT', 'NVDA', 'TSLA', 'KO')
AND volume > 0
)
GROUP BY d
HAVING countIf(right_letter = 'C') > 0
)
SELECT
session_date,
day_label,
daily_ratio,
ma21_ratio
FROM
(
SELECT
d,
toString(d) AS session_date,
concat(formatDateTime(d, '%b '), toString(toDayOfMonth(d))) AS day_label,
round(raw_ratio, 2) AS daily_ratio,
round(avg(raw_ratio) OVER (ORDER BY d ROWS BETWEEN 20 PRECEDING AND CURRENT ROW), 2) AS ma21_ratio
FROM daily
)
WHERE d >= '2026-04-01'
ORDER BY dギザギザした線は単一銘柄バスケットの日次比率で、滑らかな線はその21セッション平均である。表示開始日のApr 1では、日次の約定値は1.04、平滑化後は0.81だった。Jul 31では、両者は0.56と0.58だった。84セッション全体で見ると、平均値が進む距離は生の系列がカバーする距離の一部にとどまる。これが、平滑化後の数値を示す理由である。
これらのパネルの集計方法
契約タイプはオプション銘柄コード自体から判定する。8桁の行使価格コードの直前にある文字が、コールならC、プットならPである。そのセッションに報告済みの出来高がある契約だけを集計するため、一度も取引されなかった行使価格はどちらの側にも加わらない。最初のパネルでは、各銘柄について、その月のプット総出来高をその月のコール総出来高で割る。残りのパネルでは、まずセッションごとに一つの比率を算出し、その後に各セッションを集計する。これは、公表される移動平均の算出方法に一致する。バスケットは、広範な市場側がSPY、QQQ、IWM、単一銘柄側がAAPL、MSFT、NVDA、TSLA、KOで構成される。各パネルには、算出に使った正確なSQLが記載されている。
FAQ
プット/コールレシオはどのように計算しますか?
同じ期間のプット契約数をコール契約数で割ります。公表されている指標の多くはセッション中の出来高を使うため、0.65ならコール100枚に対してプット65枚が取引されたことを示します。建玉ベースの指標は、取引された契約数ではなく未決済契約数を使うため、別の問いに答える指標です。
プット/コールレシオが1を超えると高水準ですか?
対象カテゴリーによって異なります。上のパネルに示した単一銘柄バスケットでは、日次値の90パーセンタイルが0.76に位置するため、それを超える数値は珍しい部類に入ります。幅広い市場ETFや指数オプションでは、ポートフォリオのヘッジがプット側に集中するため、1前後や1を超える数値は通常見られます。
出来高ベースと建玉ベースのプット/コールレシオは何が違いますか?
出来高はセッション中に取引された契約数を数え、毎朝リセットされます。建玉は未決済のまま残っている契約数を数え、日々繰り越されます。出来高ベースの数値は一つのセッション内で倍になることもありますが、建玉ベースの数値は数パーセントしか動かない場合があります。そのため、同じ日に両者が異なる方向を示すことは珍しくありません。
金融メディアが引用するプット/コールレシオはどれですか?
通常はCboeの株式プット/コールレシオ、または総合プット/コールレシオです。多くの場合、日次の値ではなく、21セッション移動平均として示されます。Cboeの四つのカテゴリーは水準が異なるため、カテゴリーが付されていない数値は、どのベンチマークとも比較できません。
このページの各パネルには、生成に使ったSQLが付属しています。そのため、各件数を行単位で確認できます。別の銘柄やより長い期間で同じ計算を実行する場合は、Strasmore terminalで平易な英語を使って依頼してください。