Strasmore Research
市場回顧 Matt Connor作者: Matt Connor · 更新於 2026-07-24 · data as of July 24, 2026 · refreshed weekly

異常選擇權活動:最近一個交易日

篩選美股成交量異常標的,分析其與 20 個交易日平均值之差異及 Call 與 Put 比例。

「異常選擇權活動」是指單一標的在單一交易日內,其選擇權合約成交量遠高於近期常態水準。本表格針對最近一個已完成的選擇權交易日進行排名,Jul 22:將該標的的總成交合約數,與其前 20 個交易日的平均成交量進行比較。由於選擇權成交數據的更新落後於股票成交數據,因此此處標註的交易日為我們數據中最新且完整的交易日,而非今日。

在查看表格前需說明:這是一個成交量篩選工具。大多數發布的異常選擇權警示,是將當日的成交量與未平倉量(即收盤後仍持有的合約總數)進行比較。我們儲存的選擇權數據包含的是成交紀錄而非部位,且數據中不包含未平倉量欄位。下表中的每個比率,都是將標的的成交量與其自身的歷史成交量進行比較。選擇權成交量與未平倉量的比較 說明了各項指標所對應的意義。

非尋常選擇權活動:最近一個交易日

查詢異常選擇權活動:最近交易日 vs. 個股 20 日平均值
每個數據背後的精確 SQL 語法
WITH tape AS (
    SELECT toDate(toTimeZone(window_start, 'America/New_York')) AS d,
           sum(toFloat64(volume)) AS vol
    FROM global_markets.options_minute_aggs
    WHERE window_start >= toDateTime(today() - 45, 'America/New_York')
    GROUP BY d
),
ranked AS (
    SELECT d, vol, row_number() OVER (ORDER BY d DESC) AS raw_rn
    FROM tape
),
cal AS (
    SELECT d, vol, rn, sum(if(rn BETWEEN 2 AND 21, 1, 0)) OVER () AS baseline_sessions
    FROM (
        SELECT d, vol, row_number() OVER (ORDER BY d DESC) AS rn
        FROM ranked
        WHERE vol >= 0.75 * (SELECT quantileExact(0.5)(vol) FROM ranked WHERE raw_rn > 1)
    )
),
day_root AS (
    SELECT substring(ticker, 3, length(ticker) - 17) AS root,
           toDate(toTimeZone(window_start, 'America/New_York')) AS d,
           sum(toFloat64(volume)) AS vol
    FROM global_markets.options_minute_aggs
    WHERE window_start >= toDateTime(today() - 45, 'America/New_York')
    GROUP BY root, d
),
scored AS (
    SELECT r.root AS root,
           sumIf(r.vol, c.rn = 1) AS last_vol,
           avgIf(r.vol, c.rn BETWEEN 2 AND 21) AS base_vol,
           maxIf(r.vol, c.rn BETWEEN 2 AND 21) AS prior_high,
           countIf(c.rn BETWEEN 2 AND 21) AS root_sessions,
           max(c.baseline_sessions) AS baseline_session_count,
           maxIf(toYYYYMMDD(c.d), c.rn = 1) AS session_id,
           maxIf(formatDateTime(c.d, '%b %e'), c.rn = 1) AS session_label
    FROM day_root r INNER JOIN cal c ON r.d = c.d
    WHERE c.rn <= 21
      AND r.root NOT IN ('SPCX')
      AND r.root NOT IN ('KORU','SOXL','SOXS','TQQQ','SQQQ','NVDL','NVDS','NVD','TSLL','TSLQ','TSLZ','SPXL','SPXS','UPRO','SPXU','LABU','LABD','FAS','FAZ','TNA','TZA','YINN','YANG','UDOW','SDOW','BOIL','KOLD','UCO','SCO','USD','SSO','SDS','QLD','QID','ERX','ERY','DRN','DRV','CURE','SOXY','MUU','SNXX','UVXY','SVXY','UVIX','SVIX','BULZ','WEBL','WEBS','DPST','DRIP','GUSH','AGQ','ZSL','BITX','ETHU','MSTX','MSTU','CONL','DUST','JNUG','JDST','NUGT')
    GROUP BY r.root
    HAVING last_vol >= 25000 AND base_vol >= 5000 AND root_sessions >= 18
)
SELECT root AS ticker,
       round(last_vol / base_vol, 1) AS vol_ratio,
       round(last_vol / 1000, 1) AS session_volume_k,
       round(base_vol / 1000, 1) AS baseline_volume_k,
       round(prior_high / 1000, 1) AS prior_high_volume_k,
       session_label,
       session_id,
       baseline_session_count
