Ist ein hohes Put/Call-Verhältnis bullish?
Warum ein hohes Put/Call-Verhältnis als konträr bullish gilt: Perzentilbänder für Aktien- und Indexoptionen zeigen, was auf extreme Werte tatsächlich folgte.
Ein hohes Put/Call-Verhältnis gilt klassisch als konträr bullishes Signal: Ungewöhnlich viele gekaufte Puts werden als Zeichen dafür gewertet, dass sich die Marktteilnehmer bereits auf einen Rückgang eingestellt haben. Wer auf dieser Grundlage handelt, stößt jedoch auf ein Problem. Für „hoch“ gibt es keinen festen Schwellenwert. Ein Wert von 1,15 kann bei Optionen auf Einzelaktien extrem sein, bei Indexprodukten aber einer gewöhnlichen Sitzung entsprechen.
Die Frage erfordert eine Referenzverteilung. Diese Seite stellt eine solche Verteilung für beide Marktsegmente dar und untersucht anschließend, was auf die hohen Werte folgte. Der Erklärungsartikel zum Put/Call-Verhältnis beschreibt, wie das Verhältnis berechnet wird. Alle folgenden Auswertungen basieren auf dieser Definition.
Zwei Hinweise zur Messung. Jedes hier verwendete Verhältnis zählt die an diesem Tag gehandelten Kontrakte. Es handelt sich daher um ein Volumenverhältnis. Das Open Interest erfasst weiterhin offene Positionen und liegt auf einer anderen Ebene (Volumen versus Open Interest grenzt die beiden Größen voneinander ab). Die Zahlen stammen außerdem aus einem festen Korb: zehn bekannte Einzelaktien gegenüber drei breit diversifizierten ETFs. Sie bilden daher nicht den gesamten Markt ab. Entscheidend ist die Form der Verteilung, nicht die letzte Nachkommastelle.
Was gilt als ein hoher Put/Call-Ratio?
Ein Perzentil beantwortet eine Frage, die ein einzelner Wert nicht beantworten kann. Die folgende Kurve umfasst jede Handelssitzung von Januar 2022 bis Juli 2026, mit jeweils einem Ratio pro Sitzung für jedes Optionsbuch.
Das exakte SQL hinter jeder Zahl
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
)Im Korb der Einzelaktien lag der Median der Sitzungen bei 0.67 Puts je Call. Das oberste Dezil der Sitzungen begann bei 0.89, und das extremste eine Prozent lag über 1.34. Auch das ruhige Ende ist für die Einordnung nützlich: Eine von zwanzig Sitzungen endete bei höchstens 0.48.
Die ETF-Spalte zeigt an jedem Punkt der Kurve eine andere Verteilung. Ihr Sitzungsmedian lag bei 1.45. Damit lag er über der one-to-one-Linie, unter der der Median der Einzelaktien deutlich liegt. Das eigene oberste Dezil begann bei 1.77. Ein Ratio ohne Angabe des zugrunde liegenden Optionsbuchs ist nahezu bedeutungslos. Derselbe Print von 1,15 steht für zwei unterschiedliche Dinge, je nachdem, aus welcher Spalte er stammt.
Warum ein Index-Verhältnis über eins normal ist und ein Aktienverhältnis über eins nicht
Teilt man dasselbe Handelsvolumen nach Basiswerten auf, treten die Unterschiede klar hervor.
Das exakte SQL hinter jeder Zahl
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 DESCIn den ersten sieben Monaten des Jahres 2026 lag IWM mit 2.73 Puts je Call an der Spitze. An 98.6% seiner 144 Handelstage lag das Verhältnis über eins. Am unteren Ende wurde XOM mit 0.38 gehandelt; an 2.8% der Handelstage lag das Verhältnis über eins.
Die Differenz ist strukturell bedingt. Optionen auf breit gefasste Markt-ETFs werden zur Portfolioabsicherung eingesetzt. Ein Manager mit zweihundert Positionen kauft Index-Puts, statt für jede einzelne Position Puts zu erwerben. Diesem Handelsfluss steht kein entsprechender Call-Handel gegenüber. Das Volumen bei Optionen auf Einzelaktien tendiert in die andere Richtung: Anleger kaufen Calls für Aufwärtspotenzial und verkaufen Calls auf bereits gehaltene Aktien. Ein „Gesamt“-Verhältnis vermischt beide Bücher. Dadurch liegt es zwischen den beiden Werten und wird ebenso stark vom Produktmix des jeweiligen Tages wie von der Marktstimmung beeinflusst.
Eine weitere Verschiebung der Größenordnung sollten Sie kennen. Auf Indizes und ETFs entfällt inzwischen ein großer Anteil des Volumens von Optionen mit taggleichem Verfall (0DTE-Optionen). Diese Kategorie wurde nicht annähernd in diesem Umfang gehandelt, als die gängigen Schwellenwerte festgelegt wurden. Alte Schwellenwerte lassen sich daher nicht auf einen Markt mit einer anderen Zusammensetzung übertragen.
Ist eine hohe Put/Call-Ratio bullish? Was auf die Extremwerte folgte
Der Kontraindikator-Ansatz lässt sich testen. Sortieren Sie jede Sitzung nach der Equity-Ratio des jeweiligen Tages in fünf gleich große Gruppen. Messen Sie anschließend, wie sich der S&P 500-Tracker in den folgenden fünf und 20 Sitzungen entwickelte.
Das exakte SQL hinter jeder Zahl
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 ASCDas ruhigste Fünftel der Sitzungen beginnt bei 0.34, das geschäftigste Fünftel bei 0.81. Damit enthält das oberste Band alle Werte, die ein Kontraindikator als überzogen bezeichnen würde. Über diese 226 Sitzungen lag die Medianrendite über 20 Sitzungen bei 3%, gegenüber 0.91% nach dem ruhigsten Fünftel. Nach fünf Sitzungen betrugen die entsprechenden Werte 0.82% und 0.3%.
Medians verbergen den entscheidenden Teil. Innerhalb des obersten Fünftels reichte die mittlere Hälfte der Ergebnisse über 20 Sitzungen von -1.82% bis 5.71%. Im ruhigsten Fünftel reichte die mittlere Hälfte von -0.83% bis 2.67%. Die beiden Bandbreiten überschneiden sich über weite Strecken. Das Band, in das eine Sitzung fällt, verschiebt zwar das Zentrum der Verteilung. Es verengt aber die Spanne um dieses Zentrum kaum. Genau diesen Teil lässt eine Faustregel außer Acht.
Ein Vorbehalt zur Gewichtung: Der Zeitraum von Januar 2022 bis Juli 2026 umfasst einen Bärenmarkt und die anschließende Erholung. Auf jedes Band entfallen dabei ungefähr 226 Sitzungen. Das ist eine reale Stichprobe, aber nur ein bestimmter Abschnitt der Marktgeschichte.
Häufen sich Extremwerte an Markttiefs?
Sie häufen sich in fallenden Monaten. Das ist eine andere Aussage. Gruppieren Sie jeden Monat ab 2022 danach, wie sich der Tracker innerhalb des Monats entwickelt hat. Zählen Sie anschließend, wie viele Put/Call-Werte im obersten Dezil auf jede Gruppe entfielen.
Das exakte SQL hinter jeder Zahl
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) ASCIn Monaten, in denen der Tracker mindestens 3 % niedriger schloss, entfielen durchschnittlich 4.2 Werte im obersten Dezil auf jeden Monat. In Monaten mit einem Anstieg von mindestens 3 % waren es 1.9. Der Median des täglichen Werts jeder Gruppe steht in der letzten Spalte: 0.75 für die schwächste Gruppe und 0.62 für die stärkste. An den beiden Enden der Tabelle stehen 12 beziehungsweise 22 Monate.
Extreme Put/Call-Werte und fallende Kurse treten gemeinsam auf. Das ist ein gleichzeitiges Auftreten. Maßgeblich sind die Forward-Zahlen im vorherigen Abschnitt. Das Verhältnis misst das Marktgeschehen desselben Tages. Seine Ausschläge treten daher innerhalb von Rückgängen auf, nicht davor. Ein Tiefpunkt wird erst im Nachhinein als solcher bezeichnet.
Ein Niveau im Verhältnis zu einer Verteilung einordnen
Aus den oben genannten Zahlen ergeben sich zwei Gewohnheiten.
Erstens sollten Sie Gleiches mit Gleichem vergleichen. Ein Messwert ist nur im Verhältnis zur eigenen Historie desselben Datensatzes über einen vergleichbaren Zeitraum aussagekräftig. Genau das zeigt eine Perzentiltabelle. Ein erinnerter Schwellenwert leistet das nicht.
Zweitens sollten Sie den Nenner beobachten. Das Verhältnis fällt, wenn das Call-Volumen stark zunimmt, selbst wenn sich die Put-Käufe nicht verändern. Ein Rückgang und ein Anstieg des Verhältnisses können jeweils allein durch eine Veränderung auf einer Seite des Bruchs entstehen. Deshalb bleibt die Berechnung nachvollziehbar, wenn Sie Put-Volumen und Call-Volumen getrennt betrachten.
Die gleiche Disziplin gilt für jeden Sentimentindikator, der als isolierte Zahl angegeben wird. Der VIX und ein ausgewiesener Wert von 30 % impliziter Volatilität sind ohne ihre eigenen Verteilungen nicht einzuordnen. Auch konträre Sentimentregeln sind nur dann datenbasiert belastbar, wenn das Referenzniveau gemessen und nicht unterstellt wird.
FAQ
Ist ein hoher Put/Call-Ratio bullish?
Die konträre Interpretation geht davon aus, dass bei starkem Put-Kauf bereits viele Marktteilnehmer auf fallende Kurse positioniert sind. Gemessen am oben genannten Einzelaktienkorb folgte auf Handelstage im obersten Fünftel der Messwerte beim S&P-500-Tracker über 20 Handelstage eine Medianbewegung von 3%. Nach dem ruhigsten Fünftel waren es 0.91%. Die mittleren 50 % der Ergebnisse im obersten Fünftel reichten von -1.82% bis 5.71%.
Was ist ein normales Put/Call-Ratio?
Das hängt vollständig davon ab, welche Optionen gezählt werden. Bei einem Korb aus zehn bekannten Einzelaktien lag der Median für die Handelstage von 2022 bis Juli 2026 bei 0.67 Puts je Call. Bei drei breit gestreuten ETFs für dieselben Handelstage lag der Median bei 1.45.
Warum ist das Put/Call-Ratio bei Indizes höher als bei Einzelaktien?
Breite Index- und ETF-Optionen sind das Standardinstrument für die Absicherung von Portfolios. Kauft ein Anleger Index-Puts zur Absicherung, gibt es keinen entsprechenden Call-Trade daneben. Bei Einzelaktien entfällt ein größerer Teil des Volumens auf gekaufte Calls für ein Aufwärtsexposure sowie auf den Verkauf von Calls gegen bereits gehaltene Aktien. Dadurch ist das Ratio in diesem Segment niedriger.
Eignet sich das Put/Call-Ratio für das Market Timing?
Die obige Auswertung zeigt die Verteilung der anschließenden Marktbewegungen für jedes Fünftel der Messwerte. Die Spannweite innerhalb eines Bandes ist deutlich größer als der Abstand zwischen den Medianwerten der Bänder. Messwerte im obersten Dezil treten außerdem häufiger in Monaten auf, in denen der Index niedriger schloss. In der schwächsten Gruppe lag dieser Anteil bei 4.2 pro Monat.
Was ist der Unterschied zwischen einem Put/Call-Ratio auf Basis des Volumens und einem auf Basis des Open Interest?
Ein volumenbasiertes Ratio zählt die während einer Handelssitzung gehandelten Kontrakte. Es wird daher täglich zurückgesetzt und reagiert schnell. Ein Ratio auf Basis des Open Interest zählt die noch offenen Positionen. Dieser Wert verändert sich langsamer und bewegt sich auf einem eigenen Niveau. Beide Kennzahlen sind nicht austauschbar. Ein Schwellenwert, der von der einen Kennzahl übernommen wird, kann die andere daher falsch interpretieren.
So werden diese Zahlen ermittelt
- Quelle ist eine Zeile je Optionskontrakt und Handelstag mit dem an diesem Tag gehandelten Volumen. Puts und Calls werden aus dem OCC-Kontraktcode getrennt. Die letzten acht Zeichen enthalten den Ausübungspreis, das davorstehende Zeichen ist bei einem Call C und bei einem Put P. Unter jedem Panel können Sie die SQL-Abfrage mit der genauen Tabelle und den Filtern öffnen.
- Jedes Ratio auf dieser Seite basiert auf dem Volumen. Das Open Interest fließt nicht in die Berechnung ein. Es handelt sich daher bei keiner Kennzahl hier um ein Open-Interest-Ratio.
- Es wird kein Qualitätsfilter für die implizite Volatilität angewendet. Kontrakte werden ausschließlich anhand des gehandelten Volumens berücksichtigt, da diese Panels die Handelsaktivität und nicht die Volatilität messen.
- Der Korb umfasst AAPL, MSFT, NVDA, AMZN, META, TSLA, GOOGL, JPM, KO und XOM für das Einzelaktiensegment sowie SPY, QQQ und IWM für das Index-ETF-Segment. Von Börsen veröffentlichte Ratios decken den Gesamtmarkt ab und enthalten auch Indexprodukte wie SPX. Ihre Niveaus liegen deshalb auf einem anderen Niveau.
- Für den S&P-500-Tracker werden als Indexkurse die letzten regulären Börsenkurse jedes Tages verwendet. Für die Forward-Renditen werden die letzten 20 Handelstage der Stichprobe ausgeschlossen, da für sie noch keine zukünftige 20-Tage-Periode vorliegt. Die Monatsbewegungen reichen vom Schlusskurs der ersten Handelssitzung bis zum Schlusskurs der letzten Handelssitzung des jeweiligen Monats.
Jedes Panel oben lässt sich aufklappen und zeigt die dahinterliegende SQL-Abfrage. Dieselben Perzentilabfragen können Sie im Strasmore-Terminal auf jeden von Ihnen beobachteten Basiswert anwenden.