Strasmore Research
學習 Matt Connor作者: Matt Connor

Put/Call Ratio 如何計算

了解 put/call ratio 如何以 put 與 call 的成交量或未平倉量計算,並掌握指數讀數較高的原因與 2026 年正常範圍。

Put/call ratio 的計算方式,是將同一期間內成交的 put 合約數量除以 call 合約數量。若某交易時段成交 250,000 口 put 與 500,000 口 call,該比率就是 0.50。市場對這項指標的所有討論,包括成交量與未平倉量、個股與指數之間的差異,最終都取決於除法兩側各自計入了哪些合約。若要先了解基本定義,請參閱put/call ratio 是什麼。本頁將說明計算方式。

Put/call ratio 的計算公式:逐步說明

這項公式包含兩個輸入值與一個運算:計算成交的 put 數量、計算成交的 call 數量,再以前者除以後者。Put 是一種契約,賦予持有人在到期日當天或之前,以固定 exercise price 賣出 100 股標的資產的權利。Call 則賦予持有人以固定 exercise price 買進的權利。成交量計算該交易時段內轉手的契約數,並在下一個開盤時歸零。

計算數量時不進行加權。深度價外週選的一口,與盤面上成交最活躍 exercise price 的一口,權重完全相同;兩者也都不會按所承擔的資金風險進行調整。這項 ratio 計算的是契約數量。

真正會改變結果的選擇,在於哪些契約會納入計算。下方面板以相同算式,計算八檔高流動性標的在完整一個月內的數據。

查詢2026年7月八檔知名股的買權與賣權成交量
每個數據背後的精確 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 DESC
Run this yourself

2026年7月期間,IWM 的 ratio 為八檔標的中最高,每一口 call 對應 3.11 口 put;MSFT 最低,為每一口 call 對應 0.38 口 put。同一個公式、同一個月,最高與最低標的之間的差距,遠大於市場評論經常提及的日間波動。若未標明分類,單獨引用一個 ratio 幾乎不具備資訊價值。

以成交量或未平倉量為基礎

分子與分母可以採用兩種不同的統計口徑。

成交量版本計算觀察區間內成交的合約數。這是流量指標,每個交易時段都從零開始,反映投資人當天的行為。市場報導中的各種標題比率,都是採用這一版本。

未平倉量版本則以未平倉買權合約數除以未平倉賣權合約數。未平倉量是指已建立、但尚未平倉、履約或到期的合約數。這是存量指標,反映累積部位,而非當日交易活動,因此變動較慢。若一個交易時段內有 30,000 張賣權在兩名既有持有人之間轉手,成交量會增加 30,000 張,但未平倉量維持不變。Options volume versus open interest說明了相關的記錄方式。

假設某標的在週二收盤時有 40,000 張未平倉賣權與 50,000 張未平倉買權,未平倉量比率為 0.80。週三有 30,000 張賣權與 10,000 張買權成交,成交量比率為 3.00。同一天的同一個選擇權鏈可以同時得到這兩個數字。兩者相差近四倍,但都正確。未平倉量比率也是最大痛點計算的基礎;該計算是依未平倉合約數,而非成交合約數,為各履約價加權。

流量指標容易大幅波動。以下是同一個月內,一檔 ETF 與一檔個股的每日成交量比率。

查詢2026年7月每日買權/賣權成交量比:SPY與AAPL比較
每個數據背後的精確 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 d
Run this yourself

Jul 1,SPY 的成交量比率為 1.1,AAPL 則為 0.49。到了 Jul 31,兩者分別為 20.55。在 22 個交易時段內,每日成交數據上下波動,兩條序列在圖表上的水準也不同。兩者之中,水準差距更值得關注。

股票、指數、ETP 與總體:Cboe 的四種比率

所謂「put/call ratio」的數值,來自 Cboe 每日市場統計資料。Cboe 會公布數種 put/call ratio。分類如下:

  • 股票 put/call ratio:個別股票的選擇權。
  • 指數 put/call ratio:指數選擇權,包括 SPX 與 VIX。
  • 交易所交易產品 put/call ratio:ETF 的選擇權,SPY、QQQ 與 IWM 均屬於此類。
  • 總體 put/call ratio:將所有類別加總。

每一種比率的計算方式都相同,都是該類別中 put 的總量除以 call 的總量。因此,讀數的差異只來自各類別所包含的標的不同。這些類別不能互換。

指數選擇權是以一筆交易避險整體投資組合的標準工具。持有廣泛股票部位的基金,會買進指數 put 進行避險,卻沒有相應理由買進指數 call。這類需求具有單向性,會全部計入指數類別的分子。個股交易流則呈現相反傾向,個別股票的 call 買進量占成交量的比重通常很高,而且長期如此。這兩個類別因結構不同而處於不同水準。將其中一類的讀數與另一類的基準比較,是使用這項指標時最常見的錯誤。

廣泛型市場 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
Run this yourself

圖表涵蓋 Aug 2025Jul 2026。在兩個端點,ETF 籃子每日比率的中位數都接近或高於 1.0;第一個月為 1.52,最後一個月為 1.49。個股籃子在兩個端點都低於 1.0,分別為 0.60.56,且在圖表涵蓋的全部 12 個月中皆如此。這項持續存在的差距,正是基準值必須標明所屬類別的原因;否則該基準沒有實質意義。