FROM scored
ORDER BY vol_ratio DESC, ticker ASC
LIMIT 10

表格包含三個欄位。比率顯示標的資產的交易量高出其自身平均值多少。基準值代表正常交易量,若在交易量稀少的基準上出現高倍數,其影響力會比在交易量密集的基準上出現適度倍數來得小。20個交易日高點顯示該交易日是否突破了過去一個月的紀錄。最後三欄為審核軌跡:顯示組成該數據表的交易日(以標籤與數字形式呈現),以及基準值背後的合格交易日數量,該數量必須達到 20 個,頁面才會發布數據。

CVS 以其自身平均值的 7.2 倍位居榜首:在 19.3 千份合約的基準下,交易量達 138.2 千份,且先前的 20 個交易日高點為 59.3 千份。

  • INFY4.2 倍:在 7 千份的基準下,交易量達 29.5 千份。
  • GM3.6 倍,在 18.6 千份的基準下,交易量達 67.1 千份。
  • SMCI3.6 倍,在 361.8 千份的 20 個交易日高點下,交易量達 737 千份。
  • WDAY3.6 倍,交易量為 28 千份。

表格最後一列 NUAI 的交易量仍為其自身平均值的 3 倍。倍數與規模是獨立的數據指標,因此兩者都會列在表格中。股市版本的相同概念請參閱 本週異常成交量股票,而相關計算邏輯請參閱 相對成交量

看漲或看跌:成交明細的立場

看漲與看跌成交量之間的差異,才是警示訊號的核心意義。在同一交易日內,依看漲部位排序如下:

查詢看漲或看跌:當日看漲與看跌合約成交量
每個數據背後的精確 SQL 語法
WITH tape AS (
    SELECT toDate(toTimeZone(window_start, 'America/New_York')) AS d,
           sum(toFloat64(volume)) AS vol
    FROM global_markets.options_minute_aggs
    WHERE window_start >= toDateTime(today() - 45, 'America/New_York')
    GROUP BY d
),
ranked AS (
    SELECT d, vol, row_number() OVER (ORDER BY d DESC) AS raw_rn
    FROM tape
),
cal AS (
    SELECT d, vol, rn, sum(if(rn BETWEEN 2 AND 21, 1, 0)) OVER () AS baseline_sessions
    FROM (
        SELECT d, vol, row_number() OVER (ORDER BY d DESC) AS rn
        FROM ranked
        WHERE vol >= 0.75 * (SELECT quantileExact(0.5)(vol) FROM ranked WHERE raw_rn > 1)
    )
),
day_root AS (
    SELECT substring(ticker, 3, length(ticker) - 17) AS root,
           toDate(toTimeZone(window_start, 'America/New_York')) AS d,
           sum(toFloat64(volume)) AS vol,
           sumIf(toFloat64(volume), substring(ticker, length(ticker) - 8, 1) = 'C') AS calls,
           sumIf(toFloat64(volume), substring(ticker, length(ticker) - 8, 1) = 'P') AS puts
    FROM global_markets.options_minute_aggs
    WHERE window_start >= toDateTime(today() - 45, 'America/New_York')
    GROUP BY root, d
),
scored AS (
    SELECT r.root AS root,
           round(sumIf(r.vol, c.rn = 1) / avgIf(r.vol, c.rn BETWEEN 2 AND 21), 1) AS vol_ratio,
           sumIf(r.calls, c.rn = 1) AS calls,
           sumIf(r.puts, c.rn = 1) AS puts,
           maxIf(toYYYYMMDD(c.d), c.rn = 1) AS session_id
    FROM day_root r INNER JOIN cal c ON r.d = c.d
    WHERE c.rn <= 21
      AND r.root NOT IN ('SPCX')
      AND r.root NOT IN ('KORU','SOXL','SOXS','TQQQ','SQQQ','NVDL','NVDS','NVD','TSLL','TSLQ','TSLZ','SPXL','SPXS','UPRO','SPXU','LABU','LABD','FAS','FAZ','TNA','TZA','YINN','YANG','UDOW','SDOW','BOIL','KOLD','UCO','SCO','USD','SSO','SDS','QLD','QID','ERX','ERY','DRN','DRV','CURE','SOXY','MUU','SNXX','UVXY','SVXY','UVIX','SVIX','BULZ','WEBL','WEBS','DPST','DRIP','GUSH','AGQ','ZSL','BITX','ETHU','MSTX','MSTU','CONL','DUST','JNUG','JDST','NUGT')
    GROUP BY r.root
    HAVING sumIf(r.vol, c.rn = 1) >= 25000
       AND avgIf(r.vol, c.rn BETWEEN 2 AND 21) >= 5000
       AND countIf(c.rn BETWEEN 2 AND 21) >= 18
),
board AS (
    SELECT root, vol_ratio, calls, puts, session_id
    FROM scored
    ORDER BY vol_ratio DESC, root ASC
    LIMIT 10
)
SELECT root AS ticker,
       round(calls / 1000, 1) AS call_volume_k,
       round(puts / 1000, 1) AS put_volume_k,
       round(100.0 * calls / (calls + puts), 0) AS call_share_pct,
       session_id
