max pain opzioni calcolo reale SPY
Il max pain è lo strike dove i detentori di opzioni incassano meno alla scadenza. Vedi il calcolo su una catena reale di SPY e quanto il regolamento effettivo si è avvicinato.
Il max pain è lo strike price al quale il maggior valore in dollari di opzioni aperte scadrebbe senza valore. Appartiene a un singolo sottostante e a una singola data di scadenza, e deriva da una ricerca sull’open interest: testa ogni strike quotato come prezzo di regolamento ipotetico, somma quanto ogni call e put aperta pagherebbe al suo detentore a quel prezzo, e tiene il prezzo in cui il totale è minimo. Il nome descrive il lato del libro contabile dei detentori di opzioni. Questa pagina illustra il calcolo su una catena reale di SPY, poi misura quanto il regolamento effettivo si sia avvicinato attraverso le scadenze mensili standard del 2026.
Come si calcola il max pain?
Il max pain è una ricerca, non una formula. Cinque passaggi:
- Raccogli l’open interest, il numero di contratti ancora aperti, a ogni strike sulla scadenza, con call e put tenute separate.
- Scegli un prezzo di regolamento candidato. Gli strike quotati stessi sono il consueto insieme di candidati.
- Valuta ogni call come il prezzo candidato meno il suo strike, con minimo zero, e ogni put come il suo strike meno il prezzo candidato, con minimo zero.
- Moltiplica ogni valore per l’open interest a quello strike e per il moltiplicatore contrattuale di 100 azioni, poi somma l’intera catena in una cifra in dollari.
- Ripeti per ogni candidato e tieni il totale più piccolo. Quello strike candidato è lo strike del max pain.
Un esempio ipotetico fissa i meccanismi. Supponi che 1.000 call siano aperte a uno strike di $95 e il regolamento sia a $100. Ogni contratto paga al suo detentore $5 per azione, quindi il blocco paga $500.000 su 1.000 contratti da 100 azioni. Sposta il regolamento a $95 e quel blocco non paga nulla, mentre ogni put con strike superiore a $95 inizia a pagare. Percorrendo il prezzo candidato su e giù per la scala si traccia una curva con un minimo, e quel minimo è il numero che viene citato.
Due proprietà derivano direttamente dalla definizione. Il minimo si trova dove il valore delle call e il valore delle put si bilanciano approssimativamente in termini di dollari, il che lo colloca vicino agli strike con l’open interest più pesante. E la cifra descrive una catena in un momento: ricalcolala dopo un’altra sessione di trading e la risposta si sposta.
Dove si trovano i contratti sulla scala degli strike
L’open interest viene pubblicato una volta per sessione dai dati di compensazione dopo la chiusura. I pannelli qui utilizzano il volume di contratti scambiati durante la vita di una scadenza come sostituto visibile di quel file, e l’oggetto ha la stessa forma: un mucchio di contratti impilati entro pochi dollari dal prezzo del sottostante. Ogni contratto sulla catena SPY in scadenza venerdì 17 luglio 2026, raggruppato per strike:
L'esatto SQL dietro ogni numero
SELECT toString(strike_usd) AS strike,
round(sumIf(contracts, opt_type = 'C') / 1e3, 1) AS call_contracts_k,
round(sumIf(contracts, opt_type = 'P') / 1e3, 1) AS put_contracts_k
FROM (
SELECT intDiv(toUInt32OrZero(substring(ticker, length(ticker) - 7, 8)), 1000) AS strike_usd,
substring(ticker, length(ticker) - 8, 1) AS opt_type,
sum(toFloat64(volume)) AS contracts
FROM global_markets.options_minute_aggs
WHERE window_start >= toDateTime('2026-06-18 08:00:00')
AND window_start < toDateTime('2026-07-18 04:00:00')
AND startsWith(ticker, 'O:SPY260717')
AND intDiv(toUInt32OrZero(substring(ticker, length(ticker) - 7, 8)), 1000) BETWEEN 736 AND 757
GROUP BY strike_usd, opt_type
)
GROUP BY strike_usd, strike
ORDER BY strike_usdLa scala si inclina mentre attraversa il money. Allo strike $736, le put superavano le call di 113.2 mila contro 8 mila. A $757 l’inclinazione va nella direzione opposta, 131.7 mila call contro 8.1 mila put. Le put si accumulano sotto il prezzo del sottostante e le call sopra, e i due lati si incrociano da qualche parte nel mezzo. Quella regione di incrocio è dove un valore di max pain atterrerà prima che venga eseguito qualsiasi calcolo, che è la prima cosa utile da sapere sulla statistica. I contratti scambiati e i contratti aperti sono conteggi diversi, e options volume vs open interest separa i due.
La curva dei payout e il suo minimo
Eseguendo i passaggi da 3 a 5 su prezzi di regolamento candidati da $730 a $765 si disegna la forma che il calcolo cerca:
L'esatto SQL dietro ogni numero
WITH chain AS (
SELECT intDiv(toUInt32OrZero(substring(ticker, length(ticker) - 7, 8)), 1000) AS strike,
substring(ticker, length(ticker) - 8, 1) AS opt_type,
sum(toFloat64(volume)) AS contracts
FROM global_markets.options_minute_aggs
WHERE window_start >= toDateTime('2026-06-18 08:00:00')
AND window_start < toDateTime('2026-07-18 04:00:00')
AND startsWith(ticker, 'O:SPY260717')
GROUP BY strike, opt_type
),
candidates AS (
SELECT DISTINCT strike AS settle FROM chain WHERE strike BETWEEN 730 AND 765
)
SELECT candidates.settle AS settle_price,
round(sum(multiIf(chain.opt_type = 'C' AND chain.strike < candidates.settle,
chain.contracts * (candidates.settle - chain.strike),
chain.opt_type = 'P' AND chain.strike > candidates.settle,
chain.contracts * (chain.strike - candidates.settle),
0)) * 100 / 1e6, 1) AS holder_payout_usd_mm
FROM candidates CROSS JOIN chain
GROUP BY settle_price
ORDER BY settle_priceUn regolamento a $730 pagherebbe ai detentori 11149.2 milioni di dollari su questa catena, quasi tutto ai detentori di put. Un regolamento a $765 pagherebbe 11083.9 milioni di dollari, quasi tutto ai detentori di call. Tra gli estremi la curva scende in un bacino poco profondo. Classificando gli stessi totali dal più piccolo in su si nomina lo strike:
L'esatto SQL dietro ogni numero
WITH chain AS (
SELECT intDiv(toUInt32OrZero(substring(ticker, length(ticker) - 7, 8)), 1000) AS strike,
substring(ticker, length(ticker) - 8, 1) AS opt_type,
sum(toFloat64(volume)) AS contracts
FROM global_markets.options_minute_aggs
WHERE window_start >= toDateTime('2026-06-18 08:00:00')
AND window_start < toDateTime('2026-07-18 04:00:00')
AND startsWith(ticker, 'O:SPY260717')
GROUP BY strike, opt_type
),
candidates AS (
SELECT DISTINCT strike AS settle FROM chain WHERE strike BETWEEN 730 AND 765
)
SELECT concat('$', toString(candidates.settle)) AS candidate_strike,
round(sum(multiIf(chain.opt_type = 'C' AND chain.strike < candidates.settle,
chain.contracts * (candidates.settle - chain.strike),
chain.opt_type = 'P' AND chain.strike > candidates.settle,
chain.contracts * (chain.strike - candidates.settle),
0)) * 100 / 1e6, 1) AS holder_payout_usd_mm
FROM candidates CROSS JOIN chain
GROUP BY candidate_strike
ORDER BY holder_payout_usd_mm ASC
LIMIT 6Il minimo si trova a $746, a 1898.2 milioni di dollari. Guarda quanto è piatto il bacino, non solo dove si trova il fondo. Il secondo classificato, $747, arriva a 1940.2 milioni di dollari, e il sesto candidato $749 a 2272.8 milioni di dollari. Sei prezzi candidati che coprono pochi dollari su uno strumento sopra i 700 dollari sono vicini tra loro, quindi una modesta revisione della catena sposta lo strike stampato mentre nulla del mercato è cambiato.
Cosa afferma la teoria
La versione popolare dice che un sottostante gravita verso il suo strike di max pain in prossimità della scadenza, con i venditori di opzioni che lo spingono lì. Due affermazioni separate sono impilate in quella frase. La prima è statistica: i prezzi di regolamento si raggruppano vicino allo strike di max pain. La seconda è meccanica: qualcuno sta spingendo.
La seconda affermazione è la più debole. Un valore di max pain aggrega l’open interest senza informazioni su quale controparte sia lunga e quale sia corta a ogni strike, quindi i venditori nella storia sono un’ipotesi, non un’osservazione. Un partecipante in grado di spostare un ETF a grande capitalizzazione verso uno strike scelto avrebbe bisogno di una dimensione oltre i flussi di copertura generati dall’intera catena. Laddove è stato descritto un vero meccanismo di copertura, è quello gamma: un libro dealer con gamma positiva ridimensiona la sua copertura vendendo in forza e comprando in debolezza, un insieme di regole che i professionisti chiamano smorzamento o pinning vicino agli strike pesantemente scambiati. Il nostro gamma exposure explainer illustra quella stima e le ipotesi alla base.
La prima affermazione regge meglio, con una grande qualifica trattata nella prossima sezione. Il lavoro accademico sul pinning alla scadenza documenta l’effetto più chiaramente nei singoli titoli il cui open interest sulle opzioni è grande rispetto alle loro azioni negoziabili, e lo misura in centesimi piuttosto che in dollari.
Quanto è vicino lo strike effettivo?
Sei scadenze mensili standard sono corse su SPY tra febbraio e luglio 2026. Per ognuna, il pannello calcola lo strike minimizzante dai contratti di quella settimana di scadenza, stampa il prezzo di chiusura effettivo nella sessione di scadenza, e mette accanto un controllo ingenuo: la chiusura di SPY stesso una settimana prima, misurata rispetto allo stesso prezzo di regolamento.
L'esatto SQL dietro ogni numero
WITH expiries AS (
SELECT arrayJoin([toDate('2026-02-20'), toDate('2026-03-20'), toDate('2026-04-17'),
toDate('2026-05-15'), toDate('2026-06-18'), toDate('2026-07-17')]) AS expiry
),
chain AS (
SELECT toDateOrNull(concat('20', substring(ticker, length(ticker) - 14, 6))) AS expiry,
intDiv(toUInt32OrZero(substring(ticker, length(ticker) - 7, 8)), 1000) AS strike,
substring(ticker, length(ticker) - 8, 1) AS opt_type,
sum(toFloat64(volume)) AS contracts
FROM global_markets.options_minute_aggs
WHERE ((window_start >= toDateTime('2026-02-16 08:00:00') AND window_start < toDateTime('2026-02-21 04:00:00'))
OR (window_start >= toDateTime('2026-03-16 08:00:00') AND window_start < toDateTime('2026-03-21 04:00:00'))
OR (window_start >= toDateTime('2026-04-13 08:00:00') AND window_start < toDateTime('2026-04-18 04:00:00'))
OR (window_start >= toDateTime('2026-05-11 08:00:00') AND window_start < toDateTime('2026-05-16 04:00:00'))
OR (window_start >= toDateTime('2026-06-15 08:00:00') AND window_start < toDateTime('2026-06-19 04:00:00'))
OR (window_start >= toDateTime('2026-07-13 08:00:00') AND window_start < toDateTime('2026-07-18 04:00:00')))
AND startsWith(ticker, 'O:SPY26')
AND toDateOrNull(concat('20', substring(ticker, length(ticker) - 14, 6))) IN (SELECT expiry FROM expiries)
GROUP BY expiry, strike, opt_type
),
curve AS (
SELECT c1.expiry AS expiry,
c1.strike AS settle,
sum(multiIf(c2.opt_type = 'C' AND c2.strike < c1.strike, c2.contracts * (c1.strike - c2.strike),
c2.opt_type = 'P' AND c2.strike > c1.strike, c2.contracts * (c2.strike - c1.strike),
0)) AS payout
FROM chain AS c1 INNER JOIN chain AS c2 ON c1.expiry = c2.expiry
GROUP BY c1.expiry, c1.strike
),
pain AS (
SELECT expiry, argMin(settle, payout) AS pain_strike FROM curve GROUP BY expiry
),
px AS (
SELECT toDate(toTimeZone(window_start, 'America/New_York')) AS d,
argMax(close, window_start) AS close_px
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker = 'SPY'
AND toDate(toTimeZone(window_start, 'America/New_York')) >= toDate('2026-02-05')
AND toDate(toTimeZone(window_start, 'America/New_York')) <= toDate('2026-07-17')
AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60
+ toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959
GROUP BY d
),
prior AS (
SELECT expiries.expiry AS expiry, argMax(px.close_px, px.d) AS week_earlier_px
FROM expiries CROSS JOIN px
WHERE px.d <= expiries.expiry - 7
GROUP BY expiries.expiry
)
SELECT formatDateTime(pain.expiry, '%b %e') AS expiry_label,
pain.pain_strike AS min_payout_strike,
round(px.close_px, 2) AS settlement_close,
round(abs(px.close_px - pain.pain_strike) / px.close_px * 100, 2) AS max_pain_miss_pct,
round(abs(px.close_px - prior.week_earlier_px) / px.close_px * 100, 2) AS week_earlier_miss_pct
FROM pain
INNER JOIN px ON pain.expiry = px.d
INNER JOIN prior ON pain.expiry = prior.expiry
ORDER BY pain.expiryIl divario tra lo strike minimizzante e la chiusura è andato da 0.07% sulla scadenza Jun 18 a 0.53% su Mar 20, rimanendo sotto sei decimi di punto percentuale ogni mese. Citato da solo, sembra un tasso di successo elevato. Due caratteristiche della misurazione lo ridimensionano.
La scala dei candidati è centrata sul prezzo del sottostante per costruzione. Gli strike sono quotati intorno al money, e i contratti che alimentano la somma si concentrano lì, quindi il calcolo inizia all’interno di una fascia stretta attorno allo spot e non può restituire una risposta molto lontana da esso. La seconda caratteristica è la tempistica: i contratti che alimentano ogni riga qui sono stati scambiati fino alla sessione di scadenza inclusa, insieme alla chiusura con cui vengono confrontati. Una cifra calcolata dalla stessa finestra in cui viene misurata descrive quella finestra, non la prevede in anticipo.
L’ultima colonna è il controllo che vale la pena leggere. La chiusura di SPY una settimana prima di Apr 17 ha mancato il prezzo di regolamento di 4.32%, contro 0.42% per lo strike minimizzante. In May 15 i due sono arrivati a una frazione l’uno dall’altro, 0.21% contro 0.12%. Una statistica calcolata il giorno della scadenza dovrebbe battere un prezzo vecchio di una settimana con un ampio margine. Il test onesto, che questo pannello non tenta, congela la catena una settimana prima e chiede se quello strike prevede la chiusura meglio del prezzo sullo schermo lo stesso giorno.
Leggere un numero di max pain pubblicato
- Chiedi quali contratti sono stati inclusi. Gli editori differiscono sulle serie settimanali rispetto a quelle mensili, e sulle catene di indici rispetto a quelle di ETF che tracciano lo stesso benchmark.
- Chiedi quando è stato prelevato l’open interest. Il file di compensazione si aggiorna una volta per sessione, quindi una cifra intraday che si muove sta ricalcolando da qualcos’altro.
- Chiedi come appare l’intera curva, non solo dove si trova il minimo. Un bacino piatto significa che lo strike stampato è una delle diverse risposte quasi equivalenti.
- Confronta con un’alternativa ingenua prima di leggere la vicinanza come abilità.
I meccanismi di scadenza decidono quali contratti sono ancora nella somma in un dato giorno, e when options expire copre quel calendario. Per una seconda statistica di posizionamento costruita dalla stessa catena, the put call ratio misura direttamente il mix di call e put.
FAQ sul max pain
Cosa significa max pain nel trading di opzioni?
Il max pain è lo strike price al quale il payout totale ai detentori di opzioni aperte su una singola scadenza sarebbe minimo. Viene calcolato dall’open interest testando ogni strike quotato come prezzo di regolamento ipotetico e tenendo quello più economico. Il numero descrive la forma di una catena di opzioni e non contiene previsioni.
Le azioni chiudono sempre allo strike del max pain?
No. Sulle sei scadenze mensili di SPY misurate sopra, lo strike minimizzante si trovava entro 0.53% dalla chiusura al massimo, che sembra stretto finché la cifra non viene confrontata con un benchmark ingenuo e con il fatto che gli strike candidati si raggruppano già intorno al prezzo. La vicinanza su una scala centrata sullo spot è un test debole.
Con quale frequenza cambia un numero di max pain?
L’open interest viene pubblicato una volta per sessione di trading dai dati di compensazione dopo la chiusura, quindi la maggior parte dei valori di max pain pubblicati si muove al massimo una volta al giorno. Un cruscotto il cui numero si muove durante la sessione sta ricalcolando dal volume scambiato o da un’istantanea intraday della catena invece che dall’open interest consolidato.
Il max pain è la stessa cosa della gamma exposure?
No. Entrambi leggono la stessa catena di opzioni e rispondono a domande diverse. Il max pain nomina un prezzo, usando solo l’open interest senza un modello di pricing. La gamma exposure quantifica un flusso di copertura in dollari per ogni movimento dell’uno percento, e necessita di una superficie di volatilità implicita più un’ipotesi su quale lato di ogni contratto i dealer detengono.
Il max pain funziona sui singoli titoli?
Il calcolo funziona su qualsiasi catena quotata. Il suo output diventa rumoroso su catene sottili dove una manciata di strike porta quasi tutto l’open interest, e la ricerca sul pinning a supporto di qualsiasi parte della teoria si concentra su nomi il cui open interest sulle opzioni è grande rispetto alle azioni disponibili per il trading.
Ogni pannello sopra è una query memorizzata con il suo SQL a un clic di distanza. Esegui la stessa analisi strike per strike su qualsiasi catena sul terminale Strasmore.