正常的 put/call ratio 是多少

「正常」是一個區間,而這個區間取決於分類,不是指標本身。下方面板涵蓋過去十二個月的每個交易日,列出各籃子每日 ratio 的中位數,並以第10與第90百分位數標示其範圍邊界。

查詢每日比率實際落點:12個月交易日
每個數據背後的精確 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
Run this yourself

單一股票籃子的交易日中位數為 0.58;第10百分位數為 0.45,第90百分位數為 0.76。廣泛市場 ETF 籃子在整個分布中的數值較高:中位數為 1.54,介於 1.251.86 兩個邊界之間。

那麼,1.20 算高嗎?相較於單一股票籃子,1.20 這筆成交高於 0.76 的第90百分位數,因此並不常見。相較於 ETF 籃子,這個數值則接近日常水準。至於指數類別,前文所述的避險交易流集中於此,則必須再以另一組水準來判斷。同一個數字,最終屬於哪個類別,會在開始解讀前先決定結論。

這些區間也會隨時間變動。以過去十二個月計算的百分位數,只能描述過去十二個月;而沿用十年前文章中的基準區間,描述的是合約組成不同、幾乎沒有 零日到期交易 的市場。要判斷某個讀數偏高或偏低,唯一符合實際的方法,是以近期期間重新計算百分位數。

解讀與計算是兩項不同的工作。有些人將偏高的讀數解讀為偏空部位;反向投資者則視其為過度擁擠的避險交易。偏高的 put/call ratio 是否看多,應完整拆解這項爭論。

為何採用21日移動平均

單一交易日的比率只是雜訊序列中的小樣本,因此發布的數值通常會經過平滑處理。常見做法是採用21日移動平均,約相當於一個交易月:加總最近21個交易日的每日比率,再除以21,然後將視窗向前移動一個交易日。市場上也有10日與50日版本;所選期間長度會決定單日尖峰有多少能保留下來。

有兩點值得注意。將21個每日比率取平均,和用一個月的 put 成交量除以一個月的 call 成交量,並不是同一種算術。前者讓每個交易日的權重相同,後者則讓成交較活躍的交易日占更大權重。其次,處於極端值的平滑讀數,是由一個月內多個交易日的資料組成,因此離開該極端值的速度也較慢。

查詢個股每日買權/賣權比與其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
Run this yourself

鋸齒狀線是單一股票籃子的每日比率,平滑線則是其21日平均值。在圖表顯示的第一個交易日 Apr 1,每日成交數據為 1.04,平滑值為 0.81。在 Jul 31,兩者分別為 0.560.58。在 84 個交易日內,平均值移動的距離只有原始序列的一部分,這正是引用平滑數值的全部目的。

這些圖表如何計算

契約類型直接取自選擇權代號:位於八位數履約價代碼前的字母,C 代表 call,P 代表 put。只有當日有申報成交量的契約才會納入計算,因此從未成交的履約價不會增加任何一方的數量。第一個圖表針對每一檔標的,以當月 put 總成交量除以當月 call 總成交量。其餘圖表則先為每個交易日計算一個比率,再彙總這些交易日,這符合發布移動平均值的建構方式。籃子包括代表大盤的 SPY、QQQ 與 IWM,以及代表個股的 AAPL、MSFT、NVDA、TSLA 與 KO。每個圖表都附有產生該結果的完整 SQL。

常見問題

如何計算 put/call ratio?

將同一期間內的 put contracts 數量除以 call contracts 數量。多數公開版本採用該交易時段的成交量,因此 0.65 代表每成交 100 張 calls,就有 65 張 puts 成交。open interest 版本則使用未平倉合約數,而非成交合約數,回答的是不同問題。

put/call ratio 高於 1,代表數值偏高嗎?

這取決於分類。就上方圖表中的單一股票籃子而言,每日讀數的第90百分位為 0.76,因此高於該水準的 prints 並不常見。對廣泛市場 ETF 與指數選擇權而言,由於投資組合避險集中在 put 端,接近或高於 1 的讀數很常見。

volume put/call ratio 與 open interest put/call ratio 有何不同?

Volume 計算該交易時段內成交的合約數,並在每天早上重新開始。Open interest 計算仍然未平倉的合約數,並會從一天延續至下一天。Volume 版本在單一交易時段內可能翻倍,但 open interest 版本可能只變動幾個百分點,因此兩者在同一天常會指向不同方向。

財經媒體引用哪一種 put/call ratio?

通常是 Cboe equity put/call ratio 或 total put/call ratio,而且多半採用 21個交易時段的移動平均,而非原始的每日 print。Cboe 的四個分類處於不同水準,因此沒有標示分類的引用數值,無法與任何基準比較。


本頁的每個圖表都附有產生該圖表的 SQL,因此每一項計數都能逐行核對。若要對其他標的或更長期間進行相同計算,請在 Strasmore terminal 以一般英文提出要求。

#put call ratio#options#sentiment#cboe#options volume