FROM board
WHERE calls + puts > 0
ORDER BY call_share_pct DESC, ticker ASC

在看漲部位集中的端點,CVS 將其 95% 的合約轉向看漲:130.7 千份看漲合約對應 7.5 千份看跌合約。在同一表格的另一端,WDAY 執行了 30% 份看漲合約,即 8.3 千份對應 19.7 千份看跌合約。

這種比例值得關注,但也容易解讀過度。每一份成交的合約都包含買方與賣方,而成交明細並未記錄是由哪一方發起的交易。龐大的看漲成交量可能代表純粹的部位建立,也可能是針對賣方已持有股票所進行的補拋看漲期權(covered call)。買入與賣出看漲期權 詳細說明了該交易中每一方的風險部位。當成交明細訊號強烈時,選擇權價格通常也會隨之波動,這正是 最高隱含波動率股票 板塊的研究主題。

本交易時段合約組成分析

查詢合約組成:按到期天數計算之選擇權成交量
每個數據背後的精確 SQL 語法
WITH tape AS (
    SELECT toDate(toTimeZone(window_start, 'America/New_York')) AS d,
           sum(toFloat64(volume)) AS vol
    FROM global_markets.options_minute_aggs
    WHERE window_start >= toDateTime(today() - 45, 'America/New_York')
    GROUP BY d
),
ranked AS (
    SELECT d, vol, row_number() OVER (ORDER BY d DESC) AS raw_rn
    FROM tape
),
cal AS (
    SELECT d, vol, rn, sum(if(rn BETWEEN 2 AND 21, 1, 0)) OVER () AS baseline_sessions
    FROM (
        SELECT d, vol, row_number() OVER (ORDER BY d DESC) AS rn
        FROM ranked
        WHERE vol >= 0.75 * (SELECT quantileExact(0.5)(vol) FROM ranked WHERE raw_rn > 1)
    )
),
bars AS (
    SELECT toDate(toTimeZone(window_start, 'America/New_York')) AS d,
           toFloat64(volume) AS v,
           toDate(concat('20', substring(ticker, length(ticker) - 14, 2), '-',
                         substring(ticker, length(ticker) - 12, 2), '-',
                         substring(ticker, length(ticker) - 10, 2))) AS expiry
    FROM global_markets.options_minute_aggs
    WHERE window_start >= toDateTime(today() - 12, 'America/New_York')
      AND toDate(toTimeZone(window_start, 'America/New_York')) IN (SELECT d FROM cal WHERE rn = 1)
),
scored AS (
    SELECT multiIf(expiry - d <= 0, 1, expiry - d <= 7, 2, expiry - d <= 30, 3,
                   expiry - d <= 90, 4, expiry - d <= 365, 5, 6) AS bk,
           v, d
    FROM bars
)
SELECT arrayElement(['same day', '1 to 7 days', '8 to 30 days', '31 to 90 days', '91 to 365 days', 'over a year'], bk) AS dte_bucket,
       round(sum(v) / 1e6, 2) AS contracts_m,
       round(100.0 * sum(v) / sum(sum(v)) OVER (), 1) AS pct_of_volume,
       toYYYYMMDD(max(d)) AS session_id
