Tỷ lệ put/call cao có bullish không?
Tìm hiểu vì sao tỷ lệ put/call cao được xem là tín hiệu bullish, cùng các dải percentile của quyền chọn cổ phiếu, chỉ số và diễn biến sau các mức cực đoan.
Tỷ lệ put/call cao là tín hiệu bullish đối lập với xu hướng đám đông kinh điển: hoạt động mua put bất thường cho thấy số đông đã chuẩn bị cho một đợt giảm. Tuy nhiên, việc giao dịch dựa trên tín hiệu đó gặp một vấn đề. “Cao” không có giá trị cố định. Mức 1,15 trên màn hình của bạn có thể là cực đoan đối với quyền chọn của một cổ phiếu riêng lẻ, nhưng lại là một phiên thông thường đối với các sản phẩm chỉ số.
Câu hỏi này cần một phân phối tham chiếu. Trang này cung cấp phân phối cho cả hai nhóm dữ liệu, sau đó đo lường diễn biến tiếp theo các phiên có tỷ lệ cao. Phần giải thích về tỷ lệ put/call trình bày cách tính tỷ lệ này. Mọi nội dung dưới đây đều dựa trên định nghĩa đó.
Có hai điểm cần lưu ý về cách đo lường. Mọi tỷ lệ ở đây đều tính số hợp đồng được giao dịch trong ngày, nên đây là tỷ lệ dựa trên volume. Open interest phản ánh các vị thế vẫn đang mở và thuộc một phạm vi khác (volume và open interest phân biệt hai khái niệm này). Các con số cũng được tính từ một rổ cố định gồm ten cổ phiếu riêng lẻ phổ biến với nhà đầu tư và three ETF thị trường rộng, thay vì toàn bộ dữ liệu giao dịch của thị trường. Vì vậy, hãy tập trung vào hình dạng của phân phối thay vì chữ số thập phân cuối cùng.
Mức put/call ratio nào được xem là cao?
Percentile trả lời được câu hỏi mà một mức đơn lẻ không thể trả lời. Đường cong dưới đây bao quát mọi phiên từ tháng 1/2022 đến tháng 7/2026, với một tỷ lệ cho mỗi phiên của từng danh mục.
Câu lệnh SQL chính xác đằng sau mỗi con số
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
)Trong rổ cổ phiếu đơn lẻ, phiên trung vị ghi nhận 0.67 put trên mỗi call. Nhóm 10% phiên cao nhất bắt đầu từ 0.89, còn 1% phiên cực đoan nhất vượt 1.34. Phía thấp cũng hữu ích cho việc hiệu chỉnh: cứ 20 phiên thì có một phiên kết thúc ở mức 0.48 hoặc thấp hơn.
Phân phối của cột ETF khác biệt tại mọi điểm trên đường cong. Phiên trung vị của ETF ghi nhận 1.45, cao hơn đường one-to-one mà mức trung vị của cổ phiếu đơn lẻ nằm thấp hơn đáng kể. Nhóm 10% phiên cao nhất của ETF bắt đầu từ 1.77. Một tỷ lệ được nêu ra mà không cho biết thuộc danh mục nào thì gần như không có ý nghĩa. Mức 1.15 đó mang hai ý nghĩa khác nhau, tùy thuộc vào cột ghi nhận nó.
Vì sao tỷ lệ put/call trên index cao hơn 1 là bình thường, còn tỷ lệ trên cổ phiếu riêng lẻ cao hơn 1 thì không
Phân tách cùng một khối lượng theo tài sản cơ sở cho thấy các mức này tách biệt rõ ràng.
Câu lệnh SQL chính xác đằng sau mỗi con số
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 DESCTrong bảy tháng đầu năm 2026, IWM đứng đầu bảng với 2.73 quyền chọn put trên mỗi quyền chọn call, và kết thúc trên mức một trong 98.6% trên tổng số 144 phiên. Ở cuối bảng, XOM ghi nhận 0.38, với tỷ lệ trên mức một trong 2.8% số phiên.
Khoảng cách này mang tính cơ cấu. Quyền chọn ETF trên thị trường diện rộng là công cụ dùng để phòng hộ danh mục: một nhà quản lý nắm giữ hai trăm vị thế sẽ mua quyền chọn put trên index thay vì mua put trên từng cổ phiếu, và dòng giao dịch đó không đi kèm một giao dịch call tương ứng. Khối lượng quyền chọn trên từng cổ phiếu riêng lẻ lại nghiêng theo hướng ngược lại, với các quyền chọn call được mua để hưởng tiềm năng tăng giá và các quyền chọn call được bán trên số cổ phiếu đã nắm giữ. Tỷ lệ "tổng" gộp cả hai nhóm giao dịch, nên nằm giữa hai tỷ lệ này và biến động theo cơ cấu sản phẩm trong ngày cũng như theo tâm lý thị trường.
Cũng cần lưu ý thêm một thay đổi về mặt bằng tỷ lệ. Khối lượng giao dịch trên index và ETF hiện bao gồm tỷ trọng lớn các quyền chọn đáo hạn ngay trong ngày (quyền chọn 0DTE). Đây là nhóm sản phẩm chưa từng được giao dịch ở quy mô tương tự vào thời điểm các ngưỡng quen thuộc được xây dựng. Vì vậy, không thể áp dụng nguyên các ngưỡng cũ cho một thị trường có cơ cấu giao dịch khác.
Tỷ lệ put/call cao có phải là tín hiệu tăng giá? Điều gì xảy ra sau các mức cực đoan
Lập luận ngược chiều có thể kiểm chứng. Phân loại mọi phiên giao dịch thành năm nhóm theo tỷ lệ cổ phiếu của ngày đó, sau đó đo mức biến động của chỉ số theo dõi S&P 500 trong năm và 20 phiên tiếp theo.
Câu lệnh SQL chính xác đằng sau mỗi con số
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 ASCNhóm một phần năm các phiên bình lặng nhất bắt đầu từ 0.34, còn nhóm một phần năm sôi động nhất bắt đầu từ 0.81. Vì vậy, nhóm cao nhất bao gồm mọi mức đọc mà một nhà đầu tư theo trường phái ngược chiều có thể cho là quá mức. Trong 226 phiên đó, mức biến động trung vị sau 20 phiên là 3%, so với 0.91% ở nhóm bình lặng nhất. Sau năm phiên, hai nhóm này lần lượt ghi nhận 0.82% và 0.3%.
Mức trung vị có thể che khuất phần quan trọng. Trong nhóm một phần năm cao nhất, 50% kết quả ở giữa sau 20 phiên nằm trong khoảng từ -1.82% đến 5.71%. Trong nhóm bình lặng nhất, khoảng này là từ -0.83% đến 2.67%. Hai khoảng này chồng lấn phần lớn. Nhóm mà một phiên được xếp vào làm thay đổi tâm của phân phối, nhưng hầu như không thu hẹp khoảng dao động quanh tâm đó. Đây là phần thường bị bỏ qua khi áp dụng quy tắc kinh nghiệm.
Một điểm cần lưu ý về tỷ trọng mẫu. Giai đoạn từ tháng 1/2022 đến tháng 7/2026 bao gồm một thị trường giá xuống và quá trình phục hồi sau đó, với khoảng 226 phiên trong mỗi nhóm. Đây là một mẫu có ý nghĩa, nhưng chỉ phản ánh một giai đoạn trong lịch sử thị trường.
Các mức cực đoan có tập trung tại vùng đáy thị trường không?
Chúng tập trung trong những tháng giảm, nhưng đó là một nhận định khác. Hãy phân loại mọi tháng kể từ năm 2022 theo mức biến động của tracker trong tháng, sau đó đếm số lần chỉ số put/call nằm trong nhóm decile cao nhất ở từng nhóm.
Câu lệnh SQL chính xác đằng sau mỗi con số
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) ASCCác tháng tracker kết thúc với mức giảm từ 3% trở lên ghi nhận trung bình 4.2 lần đọc thuộc nhóm decile cao nhất mỗi tháng, so với 1.9 trong các tháng tăng từ 3% trở lên. Median của chỉ số đọc hằng ngày ở mỗi nhóm nằm tại cột cuối cùng, lần lượt là 0.75 ở nhóm tệ nhất và 0.62 ở nhóm tốt nhất. Hai đầu bảng gồm 12 và 22 tháng.
Các mức put/call cực đoan và giá giảm thường xuất hiện cùng nhau. Đây là sự đồng thời xuất hiện, và các số liệu về diễn biến tiếp theo trong phần trước cho thấy giá trị thực sự của mối liên hệ này. Tỷ lệ này đo lường diễn biến trong cùng ngày, nên các đợt tăng vọt của nó xuất hiện trong lúc thị trường giảm thay vì báo trước đà giảm. “Đáy” chỉ là một nhãn được gắn sau đó.
Đọc một mức so với phân phối
Từ các số liệu trên có thể rút ra hai thói quen.
Thứ nhất, hãy so sánh các đại lượng tương đồng. Một mức chỉ có ý nghĩa khi được đặt trong lịch sử của chính bộ dữ liệu đó, trên một khoảng thời gian tương đương. Đây chính là điều bảng percentile cung cấp, còn một ngưỡng được ghi nhớ thì không.
Thứ hai, hãy theo dõi mẫu số. Tỷ lệ sẽ giảm khi khối lượng quyền chọn mua (call option) tăng vọt, ngay cả khi hoạt động mua quyền chọn bán (put option) không thay đổi. Tỷ lệ giảm hoặc tăng đột biến đều có thể chỉ xuất phát từ một vế của phân số thay đổi. Vì vậy, đọc riêng khối lượng put và call giúp làm rõ phép tính.
Kỷ luật tương tự cũng áp dụng cho mọi chỉ báo tâm lý được nêu dưới dạng một con số đơn lẻ. VIX và mức biến động hàm ý 30% được ghi nhận không thể được diễn giải nếu thiếu phân phối riêng của chúng. Các quy tắc tâm lý ngược chiều chỉ có cơ sở dữ liệu khi mức tham chiếu được đo lường thay vì giả định.
Câu hỏi thường gặp
Tỷ lệ put/call cao có phải là tín hiệu tăng giá không?
Cách diễn giải ngược chiều cho rằng việc mua put với khối lượng lớn cho thấy đám đông đã định vị cho một đợt giảm. So với rổ cổ phiếu đơn lẻ nêu trên, các phiên thuộc nhóm một phần năm cao nhất được tiếp nối bằng mức biến động trung vị trong 20 phiên của ETF theo dõi S&P 500 là 3%, so với 0.91% sau nhóm một phần năm bình lặng nhất. Khoảng giữa của 50% kết quả trong nhóm một phần năm cao nhất trải từ -1.82% đến 5.71%.
Tỷ lệ put/call ở mức nào được xem là bình thường?
Điều này hoàn toàn phụ thuộc vào loại quyền chọn được tính. Với rổ gồm mười cổ phiếu đơn lẻ phổ biến, tỷ lệ trung vị mỗi phiên trong giai đoạn từ năm 2022 đến tháng 7 năm 2026 là 0.67 put trên mỗi call. Với ba ETF thị trường diện rộng trong cùng các phiên, tỷ lệ trung vị là 1.45.
Vì sao tỷ lệ put/call của chỉ số cao hơn tỷ lệ put/call của cổ phiếu?
Quyền chọn trên các chỉ số diện rộng và ETF là công cụ tiêu chuẩn để phòng hộ danh mục. Khi một nhà đầu tư phòng hộ mua put trên chỉ số, thường không có giao dịch call tương ứng đi kèm. Khối lượng giao dịch cổ phiếu đơn lẻ nghiêng về call được mua để hưởng lợi từ đà tăng và call được bán trên số cổ phiếu đang nắm giữ. Điều này khiến tỷ lệ của nhóm đó thấp hơn.
Tỷ lệ put/call có hiệu quả trong việc định thời điểm thị trường không?
Phân tích trên cho thấy phân phối kết quả sau mỗi nhóm một phần năm của các mức tỷ lệ. Độ phân tán trong từng nhóm rộng hơn nhiều so với khoảng cách giữa các mức trung vị của các nhóm. Các mức tỷ lệ thuộc nhóm 10% cao nhất cũng tập trung vào những tháng chỉ số kết thúc ở mức thấp hơn, với tỷ lệ 4.2 mỗi tháng trong nhóm kém nhất.
Tỷ lệ put/call theo khối lượng khác gì so với tỷ lệ theo open interest?
Tỷ lệ theo khối lượng tính số hợp đồng được giao dịch trong một phiên. Vì vậy, tỷ lệ này được thiết lập lại mỗi ngày và phản ứng nhanh. Tỷ lệ theo open interest tính các vị thế vẫn còn tồn tại, nên thay đổi chậm và duy trì ở một mức riêng. Hai chỉ số này không thể dùng thay thế cho nhau. Một ngưỡng lấy từ chỉ số này có thể dẫn đến cách đọc sai đối với chỉ số kia.
Cách xây dựng các số liệu này
- Nguồn dữ liệu: mỗi dòng tương ứng với một hợp đồng quyền chọn trong một phiên, kèm khối lượng giao dịch của hợp đồng trong phiên đó. Put và call được phân tách từ mã hợp đồng của OCC. Tám ký tự cuối là giá thực hiện, còn ký tự đứng trước là C đối với call và P đối với put. Mở SQL bên dưới mỗi bảng để xem chính xác bảng dữ liệu và các bộ lọc.
- Mọi tỷ lệ trên trang này đều là tỷ lệ theo khối lượng. Open interest không được đưa vào phép tính. Vì vậy, không có tỷ lệ nào ở đây là tỷ lệ theo open interest.
- Không áp dụng bộ lọc chất lượng đối với implied volatility. Hợp đồng chỉ được đưa vào dựa trên khối lượng giao dịch, vì các bảng này đo hoạt động giao dịch chứ không đo biến động.
- Rổ dữ liệu gồm AAPL, MSFT, NVDA, AMZN, META, TSLA, GOOGL, JPM, KO và XOM cho nhóm cổ phiếu đơn lẻ; cùng SPY, QQQ và IWM cho nhóm chỉ số-ETF. Các tỷ lệ do sở giao dịch công bố bao phủ toàn bộ thị trường và bao gồm các sản phẩm chỉ số như SPX, nên mức tỷ lệ của chúng sẽ khác.
- Giá chỉ số là mức giá của giao dịch cuối cùng trong phiên thông thường mỗi ngày đối với ETF theo dõi S&P 500. Lợi suất kỳ hạn loại bỏ 20 phiên cuối của mẫu, vì các phiên này chưa có dữ liệu cho 20 phiên tiếp theo. Biến động hằng tháng được tính từ giá đóng cửa của phiên đầu tiên đến giá đóng cửa của phiên cuối cùng trong mỗi tháng.
Mỗi bảng ở trên đều có thể mở rộng để xem SQL tương ứng. Các truy vấn percentile tương tự cũng có thể chạy cho bất kỳ tài sản cơ sở nào bạn theo dõi trên terminal Strasmore.