高看跌看涨比率是看涨信号吗
高看跌/看涨期权比率常被视为逆向看多信号。查看个股与指数期权的百分位区间,了解极端读数出现后市场实际如何表现。
高 put/call 比率是经典的逆向看多信号:看跌期权买入异常活跃,通常被视为市场参与者已经为下跌做好准备。但据此交易存在一个问题。“高”没有固定数值。您屏幕上显示的 1.15,在个股期权中可能属于极端水平,在指数产品中却可能只是普通交易日的读数。
要回答这个问题,需要先确定参考分布。本页分别为这两类市场提供参考分布,然后衡量高读数出现后的市场表现。put/call 比率说明介绍了该比率的计算方法,以下内容均以该定义为基础。
关于测量方法,还有两点需要说明。本文的每个比率都统计当天成交的合约数量,因此属于成交量比率;未平仓量统计仍然持有的仓位,所处层面不同(成交量与未平仓量将对此加以区分)。此外,数据来自固定的一篮子标的:十只大众熟知的个股,以及三只覆盖大盘的 ETF,而不是整个市场的成交记录。因此,应关注分布形态,而不是最后一位小数。
什么水平算是较高的看跌/看涨期权比率?
百分位数能够回答单一水平无法回答的问题。下图涵盖了从2022年1月至2026年7月的每个交易日,并分别列出每个期权簿每个交易日的一个比率。
每个数字背后的完整 SQL
WITH book_days AS (
SELECT date AS day,
if(underlying_symbol IN ('SPY', 'QQQ', 'IWM'), 'index_etf', 'equity') AS book,
sumIf(volume, upper(substring(ticker, length(ticker) - 8, 1)) = 'P') AS put_volume,
sumIf(volume, upper(substring(ticker, length(ticker) - 8, 1)) = 'C') AS call_volume
FROM global_markets.options_greeks
WHERE date >= toDate('2022-01-01')
AND date <= toDate('2026-07-31')
AND volume > 0
AND underlying_symbol IN ('SPY', 'QQQ', 'IWM', 'AAPL', 'MSFT', 'NVDA', 'AMZN',
'META', 'TSLA', 'GOOGL', 'JPM', 'KO', 'XOM')
GROUP BY day, book
HAVING call_volume > 0
),
paired AS (
SELECT day,
toFloat64(sumIf(put_volume, book = 'equity'))
/ toFloat64(sumIf(call_volume, book = 'equity')) AS equity_pcr,
toFloat64(sumIf(put_volume, book = 'index_etf'))
/ toFloat64(sumIf(call_volume, book = 'index_etf')) AS index_pcr
FROM book_days
GROUP BY day
HAVING sumIf(call_volume, book = 'equity') > 0
AND sumIf(call_volume, book = 'index_etf') > 0
),
curves AS (
SELECT arrayMap(v -> round(v, 2),
quantilesDeterministic(0.05, 0.10, 0.25, 0.50, 0.75, 0.90, 0.95, 0.99)
(equity_pcr, cityHash64(day))) AS eq,
arrayMap(v -> round(v, 2),
quantilesDeterministic(0.05, 0.10, 0.25, 0.50, 0.75, 0.90, 0.95, 0.99)
(index_pcr, cityHash64(day))) AS idx
FROM paired
)
SELECT z.1 AS percentile,
z.2 AS equity_pcr,
z.3 AS index_etf_pcr
FROM (
SELECT arrayJoin(arrayZip(['p05', 'p10', 'p25', 'p50', 'p75', 'p90', 'p95', 'p99'], eq, idx)) AS z
FROM curves
)在个股篮子中,交易日的中位数为每个看涨期权对应0.67个看跌期权。交易日比率最高的十分位从0.89开始,最极端的百分之一超过了1.34。较低的一端同样有助于校准:每二十个交易日中,就有一个交易日的收盘比率不高于0.48。
ETF一栏在曲线的每个位置都呈现出不同的分布。其中位数为1.45,高于个股中位数所处的“一比一”水平;ETF自身比率最高的十分位则从1.77开始。未说明对应期权簿的比率几乎没有意义。同样是1.15,根据所属栏目的不同,其含义也完全不同。
为什么指数期权比率高于1属于正常,而个股期权比率高于1则不然
按标的拆分相同的成交量后,两者的水平差异十分明显。
每个数字背后的完整 SQL
WITH symbol_days AS (
SELECT underlying_symbol AS symbol,
date AS day,
sumIf(volume, upper(substring(ticker, length(ticker) - 8, 1)) = 'P') AS put_volume,
sumIf(volume, upper(substring(ticker, length(ticker) - 8, 1)) = 'C') AS call_volume
FROM global_markets.options_greeks
WHERE date >= toDate('2026-01-01')
AND date <= toDate('2026-07-31')
AND volume > 0
AND underlying_symbol IN ('SPY', 'QQQ', 'IWM', 'AAPL', 'MSFT', 'NVDA', 'AMZN',
'META', 'TSLA', 'GOOGL', 'JPM', 'KO', 'XOM')
GROUP BY symbol, day
HAVING call_volume > 0
)
SELECT symbol,
round(toFloat64(sum(put_volume)) / toFloat64(sum(call_volume)), 2) AS put_call_ratio,
round(100 * countIf(put_volume > call_volume) / count(), 1) AS above_one_pct,
count() AS observations
FROM symbol_days
GROUP BY symbol
ORDER BY put_call_ratio DESC2026年前七个月,IWM以每份看涨期权对应2.73份看跌期权位居榜首。在144个交易日中,有98.6%个交易日的比率高于1。排名垫底的XOM成交比率为0.38,其中2.8%个交易日的比率高于1。
这种差距源于结构性因素。广泛市场ETF期权是投资组合对冲的主要工具:持有两百个仓位的基金经理会买入指数看跌期权,而不是为每个持仓分别买入看跌期权。这类交易流通常没有相应的看涨期权交易与之匹配。个股期权成交则更偏向看涨期权,包括为博取上涨而买入看涨期权,以及针对既有股票持仓卖出看涨期权。“总”比率混合了这两类交易,因此会处于两者之间;其变化既受市场情绪影响,也取决于当日不同产品的成交构成。
还需注意一个层面的变化。指数和ETF成交量中,0DTE期权(当日到期期权)如今占据较大比重。相关阈值最初形成时,这类期权的成交规模远没有现在这么大。市场成交构成已经改变,过去的水平不能直接套用到今天的行情中。
高看跌/看涨期权比率看涨吗?极端水平之后发生了什么
这一反向指标的逻辑可以检验。按每个交易日的股票期权比率将所有交易日分为五组,再衡量标普500跟踪产品在随后五个和二十个交易日的表现。
每个数字背后的完整 SQL
WITH raw AS (
SELECT date AS day,
sumIf(volume, upper(substring(ticker, length(ticker) - 8, 1)) = 'P') AS put_volume,
sumIf(volume, upper(substring(ticker, length(ticker) - 8, 1)) = 'C') AS call_volume
FROM global_markets.options_greeks
WHERE date >= toDate('2022-01-01')
AND date <= toDate('2026-07-31')
AND volume > 0
AND underlying_symbol IN ('AAPL', 'MSFT', 'NVDA', 'AMZN', 'META',
'TSLA', 'GOOGL', 'JPM', 'KO', 'XOM')
GROUP BY day
HAVING call_volume > 0
),
equity_pcr AS (
SELECT day, toFloat64(put_volume) / toFloat64(call_volume) AS pcr
FROM raw
),
spy_daily AS (
SELECT toDate(toTimeZone(window_start, 'America/New_York')) AS day,
toFloat64(argMax(close, window_start)) AS close
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker = 'SPY'
AND toDate(toTimeZone(window_start, 'America/New_York')) >= toDate('2022-01-01')
AND toDate(toTimeZone(window_start, 'America/New_York')) <= toDate('2026-08-01')
AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60
+ toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959
GROUP BY day
),
forward AS (
SELECT day,
close,
any(close) OVER (ORDER BY day ASC ROWS BETWEEN 5 FOLLOWING AND 5 FOLLOWING) AS close_5,
any(close) OVER (ORDER BY day ASC ROWS BETWEEN 20 FOLLOWING AND 20 FOLLOWING) AS close_20
FROM spy_daily
),
joined AS (
SELECT p.day AS day,
p.pcr AS pcr,
100 * (f.close_5 / f.close - 1) AS fwd_5d_pct,
100 * (f.close_20 / f.close - 1) AS fwd_20d_pct
FROM equity_pcr AS p
INNER JOIN forward AS f ON p.day = f.day
WHERE f.close_5 > 0 AND f.close_20 > 0
),
cuts AS (
SELECT quantilesDeterministic(0.2, 0.4, 0.6, 0.8)(pcr, cityHash64(day)) AS q
FROM joined
)
SELECT multiIf(pcr < q[1], 'lowest fifth',
pcr < q[2], 'second fifth',
pcr < q[3], 'middle fifth',
pcr < q[4], 'fourth fifth',
'highest fifth') AS pcr_band,
count() AS observations,
round(min(pcr), 2) AS band_floor_ratio,
round(quantileDeterministic(0.5)(fwd_5d_pct, cityHash64(day)), 2) AS fwd_5d_median_pct,
round(quantileDeterministic(0.5)(fwd_20d_pct, cityHash64(day)), 2) AS fwd_20d_median_pct,
round(quantileDeterministic(0.25)(fwd_20d_pct, cityHash64(day)), 2) AS fwd_20d_p25_pct,
round(quantileDeterministic(0.75)(fwd_20d_pct, cityHash64(day)), 2) AS fwd_20d_p75_pct
FROM joined CROSS JOIN cuts
GROUP BY pcr_band
ORDER BY band_floor_ratio ASC最平静的五分位区间从 0.34 开始,最活跃的五分位区间从 0.81 开始。因此,最高区间包含了反向交易者会认为过度偏离的所有读数。在这 226 个交易日中,随后二十个交易日的涨跌幅中位数为 3%,而最平静五分位区间之后为 0.91%。向后看五个交易日时,这两个区间的读数分别为 0.82% 和 0.3%。
中位数会掩盖关键部分。在最高五分位区间内,随后二十个交易日结果的中间百分之五十位于 -1.82% 至 5.71% 之间。在最平静的五分位区间内,中间百分之五十位于 -0.83% 至 2.67% 之间。这两个区间有很大部分重叠。交易日所属的区间会改变分布中心,但几乎不会收窄围绕该中心的结果范围,而这正是经验法则所忽略的部分。
还需注意样本权重。2022年1月至2026年7月涵盖了一轮熊市及其后的复苏,每个区间约有 226 个交易日。这是一个真实样本,但只代表市场历史中的一段时期。
极端读数是否集中出现在市场低点?
它们会集中出现在下跌月份,但这与“集中在市场低点”是不同的说法。将2022年以来的每个月按追踪指标在当月的走势分组,再统计每组中落入看跌/看涨期权比率最高十分位的读数数量。
每个数字背后的完整 SQL
WITH raw AS (
SELECT date AS day,
sumIf(volume, upper(substring(ticker, length(ticker) - 8, 1)) = 'P') AS put_volume,
sumIf(volume, upper(substring(ticker, length(ticker) - 8, 1)) = 'C') AS call_volume
FROM global_markets.options_greeks
WHERE date >= toDate('2022-01-01')
AND date <= toDate('2026-07-31')
AND volume > 0
AND underlying_symbol IN ('AAPL', 'MSFT', 'NVDA', 'AMZN', 'META',
'TSLA', 'GOOGL', 'JPM', 'KO', 'XOM')
GROUP BY day
HAVING call_volume > 0
),
equity_pcr AS (
SELECT day, toFloat64(put_volume) / toFloat64(call_volume) AS pcr
FROM raw
),
cut AS (
SELECT quantileDeterministic(0.90)(pcr, cityHash64(day)) AS p90
FROM equity_pcr
),
by_month AS (
SELECT toStartOfMonth(day) AS month_start,
countIf(pcr >= cut.p90) AS extreme_reads,
quantileDeterministic(0.5)(pcr, cityHash64(day)) AS median_pcr
FROM equity_pcr CROSS JOIN cut
GROUP BY month_start
),
spy_daily AS (
SELECT toDate(toTimeZone(window_start, 'America/New_York')) AS day,
toFloat64(argMax(close, window_start)) AS close
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker = 'SPY'
AND toDate(toTimeZone(window_start, 'America/New_York')) >= toDate('2022-01-01')
AND toDate(toTimeZone(window_start, 'America/New_York')) <= toDate('2026-07-31')
AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60
+ toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959
GROUP BY day
),
spy_month AS (
SELECT toStartOfMonth(day) AS month_start,
100 * (argMax(close, day) / argMin(close, day) - 1) AS move_pct
FROM spy_daily
GROUP BY month_start
)
SELECT multiIf(s.move_pct <= -3, 'index down 3% or more',
s.move_pct < 0, 'index down under 3%',
s.move_pct < 3, 'index up under 3%',
'index up 3% or more') AS index_move_bucket,
count() AS observations,
round(avg(m.extreme_reads), 1) AS top_decile_reads_avg,
round(quantileDeterministic(0.5)(m.median_pcr, cityHash64(m.month_start)), 2) AS typical_pcr_ratio
FROM by_month AS m
INNER JOIN spy_month AS s ON m.month_start = s.month_start
GROUP BY index_move_bucket
ORDER BY min(s.move_pct) ASC追踪指标当月收跌3%或以上的月份,平均每月出现4.2个最高十分位读数;相比之下,当月上涨3%或以上的月份为1.9个。各组的日读数中位数列在最后一列:最差组为0.75,最佳组为0.62。表格两端分别包含12个月和22个月。
极端的看跌/看涨期权比率读数与价格下跌会同时出现。这属于共同出现,真正值得关注的是上一节中的前瞻性数据。该比率衡量的是同一天的市场交易情况,因此其峰值出现在下跌过程中,而不是下跌之前。所谓低点,是事后才贴上的标签。
将读数放在分布中解读
上面的数据带来两点启示。
第一,要比较同类数据。一个读数只有放在同一指标自身、可比时间窗口的历史中才有意义。这正是百分位表能提供的,而凭记忆设定的阈值无法做到。
第二,要关注分母。即使看跌期权的买入量没有变化,只要看涨期权成交量激增,该比率也会下降。比率下降或飙升,都可能只是分数的一侧单独变动所致。因此,分别观察看跌期权成交量和看涨期权成交量,才能看清计算过程。
同样的纪律适用于所有以单一数字呈现的情绪指标。没有各自的分布,VIX和30%的隐含波动率读数都无法解读;只有在参考水平经过测量而非主观假定时,逆向情绪规则才经得起数据检验。
常见问题
高看跌/看涨期权比率看涨吗?
逆向解读认为,大量买入看跌期权意味着市场参与者已经集体押注下跌。以此前的十只单股篮子为基准,读数处于最高五分位的交易日之后,标普500跟踪ETF未来20个交易日的变动中位数为 3%;读数处于最低五分位的交易日之后则为 0.91%。最高五分位结果的中间50%区间为 -1.82% 至 5.71%。
正常的看跌/看涨期权比率是多少?
这完全取决于统计哪些期权。在2022年至2026年7月期间,十只常见单股的篮子中,单个交易日的看跌期权与看涨期权中位比率为每份看涨期权对应 0.67 份看跌期权。在同一时期的三只宽基ETF中,中位数为 1.45。
为什么指数看跌/看涨期权比率高于个股看跌/看涨期权比率?
宽基指数和ETF期权是投资组合对冲的标准工具。对冲者买入指数看跌期权时,通常没有对应的看涨期权交易与之匹配。个股期权成交量则更多来自押注上涨的看涨期权买入,以及针对已持有股票卖出的备兑看涨期权。这会使个股期权组合的比率较低。
看跌/看涨期权比率适合择时吗?
上述统计展示了读数处于各个五分位时,之后市场走势的分布。任何一个区间内部的结果差异,都远大于各区间中位数之间的距离。读数处于最高十分位时,指数收跌的月份也更集中;在最差的一组中,该比例为每月 4.2。
成交量看跌/看涨期权比率与未平仓量看跌/看涨期权比率有何区别?
成交量比率统计单个交易日内成交的合约,因此每天重置,反应也更快。未平仓量比率统计仍未平仓的头寸,变化较慢,并处于自身的水平。两者不可互换。将一种比率的阈值套用于另一种比率,会导致误判。
这些数字的计算方法
- 数据源:每个交易日每份期权合约一行,并记录该交易日的成交量。看跌期权和看涨期权根据 OCC 合约代码区分:最后八个字符为行权价,其前一个字符中,C 表示看涨期权,P 表示看跌期权。打开任一面板下方的 SQL,即可查看具体数据表和筛选条件。
- 本页所有比率均为成交量比率。计算不包含未平仓量,因此这里没有任何未平仓量比率。
- 未使用隐含波动率质量筛选。合约仅按成交量纳入统计,因为这些面板统计的是交易活动,而不是衡量波动率。
- 篮子包括单股组合中的 AAPL、MSFT、NVDA、AMZN、META、TSLA、GOOGL、JPM、KO 和 XOM,以及指数ETF组合中的 SPY、QQQ 和 IWM。交易所公布的比率覆盖整个市场,并包含 SPX 等指数产品,因此其水平会有所不同。
- 指数价格采用标普500跟踪ETF每日常规交易时段的最后一笔成交价。由于样本最后20个交易日尚未形成完整的20个交易日未来区间,远期回报计算会剔除这些交易日。月度变动为每月首个交易日收盘价至最后一个交易日收盘价的变化。
上方每个面板都可以展开,查看其背后的 SQL;同样的百分位查询也可用于您在 Strasmore 终端上关注的任何标的。