max pain optionen berechnung spy beispiel
Max pain ist der Basispreis, bei dem Optionen wertlos verfallen. Die Berechnung an einer echten SPY-Kette zeigt, wie nah die Abrechnung am theoretischen Max Pain lag.
Max pain ist jener Basispreis, bei dem der größte Dollarwert ausstehender Optionen wertlos verfallen würde. Er gehört zu einem Basiswert und einem Verfallsdatum und entsteht aus einer Suche über das Open Interest: Man testet jeden gelisteten Strike als hypothetischen Abrechnungskurs, summiert, was jede ausstehende Call- und Put-Option ihrem Inhaber zu diesem Kurs zahlen würde, und behält den Kurs mit der geringsten Gesamtsumme. Der Name beschreibt die Seite der Optionsinhaber in der Bilanz. Diese Seite führt die Rechnung an einer echten SPY-Kette durch und misst dann, wie nah die tatsächliche Abrechnung über die standardmäßigen monatlichen Verfallstermine 2026 lag.
Wie wird Max Pain berechnet?
Max Pain ist eine Suche, keine Formel. Fünf Schritte:
- Sammle das Open Interest, die Anzahl noch ausstehender Kontrakte, bei jedem Strike des Verfalls, wobei Calls und Puts getrennt geführt werden.
- Wähle einen Kandidaten für den Abrechnungskurs. Die gelisteten Strikes selbst sind der übliche Kandidatensatz.
- Bewerte jeden Call mit dem Kandidatenkurs minus seinem Strike, mindestens null, und jeden Put mit seinem Strike minus dem Kandidatenkurs, mindestens null.
- Multipliziere jeden Wert mit dem Open Interest dieses Strikes und dem Kontraktmultiplikator von 100 Aktien, addiere dann die gesamte Kette zu einer einzigen Dollarsumme.
- Wiederhole dies für jeden Kandidaten und behalte die kleinste Gesamtsumme. Dieser Kandidat ist der Max-Pain-Strike.
Ein Gedankenexperiment verdeutlicht die Mechanik. Angenommen, 1.000 Calls liegen bei einem Strike von 95 $ offen und die Abrechnung erfolgt bei 100 $. Jeder Kontrakt zahlt seinem Inhaber 5 $ pro Aktie, also zahlt der Block 500.000 $ über 1.000 Kontrakte zu je 100 Aktien. Rutscht die Abrechnung auf 95 $, zahlt dieser Block nichts, während jeder Put mit einem Strike über 95 $ zu zahlen beginnt. Das Wandern des Kandidatenkurses die Leiter hinauf und hinunter zeichnet eine Kurve mit einem Tiefpunkt, und dieser Tiefpunkt ist die Zahl, die zitiert wird.
Zwei Eigenschaften ergeben sich direkt aus der Definition. Das Minimum liegt dort, wo Call-Wert und Put-Wert in Dollar-Beträgen ungefähr ausgeglichen sind, was es in die Nähe der Strikes mit dem höchsten Open Interest bringt. Und die Zahl beschreibt eine Kette zu einem bestimmten Zeitpunkt: Berechnet man sie nach einer weiteren Handelssitzung neu, verschiebt sich das Ergebnis.
Wo die Kontrakte auf der Strike-Leiter sitzen
Das Open Interest wird einmal pro Sitzung aus Clearing-Daten nach Börsenschluss veröffentlicht. Die hier gezeigten Panels verwenden das gehandelte Kontraktvolumen über die Lebensdauer eines Verfalls als sichtbaren Stellvertreter für diese Datei, und das Objekt hat die gleiche Form: ein Haufen von Kontrakten, die innerhalb weniger Dollar um den Kurs des Basiswerts gestapelt sind. Jeder Kontrakt in der SPY-Kette, die am Freitag, dem 17. Juli 2026, verfällt, gruppiert nach Strike:
Das exakte SQL hinter jeder Zahl
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_usdDie Leiter neigt sich, wenn sie das Geld kreuzt. Beim Strike von 736 $ überwogen Puts die Calls um 113.2 Tausend zu 8 Tausend. Bei 757 $ verläuft die Neigung in die andere Richtung, 131.7 Tausend Calls gegen 8.1 Tausend Puts. Puts stapeln sich unterhalb des Kurses des Basiswerts und Calls oberhalb, und die beiden Seiten kreuzen sich irgendwo in der Mitte. Diese Kreuzungsregion ist der Ort, an dem eine Max-Pain-Zahl landen wird, bevor irgendeine Rechnung läuft, was das Erste ist, das man über die Statistik wissen sollte. Gehandelte Kontrakte und ausstehende Kontrakte sind unterschiedliche Zählungen, und Optionsvolumen vs. Open Interest trennt die beiden.
Die Auszahlungskurve und ihr Tiefpunkt
Die Durchführung der Schritte 3 bis 5 über Kandidaten-Abrechnungskurse von 730 $ bis 765 $ zeichnet die Form, die die Berechnung durchsucht:
Das exakte SQL hinter jeder Zahl
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_priceEine Abrechnung bei 730 $ würde den Inhabern dieser Kette 11149.2 Millionen $ zahlen, fast vollständig an Put-Inhaber. Eine Abrechnung bei 765 $ würde 11083.9 Millionen $ zahlen, fast vollständig an Call-Inhaber. Zwischen den Enden fällt die Kurve in ein flaches Becken. Die Rangfolge derselben Summen von der kleinsten aufwärts benennt den Strike:
Das exakte SQL hinter jeder Zahl
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 6Das Minimum liegt bei $746, bei 1898.2 Millionen $. Man sollte nicht nur darauf achten, wo der Boden liegt, sondern auch, wie flach das Becken ist. Der Zweitplatzierte, $747, kommt auf 1940.2 Millionen $, und der sechstplatzierte Kandidat $749 auf 2272.8 Millionen $. Sechs Kandidatenkurse, die ein paar Dollar auf einem Instrument über 700 $ umfassen, liegen dicht beieinander, sodass eine moderate Revision der Kette den veröffentlichten Strike verschiebt, während sich am Markt nichts geändert hat.
Was die Theorie behauptet
Die populäre Version besagt, dass sich ein Basiswert zum Verfall hin zu seinem Max-Pain-Strike bewegt, wobei Optionsverkäufer ihn dorthin drücken. In diesem Satz stecken zwei getrennte Behauptungen. Die erste ist statistisch: Abrechnungskurse clusterieren sich um den Max-Pain-Strike. Die zweite ist mechanisch: Jemand drückt.
Die zweite Behauptung ist die schwächere. Eine Max-Pain-Zahl aggregiert das Open Interest ohne Information darüber, welche Gegenpartei bei einem Strike long und welche short ist, daher sind die Verkäufer in der Geschichte eine Annahme und keine Beobachtung. Ein Marktteilnehmer, der einen breiten Markt-ETF in einen gewählten Strike bewegen kann, bräuchte eine Größenordnung jenseits der Hedging-Flows, die die gesamte Kette generiert. Wo ein realer Hedging-Mechanismus beschrieben wurde, ist es der Gamma-Mechanismus: Ein Dealer-Buch mit positivem Gamma passt sein Hedge an, indem es in Stärke verkauft und in Schwäche kauft – ein Regelwerk, das Praktiker als Dämpfung oder Anheften in der Nähe stark gehandelter Strikes bezeichnen. Unser Gamma-Exposure-Erklärer legt diese Schätzung und die darunterliegenden Annahmen dar.
Die erste Behauptung hält besser stand, mit einer großen Einschränkung, die im nächsten Abschnitt behandelt wird. Akademische Arbeiten zum Verfalls-Anheften dokumentieren den Effekt am deutlichsten bei Einzelaktien, deren Options-Open-Interest im Verhältnis zu ihren handelbaren Aktien groß ist, und messen ihn in Cent statt Dollar.
Wie nah landet der Strike tatsächlich?
Sechs standardmäßige monatliche Verfallstermine liefen bei SPY zwischen Februar und Juli 2026. Für jeden berechnet das Panel den minimierenden Strike aus den Kontrakten dieser Verfallswoche, druckt den tatsächlichen Schlusskurs der Verfallssitzung und setzt eine naive Kontrolle daneben: den eigenen Schlusskurs von SPY eine Woche früher, gemessen am gleichen Abrechnungskurs.
Das exakte SQL hinter jeder Zahl
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.expiryDie Lücke zwischen dem minimierenden Strike und dem Schlusskurs reichte von 0.07% beim Verfall Jun 18 bis zu 0.53% bei Mar 20 und blieb in jedem Monat unter sechs Zehntelprozent. Für sich genommen sieht das nach einer starken Trefferquote aus. Zwei Merkmale der Messung schmälern dies.
Die Kandidatenleiter ist konstruktionsbedingt auf den Kurs des Basiswerts zentriert. Strikes werden um das Geld herum gelistet, und die Kontrakte, die die Summe speisen, konzentrieren sich ebenfalls dort, sodass die Rechnung innerhalb eines engen Bandes um den Kassakurs beginnt und keine Antwort weit außerhalb liefern kann. Das zweite Merkmal ist das Timing: Die Kontrakte, die jede Zeile hier speisen, wurden bis einschließlich der Verfallssitzung gehandelt, ebenso wie der Schlusskurs, mit dem verglichen wird. Eine Zahl, die aus demselben Fenster berechnet wird, gegen das sie gemessen wird, beschreibt dieses Fenster, sagt es aber nicht voraus.
Die letzte Spalte ist die Kontrolle, die man lesen sollte. Der Schlusskurs von SPY eine Woche vor Apr 17 verfehlte den Abrechnungskurs um 4.32%, gegenüber 0.42% für den minimierenden Strike. Bei May 15 lagen die beiden innerhalb eines Bruchteils voneinander, 0.21% gegenüber 0.12%. Eine Statistik, die am Verfallstag berechnet wird, sollte einen eine Woche alten Kurs mit großem Abstand schlagen. Der ehrliche Test, den dieses Panel nicht unternimmt, friert die Kette eine Woche vorher ein und fragt, ob dieser Strike den Schlusskurs besser vorhersagt als der Kurs, der am selben Tag auf dem Bildschirm steht.
Eine veröffentlichte Max-Pain-Zahl lesen
- Frage, welche Kontrakte eingeflossen sind. Herausgeber unterscheiden sich bei wöchentlichen vs. monatlichen Serien und bei Index-Ketten vs. ETF-Ketten, die denselben Benchmark abbilden.
- Frage, wann das Open Interest gezogen wurde. Die Clearing-Datei wird einmal pro Sitzung aktualisiert, daher bewegt sich eine Intraday-Zahl, die sich ändert, durch Neuberechnung aus etwas anderem.
- Frage, wie die gesamte Kurve aussieht, nicht nur, wo der Boden sitzt. Ein flaches Becken bedeutet, dass der veröffentlichte Strike einer von mehreren nahezu gleichen Antworten ist.
- Vergleiche mit einer naiven Alternative, bevor du Nähe als Können interpretierst.
Verfallsmechaniken entscheiden, welche Kontrakte an einem bestimmten Tag noch in der Summe sind, und wann Optionen verfallen behandelt diesen Kalender. Für eine zweite Positionsstatistik, die aus derselben Kette aufgebaut ist, misst das Put-Call-Verhältnis die Call- und Put-Mischung direkt.
Max Pain FAQ
Was bedeutet Max Pain im Optionshandel?
Max Pain ist der Basispreis, bei dem die Gesamtauszahlung an die Inhaber ausstehender Optionen eines einzelnen Verfalls am geringsten wäre. Er wird aus dem Open Interest berechnet, indem jeder gelistete Strike als hypothetischer Abrechnungskurs getestet und der günstigste behalten wird. Die Zahl beschreibt die Form einer Optionskette und enthält keine Prognose.
Schließen Aktien immer beim Max-Pain-Strike?
Nein. Bei den sechs oben gemessenen monatlichen SPY-Verfällen lag der minimierende Strike im weitesten Fall innerhalb von 0.53% des Schlusskurses, was eng klingt, bis die Zahl mit einem naiven Benchmark und der Tatsache verglichen wird, dass die Kandidaten-Strikes bereits um den Kurs herum clusterieren. Nähe auf einer am Kassakurs zentrierten Leiter ist ein schwacher Test.
Wie oft ändert sich eine Max-Pain-Zahl?
Das Open Interest wird einmal pro Handelssitzung aus Clearing-Daten nach Börsenschluss veröffentlicht, daher bewegen sich die meisten veröffentlichten Max-Pain-Zahlen höchstens einmal am Tag. Ein Dashboard, dessen Zahl sich während der Sitzung ändert, berechnet aus gehandeltem Volumen oder einem Intraday-Ketten-Snapshot neu, nicht aus abgerechnetem Open Interest.
Ist Max Pain dasselbe wie Gamma Exposure?
Nein. Beide lesen dieselbe Optionskette und beantworten unterschiedliche Fragen. Max Pain benennt einen Preis und verwendet nur das Open Interest ohne Preismodell. Gamma Exposure beziffert einen Hedging-Flow in Dollar pro ein Prozent Bewegung und benötigt eine implizite Volatilitätsoberfläche plus eine Annahme darüber, welche Seite jedes Kontrakts die Händler halten.
Funktioniert Max Pain bei Einzelaktien?
Die Rechnung läuft auf jeder gelisteten Kette. Ihre Ausgabe wird verrauscht bei dünnen Ketten, bei denen eine Handvoll Strikes fast das gesamte Open Interest tragen, und die Pinning-Forschung, die irgendeinen Teil der Theorie stützt, konzentriert sich auf Namen, deren Options-Open-Interest im Verhältnis zu den zum Handel verfügbaren Aktien groß ist.
Jedes Panel oben ist eine gespeicherte Abfrage, deren SQL einen Klick entfernt ist. Führe denselben Strike-für-Strike-Durchlauf auf jeder Kette im Strasmore-Terminal durch.