Adakah Nisbah Put/Call Tinggi Menunjukkan Bullish?
Nisbah put/call tinggi dianggap bullish oleh golongan kontrarian. Lihat jalur persentil bagi opsyen saham dan indeks, serta kesan selepas bacaan ekstrem.
Nisbah put/call yang tinggi ialah bacaan bullish kontrarian klasik: pembelian put yang luar biasa tinggi dianggap sebagai tanda bahawa orang ramai sudah bersedia menghadapi kejatuhan. Namun, tindakan berdasarkan bacaan itu berdepan satu masalah. “Tinggi” tidak mempunyai nilai tetap. Bacaan 1.15 pada skrin anda boleh menjadi paras ekstrem bagi opsyen saham individu, tetapi sesi biasa bagi produk indeks.
Soalan ini memerlukan taburan rujukan. Halaman ini menyediakan taburan tersebut bagi kedua-dua kumpulan, kemudian mengukur perkara yang berlaku selepas bacaan tinggi. Penerangan nisbah put/call menerangkan cara nisbah ini dibina, dan semua perkara di bawah bermula daripada definisi tersebut.
Dua nota tentang ukuran ini. Setiap nisbah di sini mengira kontrak yang didagangkan pada hari berkenaan, menjadikannya nisbah volum. Open interest mengira posisi yang masih terbuka dan berada pada tahap yang berbeza (volum berbanding open interest membezakan kedua-duanya). Angka ini juga datang daripada bakul tetap yang terdiri daripada ten nama saham individu yang lazim dipegang oleh isi rumah dan three ETF pasaran luas, bukannya keseluruhan pasaran. Oleh itu, tumpukan perhatian pada bentuk taburan, bukan perpuluhan terakhir.
Apakah yang dikira sebagai nisbah put/call yang tinggi?
Persentil menjawab persoalan yang tidak dapat dijawab oleh satu paras sahaja. Keluk di bawah meliputi setiap sesi dari Januari 2022 hingga Julai 2026, dengan satu nisbah bagi setiap sesi untuk setiap buku.
SQL tepat di sebalik setiap nombor
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
)Bagi bakul saham tunggal, sesi median mencatatkan 0.67 put bagi setiap call. Desil tertinggi sesi bermula pada 0.89, manakala satu peratus sesi yang paling ekstrem melepasi 1.34. Hujung yang tenang juga berguna untuk penentukuran: satu daripada setiap dua puluh sesi berakhir pada atau di bawah 0.48.
Lajur ETF menunjukkan taburan yang berbeza pada setiap titik sepanjang keluk. Sesi mediannya mencatatkan 1.45, iaitu di atas garisan satu berbanding satu yang terletak jauh di atas median saham tunggal, manakala desil tertingginya bermula pada 1.77. Nisbah yang disebut tanpa menyatakan bukunya hampir tidak bermakna. Bacaan 1.15 itu membawa dua maksud berbeza bergantung pada lajur asalnya.
Mengapa nisbah indeks melebihi 1 adalah normal tetapi nisbah ekuiti melebihi 1 bukan
Pisahkan volum yang sama mengikut aset asas, dan parasnya akan berbeza dengan jelas.
SQL tepat di sebalik setiap nombor
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 DESCDalam tujuh bulan pertama 2026, IWM berada di tangga teratas dengan 2.73 put bagi setiap call, dan ditutup melebihi satu dalam 98.6% daripada 144 sesinya. Di tangga terbawah, XOM mencatat 0.38, melebihi satu dalam 2.8% sesinya.
Jurangnya bersifat struktur. Opsyen ETF pasaran luas ialah instrumen untuk lindung nilai portfolio. Pengurus yang memegang two hundred posisi akan membeli put indeks, bukannya put bagi setiap pegangan. Aliran itu tidak disertai oleh dagangan call yang sepadan. Volum opsyen saham tunggal pula lebih cenderung kepada call yang dibeli untuk mendapatkan pendedahan kepada kenaikan harga dan call yang dijual terhadap saham yang telah dimiliki. Nisbah “jumlah” menggabungkan kedua-dua buku tersebut. Oleh itu, nisbah itu berada di antara kedua-duanya dan berubah mengikut campuran produk pada hari berkenaan, sama seperti dipengaruhi oleh sentimen.
Satu lagi peralihan paras perlu diketahui. Volum indeks dan ETF kini merangkumi bahagian besar daripada opsyen yang tamat tempoh pada hari yang sama (opsyen 0DTE). Kategori ini tidak didagangkan pada skala yang hampir sama ketika ambang yang lazim digunakan mula ditetapkan. Paras lama tidak boleh dipindahkan terus kepada pasaran dengan komposisi yang berbeza.
Adakah nisbah put/call yang tinggi bersifat bullish? Apakah yang berlaku selepas bacaan ekstrem
Kes berasaskan pendekatan kontrarian boleh diuji. Susun setiap sesi kepada lima kumpulan berdasarkan nisbah ekuiti pada hari tersebut, kemudian ukur pergerakan penjejak S&P 500 dalam lima dan 20 sesi berikutnya.
SQL tepat di sebalik setiap nombor
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 ASCKumpulan sesi paling tenang bermula pada 0.34 dan kumpulan paling sibuk bermula pada 0.81. Maka, julat teratas merangkumi setiap bacaan yang akan dianggap terlalu ekstrem oleh pelabur kontrarian. Bagi 226 sesi tersebut, pergerakan median dalam tempoh 20 sesi ialah 3%, berbanding 0.91% selepas kumpulan paling tenang. Selepas lima sesi, kedua-dua kumpulan itu masing-masing mencatat 0.82% dan 0.3%.
Median menyembunyikan perkara yang penting. Dalam kumpulan teratas, separuh pertengahan hasil 20 sesi berada antara -1.82% hingga 5.71%. Dalam kumpulan paling tenang, separuh pertengahan berada antara -0.83% hingga 2.67%. Kedua-dua julat itu banyak bertindih. Kumpulan yang menempatkan sesuatu sesi mengubah titik tengah taburan, tetapi hampir tidak mengecilkan julat di sekitar titik tengah tersebut. Perkara inilah yang tidak ditunjukkan oleh panduan umum.
Terdapat satu peringatan berkaitan pemberat sampel. Tempoh dari Januari 2022 hingga Julai 2026 merangkumi satu pasaran menurun dan pemulihan selepasnya, dengan kira-kira 226 sesi bagi setiap kumpulan. Ini ialah sampel yang nyata, tetapi hanya meliputi satu tempoh dalam sejarah pasaran.
Adakah bacaan ekstrem berkumpul pada paras terendah pasaran?
Bacaan itu berkumpul dalam bulan yang mengalami kejatuhan, yang merupakan dakwaan berbeza. Kumpulkan setiap bulan dari 2022 dan seterusnya mengikut pergerakan tracker dalam bulan tersebut, kemudian hitung jumlah bacaan put/call desil teratas yang jatuh dalam setiap kumpulan.
SQL tepat di sebalik setiap nombor
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) ASCBulan apabila tracker ditutup 3% atau lebih rendah mencatat purata 4.2 bacaan desil teratas setiap satu, berbanding 1.9 dalam bulan apabila tracker meningkat 3% atau lebih. Median bacaan harian bagi setiap kumpulan ditunjukkan dalam lajur terakhir, iaitu 0.75 bagi kumpulan paling lemah dan 0.62 bagi kumpulan terbaik. Dua hujung jadual masing-masing merangkumi 12 dan 22 bulan.
Bacaan put/call yang ekstrem dan harga yang menurun muncul secara serentak. Itu ialah kejadian bersama, dan angka hadapan dalam bahagian sebelumnya menunjukkan nilai maklumat tersebut. Nisbah itu ialah ukuran pada hari yang sama bagi pergerakan harga pada hari yang sama. Oleh itu, lonjakannya muncul dalam kemerosotan, bukan mendahuluinya. Paras terendah ialah label yang diberikan selepas kejadian itu berlaku.
Membaca sesuatu paras berbanding taburan
Dua tabiat dapat dirumuskan daripada angka di atas.
Pertama, bandingkan perkara yang setara. Sesuatu bacaan hanya bermakna jika dibandingkan dengan sejarah instrumen yang sama dalam tempoh yang setanding. Inilah yang diberikan oleh jadual persentil, bukan ambang yang diingati.
Kedua, perhatikan penyebut. Nisbah itu menurun apabila volum call melonjak, walaupun pembelian put tidak berubah. Penurunan atau lonjakan nisbah boleh berlaku hanya kerana satu bahagian pecahan berubah. Oleh itu, membaca volum put dan volum call secara berasingan menjadikan pengiraan lebih jelas.
Disiplin yang sama terpakai pada setiap pengukur sentimen yang disebut sebagai angka tunggal. VIX dan bacaan volatiliti tersirat sebanyak 30% tidak boleh ditafsirkan tanpa taburannya sendiri. Peraturan sentimen kontrarian hanya dapat disokong oleh data apabila paras rujukan diukur, bukan diandaikan.
Soalan Lazim
Adakah nisbah put/call yang tinggi bersifat bullish?
Tafsiran kontrarian menganggap pembelian put yang tinggi menunjukkan orang ramai sudah mengambil posisi untuk kejatuhan. Berbanding bakul saham tunggal di atas, sesi dalam kelompok satu perlima bacaan tertinggi diikuti pergerakan median 20 sesi sebanyak 3% pada penjejak S&P 500, berbanding 0.91% selepas satu perlima bacaan paling tenang. Separuh pertengahan hasil bagi kelompok satu perlima tertinggi merangkumi -1.82% hingga 5.71%.
Apakah nisbah put/call yang normal?
Ia bergantung sepenuhnya pada opsyen yang dikira. Bagi bakul sepuluh saham tunggal yang banyak dimiliki pelabur, sesi median dari 2022 hingga Julai 2026 mencatat 0.67 put bagi setiap call. Bagi tiga ETF pasaran luas dalam sesi yang sama, bacaan median ialah 1.45.
Mengapakah nisbah put/call indeks lebih tinggi daripada nisbah put/call ekuiti?
Opsyen indeks luas dan ETF merupakan instrumen standard untuk lindung nilai portfolio. Hedger yang membeli put indeks tidak mempunyai dagangan call sepadan di sebelahnya. Jumlah dagangan saham tunggal pula cenderung kepada call yang dibeli untuk mendapatkan potensi kenaikan dan call yang dijual terhadap saham yang sudah dipegang. Keadaan ini mengekalkan nisbah buku tersebut pada paras yang lebih rendah.
Adakah nisbah put/call sesuai untuk menentukan masa pasaran?
Ukuran di atas menunjukkan taburan hasil selepas setiap satu perlima bacaan. Julat dalam mana-mana satu kelompok jauh lebih lebar berbanding perbezaan antara median kelompok. Bacaan dalam desil tertinggi juga lebih banyak muncul pada bulan apabila indeks ditutup lebih rendah, iaitu 4.2 sebulan bagi kelompok paling lemah.
Apakah perbezaan antara nisbah put/call berdasarkan volum dan nisbah berdasarkan open interest?
Nisbah volum mengira kontrak yang didagangkan sepanjang sesi. Oleh itu, nisbah ini ditetapkan semula setiap hari dan bertindak balas dengan pantas. Nisbah open interest pula mengira posisi yang masih belum ditutup. Angka ini berubah secara perlahan dan berada pada paras tersendiri. Kedua-duanya tidak boleh saling menggantikan. Ambang yang diambil daripada satu ukuran akan memberikan tafsiran yang salah bagi ukuran yang lain.
Cara angka ini dibina
- Sumber: satu baris bagi setiap kontrak opsyen untuk setiap sesi, yang mengandungi volum dagangan sesi tersebut. Put dan call diasingkan berdasarkan kod kontrak OCC. Lapan aksara terakhir ialah strike, manakala aksara sebelumnya ialah C untuk call dan P untuk put. Buka SQL di bawah mana-mana panel untuk melihat jadual dan penapis yang tepat.
- Setiap nisbah pada halaman ini ialah nisbah volum. Open interest tidak termasuk dalam pengiraan. Oleh itu, tiada angka di sini merupakan nisbah open interest.
- Tiada penapis kualiti implied volatility digunakan. Kontrak dimasukkan berdasarkan volum dagangan sahaja kerana panel ini mengira aktiviti dagangan, bukannya mengukur volatiliti.
- Bakul tersebut terdiri daripada AAPL, MSFT, NVDA, AMZN, META, TSLA, GOOGL, JPM, KO dan XOM bagi buku saham tunggal, serta SPY, QQQ dan IWM bagi buku indeks-ETF. Nisbah yang diterbitkan oleh bursa meliputi keseluruhan pasaran dan merangkumi produk indeks seperti SPX. Oleh itu, parasnya berada pada kedudukan yang berbeza.
- Harga indeks ialah print sesi biasa terakhir setiap hari bagi penjejak S&P 500. Pulangan hadapan mengecualikan 20 sesi terakhir dalam sampel kerana tempoh hadapan 20 sesi belum tersedia. Pergerakan bulanan dikira dari penutupan sesi pertama hingga penutupan sesi terakhir dalam setiap bulan.
Setiap panel di atas boleh dikembangkan untuk melihat SQL yang mendasarinya. Pertanyaan persentil yang sama boleh dijalankan terhadap mana-mana underlying yang anda ikuti di terminal Strasmore.