FROM scored
GROUP BY bk
ORDER BY bk ASC

當日到期合約佔總交易量 36.3%,即 20.1 百萬口。另有 27.1% 的合約於一週內到期。剩餘部分則是到期日超過一年的合約,佔比為 1.2%。

這種結構會影響對異常活動標題的解讀方式。此類數據板塊的大部分成交量集中在短期合約,且當日到期合約會在收盤前結算,而非轉入隔日持倉。0DTE 期權 即涵蓋了該鏈條的末端。

這是否為到期日交易時段?

在月結到期日,當最大規模的掛牌合約同時到期時,全市場的選擇權成交量會上升。在到期日進行比例篩選會標示出半數的市場,因此下方的面板標註了該區間內的每個交易時段。

查詢全市場選擇權成交量(依月份到期日分類)
每個數據背後的精確 SQL 語法
WITH tape AS (
    SELECT toDate(toTimeZone(window_start, 'America/New_York')) AS d,
           sum(toFloat64(volume)) AS vol
    FROM global_markets.options_minute_aggs
    WHERE window_start >= toDateTime(today() - 45, 'America/New_York')
    GROUP BY d
),
ranked AS (
    SELECT d, vol, row_number() OVER (ORDER BY d DESC) AS raw_rn
    FROM tape
),
cal AS (
    SELECT d, vol, rn, sum(if(rn BETWEEN 2 AND 21, 1, 0)) OVER () AS baseline_sessions
    FROM (
        SELECT d, vol, row_number() OVER (ORDER BY d DESC) AS rn
        FROM ranked
        WHERE vol >= 0.75 * (SELECT quantileExact(0.5)(vol) FROM ranked WHERE raw_rn > 1)
    )
),
w AS (
    SELECT d, vol,
           toStartOfMonth(d) + toIntervalDay(((5 - toDayOfWeek(toStartOfMonth(d)) + 7) % 7) + 14) AS third_friday
    FROM cal
    WHERE rn <= 25
),
marked AS (
    SELECT d, vol,
           (d = max(if(d <= third_friday, d, toDate('1970-01-01'))) OVER (PARTITION BY toStartOfMonth(d)))
             AND (third_friday <= max(d) OVER ()) AS is_expiry
    FROM w
),
latest AS (
    SELECT d, vol, is_expiry,
           max(if(is_expiry, d, toDate('1970-01-01'))) OVER () AS last_expiry_d
    FROM marked
)
SELECT formatDateTime(d, '%b %e') AS session,
       round(vol / 1e6, 1) AS contracts_m,
       multiIf(is_expiry, 'monthly expiration', 'ordinary') AS session_type,
       round(max(if(d = last_expiry_d, vol, 0)) OVER () / 1e6, 1) AS monthly_expiry_m,
       toYYYYMMDD(d) AS session_id
FROM latest
ORDER BY d ASC

此面板中最新的交易時段為報表顯示之時段,兩張表格的日期相同,其標籤為 ordinary。全美市場的總成交量為 55.4 百萬口合約。同區間內最近一次的月結到期日成交量為 76.8 百萬口。面板中每個比例背後的 20 個交易日基準線通常剛好包含一個月結到期日,因此分母在各個交易時段間的數值是一致的。

非尋常選擇權活動是否具備領先股價的特性?

值得探討的問題是,選擇權交易量激增後,標的資產是否會出現大幅波動。研究基準為過去 200 天:將每檔股票的交易量按其自身基準的倍數進行分組,並對照下一交易日標的收盤價的絕對變動值。基準值採用該股票在該期間內的每日中位數變動,因此每個分組都是與自身進行比較。

