Cos'è il put-call ratio: guida pratica ai dati
Il put-call ratio misura il volume delle put rispetto alle call. Analizziamo i dati reali del mercato US suddivisi per scadenza, indici ed equity su dieci anni di storico.
28
Il put-call ratio è il rapporto tra il volume giornaliero delle put e quello delle call: indica quanti contratti ribassisti sono stati scambiati per ogni contratto rialzista. Una lettura superiore a 1,0 indica che sono passate di mano più put che call; un valore nettamente inferiore a 1,0 segnala una prevalenza di call. La maggior parte delle spiegazioni si ferma alla definizione e a una regola empirica popolare. Questa pagina calcola il dato reale, analizzando ogni contratto di opzione quotato negli Stati Uniti, giorno per giorno, e lo suddivide secondo la prassi professionale: per indice contro azioni, per singola scadenza e confrontandolo con un decennio di dati storici.
Analisi del volume delle opzioni
Il calcolo del put-call ratio richiede l'aggregazione dei volumi di tutti i contratti attivi. Gli analisti separano i volumi degli indici da quelli dei singoli titoli azionari per isolare il sentiment del mercato. Le opzioni su indice riflettono spesso strategie di hedge istituzionale, mentre le opzioni su azioni sono più legate a posizioni direzionali o di speculazione.
Visualizza i dati storici del put-call ratio
Il monitoraggio costante di questo indicatore permette di identificare eccessi di ottimismo o di pessimismo. Quando il rapporto raggiunge estremi storici, può segnalare una fase di inversione del trend. Gli operatori professionisti utilizzano queste informazioni per valutare il posizionamento del mercato e la domanda di protezione tramite put.
Metodologia di calcolo
Il sistema elabora i dati di ogni singola transazione registrata sui mercati statunitensi. Il processo di normalizzazione esclude i contratti con volumi nulli o non significativi. Il risultato finale offre una visione granulare, suddivisa per tipologia di sottostante e orizzonte temporale, garantendo una precisione superiore rispetto alle medie di mercato standard.
Come si calcola il put-call ratio?
Si prendono tutti i trade in opzioni di una seduta, si somma il volume dei contratti put, si somma quello delle call e si divide. Una put guadagna valore al ribasso del sottostante; una call guadagna al rialzo, quindi il ratio viene letto come una sorta di termometro del posizionamento ribassista rispetto a quello rialzista.
L'aritmetica è volutamente semplice. Si supponga che un titolo scambi quarantamila contratti put e sessantamila contratti call in una seduta: quarantamila diviso sessantamila è uguale a zero virgola sessantasette, ovvero due put per ogni tre call. Mantenendo le call a sessantamila e portando le put a novantamila, il ratio diventa uno virgola cinque. Questa è l'intera formula; la difficoltà risiede nell'interpretazione, non nella divisione.
Due dettagli si celano dietro il termine "volume":
- Volume, non open interest. Il ratio standard conteggia i contratti scambiati in giornata. Una variante utilizza l'open interest, ovvero i contratti in essere, che varia molto più lentamente. È necessario sapere quale dei due viene mostrato in un grafico.
- Ogni trade ha due controparti. Una put acquistata per aprire una posizione, una put venduta per chiudere un hedge e una put scritta per generare reddito producono tutte lo stesso volume. Il ratio conteggia l'attività, non l'intento.
Qual è l'andamento del put-call ratio a livello di mercato?
Calcolato quotidianamente su tutte le opzioni quotate su azioni, ETF e indici statunitensi, dal primo giugno fino all'ultima seduta completa presente nel nostro database:
| giorno | etichetta giorno | put call ratio | contratti mm |
|---|---|---|---|
| 2026-06-01 | June 1 | 0.589 | 70.8 |
| 2026-06-02 | June 2 | 0.6 | 61.7 |
| 2026-06-03 | June 3 | 0.651 | 63.6 |
| 2026-06-04 | June 4 | 0.679 | 66.7 |
| 2026-06-05 | June 5 | 0.866 | 103.1 |
| 2026-06-08 | June 8 | 0.765 | 66 |
| 2026-06-09 | June 9 | 0.861 | 82.4 |
| 2026-06-10 | June 10 | 0.864 | 67.8 |
| 2026-06-11 | June 11 | 0.808 | 70 |
| 2026-06-12 | June 12 | 0.654 | 76.3 |
| 2026-06-15 | June 15 | 0.714 | 73.3 |
| 2026-06-16 | June 16 | 0.79 | 66 |
| 2026-06-17 | June 17 | 0.853 | 72.3 |
| 2026-06-18 | June 18 | 0.793 | 79.2 |
| 2026-06-22 | June 22 | 0.755 | 65.3 |
| 2026-06-23 | June 23 | 0.884 | 60.4 |
| 2026-06-24 | June 24 | 0.867 | 68.4 |
| 2026-06-25 | June 25 | 0.923 | 65.9 |
| 2026-06-26 | June 26 | 0.895 | 71.9 |
| 2026-06-29 | June 29 | 0.794 | 65.7 |
L'esatto SQL dietro ogni numero
SELECT toDate(toTimeZone(window_start, 'America/New_York')) AS day,
concat(monthName(day), ' ', toString(toDayOfMonth(day))) AS day_label,
round(sumIf(toFloat64(volume), substring(ticker, length(ticker) - 8, 1) = 'P')
/ sumIf(toFloat64(volume), substring(ticker, length(ticker) - 8, 1) = 'C'), 3) AS put_call_ratio,
round(sum(toFloat64(volume)) / 1e6, 1) AS contracts_mm
FROM global_markets.options_minute_aggs
WHERE window_start >= '2026-06-01 04:00:00'
AND window_start < '2026-07-11 04:00:00'
GROUP BY day
ORDER BY dayLa serie ha aperto il periodo a 0.589 il June 1, lo ha chiuso a 0.686 il July 10 e non ha mai superato 1,0 nel frattempo; le call hanno registrato volumi superiori alle put in tutte le 28 sedute. Questa è la prima lezione pratica: 1,0 non è il punto medio neutrale che un principiante presume. L'informazione risiede nel movimento del rapporto all'interno del suo stesso range. Ecco il range per il mese di giugno appena concluso:
| mediana giugno | massimo giugno | giorno massimo giugno | minimo giugno | giorno minimo giugno |
|---|---|---|---|---|
| 0.793 | 0.923 | June 25 | 0.589 | June 1 |
L'esatto SQL dietro ogni numero
WITH daily AS (
SELECT toDate(toTimeZone(window_start, 'America/New_York')) AS day,
sumIf(toFloat64(volume), substring(ticker, length(ticker) - 8, 1) = 'P')
/ sumIf(toFloat64(volume), substring(ticker, length(ticker) - 8, 1) = 'C') AS ratio
FROM global_markets.options_minute_aggs
WHERE window_start >= '2026-06-01 04:00:00'
AND window_start < '2026-07-01 04:00:00'
GROUP BY day
)
SELECT round(quantileDeterministic(0.5)(ratio, cityHash64(toString(day))), 3) AS june_median,
round(max(ratio), 3) AS june_high,
concat(monthName(argMax(day, ratio)), ' ', toString(toDayOfMonth(argMax(day, ratio)))) AS june_high_day,
round(min(ratio), 3) AS june_low,
concat(monthName(argMin(day, ratio)), ' ', toString(toDayOfMonth(argMin(day, ratio)))) AS june_low_day
FROM dailyLa mediana di giugno si è attestata a 0.793, all'interno di una banda compresa tra 0.589 (il June 1) e 0.923 (il June 25). Passiamo ora alla seduta che tutti ricordano del mese, il selloff del 5 giugno, documentato nel riepilogo di giugno 2026. Sono stati scambiati 103.1 milioni di contratti in opzioni, la seduta più intensa del periodo, e il rapporto è balzato a 0.866 dal 0.679 del giorno precedente. Il selloff e la seduta ad alto volume, caratterizzata da un forte posizionamento sulle put, sono coincisi: il rapporto ha registrato l'impennata del posizionamento ribassista nel momento stesso in cui si è verificata.
Due note pratiche. Il livello oscilla in base al mix di prodotti scambiati durante la settimana, quindi piccole variazioni giornaliere all'interno della banda non hanno di per sé un significato rilevante. Inoltre, il volume totale rappresenta un contesto essenziale: lo stesso rapporto su un numero doppio di contratti costituisce un segnale molto più forte, motivo per cui il pannello riporta il numero di contratti accanto al rapporto.
CBOE, ISEE e gli altri benchmark put-call
Se il vostro broker o un grafico di notizie finanziarie cita "il" put-call ratio, quasi certamente si riferisce a una delle poche serie pubblicate e denominate, che misurano popolazioni differenti:
- $CPC, il put/call ratio totale del CBOE: ogni opzione scambiata sugli exchange CBOE, put su call.
- $CPCE, il ratio relativo alle sole azioni: opzioni su singoli titoli azionari. Le opzioni su ETF con regolamento fisico, come SPY, rientrano in questa categoria, sebbene i trader le utilizzino come prodotti su indice.
- $CPCI, il ratio relativo ai soli indici: opzioni su indice con regolamento in contanti (SPX, NDX, RUT, VIX e simili).
- ISEE, l'ISE Sentiment Index, costruito in modo inverso: call divise per put, moltiplicate per cento, calcolate solo sugli acquisti long dei clienti in apertura. Un ISEE elevato indica una prevalenza di call; un $CPC elevato indica una prevalenza di put. Leggere l'uno come se fosse l'altro inverte il messaggio.
La classificazione azionario/indice del CBOE inserisce le opzioni su ETF come SPY nel comparto azionario. Il pannello sottostante traccia il confine in modo differente, separando gli ETF sul mercato ampio dai singoli titoli: le due categorie presentano dinamiche di scambio totalmente diverse. Ogni contratto di giugno duemilaventisei, suddiviso in tre popolazioni:
| popolazione | put call ratio | contratti mm | % del volume |
|---|---|---|---|
| Broad-market ETFs (SPY, QQQ, IWM, DIA) | 1.175 | 476.3 | 32.2 |
| Index options (SPX, VIX, NDX) | 1.096 | 115.7 | 7.8 |
| Single stocks and other ETFs | 0.588 | 885.8 | 59.9 |
L'esatto SQL dietro ogni numero
WITH substring(ticker, 3, length(ticker) - 17) AS root
SELECT multiIf(root IN ('SPX', 'SPXW', 'XSP', 'NDX', 'NDXP', 'RUT', 'RUTW', 'VIX', 'VIXW', 'DJX', 'OEX', 'XEO'), 'Index options (SPX, VIX, NDX)',
root IN ('SPY', 'QQQ', 'IWM', 'DIA'), 'Broad-market ETFs (SPY, QQQ, IWM, DIA)',
'Single stocks and other ETFs') AS population,
round(sumIf(toFloat64(volume), substring(ticker, length(ticker) - 8, 1) = 'P')
/ sumIf(toFloat64(volume), substring(ticker, length(ticker) - 8, 1) = 'C'), 3) AS put_call_ratio,
round(sum(toFloat64(volume)) / 1e6, 1) AS contracts_mm,
round(100 * sum(toFloat64(volume)) / sum(sum(toFloat64(volume))) OVER (), 1) AS pct_of_volume
FROM global_markets.options_minute_aggs
WHERE window_start >= '2026-06-01 04:00:00'
AND window_start < '2026-07-01 04:00:00'
GROUP BY population
ORDER BY put_call_ratio DESCLe due popolazioni legate agli indici hanno entrambe registrato una prevalenza di put, con gli ETF sul mercato ampio al 1.175 e le opzioni su indice con regolamento in contanti al 1.096, entrambi sopra uno virgola zero, mentre i singoli titoli e tutto il resto hanno segnato 0.588, a malapena più di una put ogni due call. Il meccanismo è strutturale: i prodotti su indice sono gli strumenti standard per l'hedge di portafoglio, e l'hedge si effettua con le put; i singoli titoli attirano l'acquisto speculativo di call. Anche le quote di volume sono rilevanti: i singoli titoli e gli altri ETF hanno rappresentato il 59.9% dei contratti di giugno, pertanto un ratio "totale" è perlopiù un ratio azionario che indossa una veste da indice.
Il rapporto dipende dal sottostante di riferimento
Analizziamo il dato più nel dettaglio. La stessa misurazione, riferita a giugno duemilaventisei, applicata a cinque dei titoli più scambiati:
| underlying | put call ratio | contratti mm |
|---|---|---|
| SPY | 1.16 | 263.2 |
| QQQ | 1.11 | 165.9 |
| TSLA | 0.73 | 58 |
| AAPL | 0.64 | 27 |
| NVDA | 0.56 | 64.6 |
L'esatto SQL dietro ogni numero
SELECT multiIf(ticker LIKE 'O:SPY2%', 'SPY',
ticker LIKE 'O:QQQ2%', 'QQQ',
ticker LIKE 'O:NVDA2%', 'NVDA',
ticker LIKE 'O:TSLA2%', 'TSLA',
'AAPL') AS underlying,
round(sumIf(toFloat64(volume), substring(ticker, length(ticker) - 8, 1) = 'P')
/ sumIf(toFloat64(volume), substring(ticker, length(ticker) - 8, 1) = 'C'), 2) AS put_call_ratio,
round(sum(toFloat64(volume)) / 1e6, 1) AS contracts_mm
FROM global_markets.options_minute_aggs
WHERE window_start >= '2026-06-01 04:00:00'
AND window_start < '2026-07-01 04:00:00'
AND (ticker LIKE 'O:SPY2%' OR ticker LIKE 'O:QQQ2%' OR ticker LIKE 'O:NVDA2%'
OR ticker LIKE 'O:TSLA2%' OR ticker LIKE 'O:AAPL2%')
GROUP BY underlying
ORDER BY put_call_ratio DESCSPY ha registrato il posizionamento più sbilanciato sulle put tra i cinque titoli, pari a 1.16; NVDA si è attestato a solo 0.56. Confrontare il rapporto di un ticker con quello di un altro è pressoché privo di significato; il confronto utile è quello di un ticker rispetto alla propria serie storica.
Il put-call ratio varia in base alla scadenza?
Il volume giornaliero non è un aggregato omogeneo: alcuni contratti scadono in poche ore, altri tra anni. Suddividere il volume di giugno in base ai giorni alla scadenza, vedi cosa significa DTE, permette di distinguere le operazioni di hedge dai biglietti della lotteria:
| bucket scadenza | put call ratio | contratti mm | % del volume |
|---|---|---|---|
| 0DTE (expires today) | 0.957 | 506.3 | 34.3 |
| 1-7 days | 0.756 | 406 | 27.5 |
| 8-30 days | 0.717 | 261.2 | 17.7 |
| 31-90 days | 0.634 | 164.3 | 11.1 |
| 91+ days | 0.564 | 140 | 9.5 |
L'esatto SQL dietro ogni numero
WITH toDate(toTimeZone(window_start, 'America/New_York')) AS trade_day,
toDate(concat('20', substring(ticker, length(ticker) - 14, 2), '-',
substring(ticker, length(ticker) - 12, 2), '-',
substring(ticker, length(ticker) - 10, 2))) AS expiry,
dateDiff('day', trade_day, expiry) AS dte
SELECT multiIf(dte <= 0, '0DTE (expires today)', dte <= 7, '1-7 days', dte <= 30, '8-30 days',
dte <= 90, '31-90 days', '91+ days') AS expiry_bucket,
round(sumIf(toFloat64(volume), substring(ticker, length(ticker) - 8, 1) = 'P')
/ sumIf(toFloat64(volume), substring(ticker, length(ticker) - 8, 1) = 'C'), 3) AS put_call_ratio,
round(sum(toFloat64(volume)) / 1e6, 1) AS contracts_mm,
round(100 * sum(toFloat64(volume)) / sum(sum(toFloat64(volume))) OVER (), 1) AS pct_of_volume
FROM global_markets.options_minute_aggs
WHERE window_start >= '2026-06-01 04:00:00'
AND window_start < '2026-07-01 04:00:00'
GROUP BY expiry_bucket
ORDER BY min(dte)Il ratio diminuisce a ogni passo lungo il calendario. I contratti in scadenza in giornata, le opzioni 0DTE, hanno registrato 0.957, il paniere con la maggiore concentrazione di put tra i cinque, e da soli hanno rappresentato 34.3% del volume totale di giugno. Da uno a sette giorni, il ratio scende a 0.756; tra gli otto e i trenta giorni si attesta a 0.717; tra i trentuno e i novanta giorni a 0.634; infine, nel paniere oltre i novanta giorni, ovvero l'estremità della curva relativa ai LEAPS, tocca il minimo a 0.564, l'area del mercato con la maggiore prevalenza di call.
Questa tabella smentisce implicitamente l'interpretazione comune. Un ratio di mercato è una media tra diverse scadenze il cui mix cambia di settimana in settimana: un venerdì di scadenza intenso sposta il peso verso la parte breve della curva e il dato principale varia, senza che sia cambiato il livello di ansia degli operatori. È necessario confrontare dati omogenei. La scadenza incide anche in altro modo: laddove il ratio aggrega il flusso giornaliero in un unico numero, il max pain analizza l'open interest posizionato su ogni singolo strike in quel determinato venerdì; i due indicatori descrivono quindi due facce della stessa scadenza.
Quanto è estrema una lettura, storicamente?
Sei settimane non bastano per stabilire se una lettura sia rara. Per questo servono anni; ecco quindi la famiglia di opzioni più longeva e scambiata sul mercato, SPY, con la mediana, il minimo e il massimo del suo put-call ratio giornaliero per ogni anno completo presente nel nostro database di opzioni:
| anno | sessioni | rapporto mediano | minimo | massimo |
|---|---|---|---|---|
| 2015 | 252 | 1.754 | 0.987 | 2.96 |
| 2016 | 252 | 1.508 | 0.503 | 2.508 |
| 2017 | 251 | 1.597 | 0.581 | 3.541 |
| 2018 | 250 | 1.438 | 0.611 | 2.362 |
| 2019 | 252 | 1.524 | 0.693 | 2.351 |
| 2020 | 253 | 1.431 | 0.59 | 2.282 |
| 2021 | 252 | 1.314 | 0.656 | 2.167 |
| 2022 | 251 | 1.361 | 0.983 | 1.927 |
| 2023 | 250 | 1.242 | 0.693 | 1.716 |
| 2024 | 252 | 1.175 | 0.829 | 1.897 |
| 2025 | 250 | 1.168 | 0.587 | 1.793 |
| 2026 | 150 | 1.234 | 0.729 | 1.751 |
L'esatto SQL dietro ogni numero
WITH daily AS (
SELECT toDate(toTimeZone(window_start, 'America/New_York')) AS day,
sumIf(toFloat64(volume), substring(ticker, length(ticker) - 8, 1) = 'P')
/ sumIf(toFloat64(volume), substring(ticker, length(ticker) - 8, 1) = 'C') AS ratio
FROM global_markets.options_minute_aggs
WHERE ticker LIKE 'O:SPY%'
GROUP BY day
HAVING sumIf(toFloat64(volume), substring(ticker, length(ticker) - 8, 1) = 'C') > 0
)
SELECT toYear(day) AS year,
count() AS sessions,
round(quantileDeterministic(0.5)(ratio, cityHash64(toString(day))), 3) AS median_ratio,
round(min(ratio), 3) AS low,
round(max(ratio), 3) AS high
FROM daily
WHERE toYear(day) >= 2015
GROUP BY year
ORDER BY yearNe emergono tre elementi. Primo, la mediana del ratio giornaliero di SPY ha chiuso sopra 1,0 in ogni anno riportato in tabella; l'inclinazione verso le put tipica dell'hedging sugli indici non è un umore del 2026, ma lo stato naturale del prodotto. Secondo, il livello è sceso nel corso del decennio: la mediana era 1.754 nel 2015 e 1.168 nel 2025, parallelamente alla crescita del trading di call a breve scadenza. Terzo, i range annuali sono ampi; il 2026 finora spazia da 0.729 a 1.751 su 150 sedute. Questa è la risposta onesta alla domanda "la lettura di oggi è estrema?": valutatela rispetto alla distribuzione del prodotto stesso, mai rispetto a 1,0.
Come monitorare il put-call ratio per un singolo titolo
I pannelli sopra riportati sono modelli, non report statici. Per costruire il ratio di un titolo in portafoglio:
- Selezionare la popolazione. Utilizzare le opzioni di un singolo ticker, non "il mercato"; gli effetti di mix citati in precedenza rendono i dati aggregati illeggibili.
- Sommare il volume giornaliero di put e call su ogni strike e scadenza di quel ticker, quindi dividere. Nel simbolo dell'opzione, il carattere situato a nove posizioni dalla fine è
PoC; quel singolo carattere definisce l'intera classificazione. - Costruire lo storico prima di valutare il livello. Un valore di zero virgola nove in una singola giornata non ha significato finché non si conoscono la mediana e il range di quel ticker, e l'andamento annuale del pannello SPY.
- Analizzare il volume contestualmente. Un picco su volumi ordinari è rumore; lo stesso picco registrato sul nastro più attivo delle ultime sei settimane è la sessione del cinque giugno citata sopra.
- Definire l'orizzonte temporale delle scadenze. Tutte le scadenze o solo quelle a breve termine? Entrambi gli approcci sono validi; mescolarli tra i vari giorni non lo è.
Come lo interpretano i trader e i limiti reali
Espresse come interpretazioni, non come leggi: un rapporto in crescita viene letto come una crescente domanda di hedge, mentre un picco estremo viene interpretato dai contrarian come capitolazione, il momento in cui la massa ha finalmente acquistato la propria protezione. La seduta del cinque giugno mostra il meccanismo con onestà: il rapporto è schizzato durante il selloff, non in anticipo. In questo arco temporale si è comportato come un termometro coincidente, non come una previsione. Mettete alla prova qualsiasi regola empirica rispetto alla serie storica effettiva e ricordate che il volume delle 0DTE continua a modificare la definizione di "normalità".
FAQ
Qual è un put-call ratio normale?
Dipende interamente dal campione di riferimento. Considerando tutte le opzioni quotate negli Stati Uniti nel mese di giugno 2026, la mediana giornaliera di mercato è stata pari a 0.793, con un range compreso tra 0.589 e 0.923, senza mai superare 1,0. Le opzioni su ETF di ampio mercato hanno registrato 1.175 nello stesso mese, mentre le singole azioni e altri ETF si sono attestati su 0.588. Ciò che è "normale" per SPY non lo è per una singola azione.
Un put-call ratio elevato è un segnale bullish o bearish?
Entrambe le interpretazioni sono valide e nessuna delle due costituisce una regola fissa. Preso alla lettera, un elevato volume di put indica un posizionamento al ribasso; i contrarian interpretano picchi estremi come il segnale che la massa dei venditori ha completato il proprio posizionamento. Nei dati di giugno 2026, il picco si è verificato nel giorno stesso del selloff: è stato un evento concomitante, non predittivo.
Il put-call ratio è la stessa cosa del VIX o della volatilità implicita?
No, e questa è la confusione più comune. Il put-call ratio è costruito sul volume, ovvero quanti contratti sono passati di mano. Il VIX e la volatilità implicita derivano dai prezzi delle opzioni: quanto sono costosi quei contratti, espressi come volatilità annualizzata. Lo skew della volatilità implicita confronta il prezzo delle put (ribassiste) con quello delle call (rialziste). Un volume elevato di put può essere scambiato a prezzi contenuti, mentre volumi ridotti possono verificarsi a prezzi di panico; i due indicatori possono divergere ed entrambi possono essere corretti.
Cosa sono $CPC, $CPCE e $CPCI?
Sono i put-call ratio pubblicati dal CBOE: $CPC per il volume totale, $CPCE per le opzioni su azioni (dove SPY e altri ETF sono conteggiati come azioni) e $CPCI per le opzioni su indici con regolamento in contanti. La distinzione è rilevante. La nostra versione a tre vie, che separa gli ETF di ampio mercato sia dalle opzioni su indici che dalle singole azioni anziché seguire la classificazione a due vie del CBOE, ha misurato per giugno 2026 un valore di 1.175 per gli ETF di ampio mercato e 1.096 per le opzioni su indici, entrambi sopra 1,0, contro 0.588 per le singole azioni e altri ETF. L'ISEE dell'ISE è un indice separato e invertito: call su put, basato esclusivamente sugli acquisti dei clienti.
Il put-call ratio utilizza il volume o l'open interest?
Il rapporto standard utilizza il volume scambiato nella giornata. Esiste una variante basata sull'open interest che si muove molto più lentamente; i due indicatori possono indicare direzioni opposte nello stesso giorno. La sezione volume vs open interest approfondisce questa distinzione.
Ogni valore riportato qui deriva da una query memorizzata sull'intero tape delle opzioni. È possibile espandere l'SQL di qualsiasi pannello o calcolare il ratio per la propria watchlist sul terminale Strasmore.