查詢大幅選擇權交易後的走勢:次日絕對漲跌幅 vs. 常態交易日同股走勢
每個數據背後的精確 SQL 語法
WITH daily AS (
    SELECT underlying_symbol AS sym,
           date AS d,
           sum(volume) AS vol,
           max(underlying_close) AS px
    FROM global_markets.options_greeks
    WHERE date >= today() - 200
      AND underlying_close > 0
      AND underlying_symbol NOT IN ('SPCX')
      AND underlying_symbol NOT IN ('KORU','SOXL','SOXS','TQQQ','SQQQ','NVDL','NVDS','NVD','TSLL','TSLQ','TSLZ','SPXL','SPXS','UPRO','SPXU','LABU','LABD','FAS','FAZ','TNA','TZA','YINN','YANG','UDOW','SDOW','BOIL','KOLD','UCO','SCO','USD','SSO','SDS','QLD','QID','ERX','ERY','DRN','DRV','CURE','SOXY','MUU','SNXX','UVXY','SVXY','UVIX','SVIX','BULZ','WEBL','WEBS','DPST','DRIP','GUSH','AGQ','ZSL','BITX','ETHU','MSTX','MSTU','CONL','DUST','JNUG','JDST','NUGT')
      AND underlying_symbol NOT IN (SELECT ticker FROM global_markets.stocks_splits
                                    WHERE execution_date BETWEEN today() - 230 AND today())
    GROUP BY sym, d
),
seq AS (
    SELECT sym, d, vol, px,
           avg(vol) OVER (PARTITION BY sym ORDER BY d ROWS BETWEEN 20 PRECEDING AND 1 PRECEDING) AS base,
           count() OVER (PARTITION BY sym ORDER BY d ROWS BETWEEN 20 PRECEDING AND 1 PRECEDING) AS base_n,
           any(px) OVER (PARTITION BY sym ORDER BY d ROWS BETWEEN 1 FOLLOWING AND 1 FOLLOWING) AS next_px,
           any(px) OVER (PARTITION BY sym ORDER BY d ROWS BETWEEN 1 PRECEDING AND 1 PRECEDING) AS prev_px
    FROM daily
),
moves AS (
    SELECT sym, vol, base, base_n,
           if(next_px > 0, 100 * abs(next_px / px - 1), -1) AS next_abs,
           if(next_px > 0, 100 * (next_px / px - 1), -999) AS next_signed,
           if(prev_px > 0, 100 * abs(px / prev_px - 1), -1) AS own_abs
    FROM seq
),
typical AS (
    SELECT sym, quantileExact(0.5)(own_abs) AS typ
    FROM moves
    WHERE own_abs >= 0
    GROUP BY sym
)
SELECT arrayElement(['5x or more', '3x to 5x', '2x to 3x', '1x to 2x', 'below 1x'], bk) AS rvol_bucket,
       count() AS event_count,
       round(quantileExact(0.5)(next_abs), 2) AS median_next_move_pct,
       round(quantileExact(0.5)(typ), 2) AS median_typical_move_pct,
       round(quantileExact(0.5)(next_abs) - quantileExact(0.5)(typ), 2) AS gap_pp,
       round(quantileExact(0.5)(next_signed), 2) AS median_next_signed_pct
FROM (
    SELECT m.sym AS sym,
           multiIf(m.vol / m.base >= 5, 1, m.vol / m.base >= 3, 2, m.vol / m.base >= 2, 3,
                   m.vol / m.base >= 1, 4, 5) AS bk,
           m.next_abs AS next_abs,
           m.next_signed AS next_signed,
           t.typ AS typ
    FROM moves m INNER JOIN typical t ON m.sym = t.sym
    WHERE m.base_n = 20 AND m.base >= 5000 AND m.vol >= 25000 AND m.next_abs >= 0
)
GROUP BY bk
ORDER BY bk ASC

當交易量達到自身基準的五倍或更多時,下一交易日的絕對變動中位數為 2.52%;相比之下,一般交易日的變動中位數為 1.92%,差距為 0.6 個百分點。在數據較小的端,兩欄數據分別為 1.87% 與 2.09%,差距為 -0.22 個點。

實情是,這種關聯性很小,且主要體現在波動幅度而非方向。選擇權交易量較大的交易日後,標的資產的絕對變動幅度略大,但中位數的差距僅為不到一個百分點。在交易量達五倍基準後的下一交易日,變動的中位數值為 -0.34%;而在低於基準的交易日後,則為 -0.05%。這兩者皆未達到標題所暗示的預警水準。稀有度亦值得關注:在研究期間內,共有 652 個交易日的交易量達到自身基準的五倍,而交易量低於基準的交易日則有 11781 個。

此篩選條件的計算方式

隱含規則的篩選結果呈現的是數據,但本質上是觀點,因此我們列出所有規則。

  1. 數據來源。 完整的美國選擇權分鐘級別逐筆成交數據(minute tape)。我們從每個合約的 OCC 代碼中解析出標的資產,因此除了普通股票與基金的連鎖合約外,也包含指數選擇權根代碼與當日到期合約。
  2. 比率。 將前一個完整交易日的總合約成交量,除以前 20 個符合條件交易日的該標的平均成交量。這 20 個交易日中,至少必須有 18 個交易日具有成交量。表格會另闢一欄顯示計算窗口的長度;若窗口長度不足 20 天,則會保持空白,而不會在 20 天標籤下顯示較短的平均值。
  3. 門檻值。 單日成交量需達 25,000 份合約,且基準線為 5,000 份合約。若無此設定,表格將充滿單筆訂單即造成 10 倍讀數的連鎖合約。
  4. 交易日資格。 本頁面的每個面板皆從同一份逐筆數據的 45 天窗口內讀取交易日,並遵循單一規則:當市場整體的成交量達到該窗口內舊有交易日中位數的 75% 時,該交易日才算數。最新的一天不會被計入其必須達到的中位數中,因此交易量尚未完全載入的交易日,不會因為數據不足而拉低中位數。數據是分批傳送至前端的,若當日成交量不足正常交易日的四分之三,則在數據補齊前不會顯示在表格中。每個面板都會標註其所屬的交易日,因此可以將四個面板進行橫向比較。
  5. 排除項目。 槓桿型與反向型基金會依名稱被排除:例如 3 倍槓桿產品的連鎖合約會隨其倍數波動,每週都會佔據大量名單。另有一個重複使用的代碼也會被排除,因為供應商的歷史數據將兩家公司合併在同一個代碼下。
  6. 不包含未平倉量。 資料庫中沒有未平倉量(open interest)欄位,因此本頁面上的任何內容都不會將成交量與未平倉部位進行比較。當競爭對手的篩選結果顯示成交量超過未平倉量時,我們的結果顯示的是成交量超過其自身的 20 天平均值。
  7. 到期日。 每月到期日會推升全市場的選擇權成交量。交易日面板會標註此狀況,基於到期日交易日建立的表格,應與其他到期日交易日進行比較。

後續研究(follow-through study)使用第二張表格,即每日選擇權希臘字母(greeks)檔案,該檔案包含乾淨的標的資產代碼與標的收盤價。它排除了當日到期合約與指數選擇權,且數據結算時間比分鐘級別逐筆數據晚幾個交易日,因此其涵蓋範圍比本表格更窄。在研究窗口內發生股票拆分的名稱也會被排除,因為拆股會造成價格大幅波動的假象。

常見問題

什麼是異常選擇權活動?

指單一交易日內,該標的的選擇權合約成交量遠高於其近期平均值。本頁面的判定標準為算術計算而非編輯判斷:將當日的合約成交量除以該標的過去 20 個交易日的平均成交量,且條件為當日成交量須達 25,000 份,且基準值須達 5,000 份。

異常選擇權活動能預測股價走勢嗎?

關聯性極弱,且無法預測方向。根據我們過去 200 天的數據,當單日成交量達到該標的基準值的五倍時,隨後一個交易日的絕對變動中位數為 2.52%,而一般交易日的變動中位數則為 1.92%。該次交易日的變動中位數為 -0.34%,這顯示成交量能反映股價波動幅度的大小,但對於漲跌方向幾乎沒有預測力。

選擇權成交量數據何時更新?

合約成交量會在交易進行期間即時顯示於整合選擇權報價系統(consolidated options tape)。本頁面背後的儲存數據會有延遲,因此看板顯示的是已完成的最新完整交易日,而非進行中的數據,並會標註日期。此處所有數據皆非即時數據流。

為什麼此異常選擇權掃描器不使用未平倉量(Open Interest)?

未平倉量是由結算所於收盤後公布,且我們持有的數據中並無未平倉量欄位。將單日成交量與該標的自身的歷史成交量進行比較,可以直接從報價系統中取得,這能回答類似的問題:該序列的交易是否比平常更熱絡。


以上所有數據均為儲存且具備版本控制的查詢結果。您可以點開任何面板下的 SQL 語法來審核計算方式,或在 Strasmore 終端機上針對任何時間範圍執行相同的篩選條件。

#options#unusual options activity#options volume#market structure