Hoe werkt een open-source GEX dashboard
Ontdek hoe een open-source GEX dashboard gamma exposure berekent. Leer meer over de per strike formule, de gehanteerde dealer sign convention en de beperkingen van de output.
Hoe gamma exposure wordt berekend
Een open-source GEX-dashboard zet een snapshot van een optieketen om in een gamma exposure-profiel: een dollarbedrag bij elke strike dat schat hoeveel de vraag naar hedging van opties verschuift bij een beweging van één procent in de onderliggende waarde. De berekening bestaat uit één regel code. De aanname die hieraan ten grondslag ligt – dat dealers elke call long en elke put short houden – wordt nergens in de keten gemeten, en in dat hiaat ontstaan de meeste verkeerde interpretaties van dit cijfer. Als u wat gamma exposure meet heeft gelezen, is de volgende vraag hoe dit cijfer tot stand komt.
Hoe wordt gamma exposure berekend?
Begin met één enkel contract. Gamma is de snelheid waarmee de delta van een optie verandert bij een beweging van één dollar in de onderliggende waarde, genoteerd per aandeel. Een standaard Amerikaanse aandelenoptie heeft betrekking op honderd aandelen, dus het gamma van het contract in termen van aandelen is het genoteerde gamma vermenigvuldigd met die factor.
Een dashboard schaalt dit naar dollars en naar een procentuele beweging. Vijf factoren bepalen het cijfer per uitoefenprijs:
gamma: gamma per aandeel voor het contract, afgelezen van de optieketen of lokaal berekend op basis van de implied volatilityopen_interest: aantal uitstaande contracten tegen die uitoefenprijs en expiratiedatum100: de contractmultiplierspot * spot: zet een deltaverandering om in een verandering in nominale dollarwaarde tegen de huidige koers van de onderliggende waarde0.01: schaalt het resultaat om van een beweging van één dollar naar een beweging van één procent
Het cijfer per uitoefenprijs is gex = gamma * open_interest * 100 * spot * spot * 0.01. Tel dit op voor elke uitoefenprijs in de keten, waarbij calls positief en puts negatief worden ingevoerd; het totaal is het uiteindelijke cijfer. Alles wat het dashboard verder weergeeft – de staven per uitoefenprijs, het cumulatieve profiel, het flip level en de uitsplitsing per expiratiedatum – is een herschikking van die ene som.
Hoe ziet een GEX-profiel per strike eruit?
Het onderstaande paneel bouwt het profiel voor SPY op voor elke strike binnen 1,5% van de slotkoers van de onderliggende waarde, voor contracten die binnen 30 dagen aflopen.
De exacte SQL achter elk getal
SELECT
concat('$', toString(round(k))) AS strike,
round(sumIf(gex, side = 'call') / 1e6, 1) AS call_gex_musd,
round(-sumIf(gex, side = 'put') / 1e6, 1) AS put_gex_musd,
round((sumIf(gex, side = 'call') - sumIf(gex, side = 'put')) / 1e6, 1) AS net_gex_musd,
any(snapshot_label) AS snapshot_label
FROM
(
SELECT
toFloat64(strike_price) AS k,
if(lower(option_type) LIKE 'c%', 'call', 'put') AS side,
toFloat64(gamma) * toFloat64(volume) * 100
* pow(toFloat64(underlying_close), 2) * 0.01 AS gex,
formatDateTime(date, '%b %e, %Y') AS snapshot_label
FROM global_markets.options_greeks
WHERE underlying_symbol = 'SPY'
AND date = (SELECT max(date) FROM global_markets.options_greeks WHERE underlying_symbol = 'SPY')
AND iv_converged = 1
AND volume > 0
AND days_to_expiry BETWEEN 0 AND 30
AND abs(toFloat64(strike_price) / toFloat64(underlying_close) - 1) < 0.015
)
GROUP BY k
ORDER BY kEén vervanging is hier van belang, en het is dezelfde vervanging die veel gratis dashboards maken zonder dit te vermelden. De data achter deze panelen bevat de greeks en het handelsvolume per contract, niet de open interest; daarom wordt elke strike gewogen op basis van het verhandelde contractvolume van de sessie. Deze twee grootheden meten verschillende zaken: volume telt de transacties van de dag, open interest telt de posities die bij het slot nog openstaan. De vorm van de curve is de les; het niveau zou verschuiven bij gebruik van een kolom met werkelijke open interest. Het onderscheid is de moeite waard om volledig te lezen in optievolume versus open interest.
De band bevat 23 strikes, lopend van $758 tot $780, allemaal gemeten op Aug 6, 2026. Bij de laagste strike in het overzicht komt het gesommeerde nettoresultaat uit op -653.1 miljoen dollar per beweging van 1%. Bij de hoogste strike bedraagt dit 849.4 miljoen. Merk op hoe ongelijk de staven zijn van de ene strike naar de andere. Ronde getallen en veel verhandelde expiries stapelen zich op, terwijl de strikes daartussen nauwelijks meetellen.
Wordt de tekenconventie van de dealer gemeten of aangenomen?
Niets in een optieketen legt vast wie aan welke kant van een contract staat. De keten rapporteert uitoefenprijzen, expiratiedata, grieken en het aantal uitstaande contracten. Er wordt niet vermeld of de market maker die de koersen stelde de dag long of short eindigde, en geen enkele publieke feed vult deze informatie aan.
De standaardconstructie overbrugt dit gat met een conventie: men gaat ervan uit dat dealers long zijn in elke call en short in elke put. Calls worden vervolgens positief in de som opgenomen en puts negatief. Die ene keuze bepaalt het teken van het hoofdcijfer, en elke lezing die op dit teken is gebaseerd, neemt dit over. Draai de conventie om en een positieve gamma-waarde wordt een negatieve bij identieke data.
De conventie heeft een logische basis. De retail-flow neigt naar het schrijven van covered calls en cash-secured puts, en naar het kopen van puts als bescherming, wat de dealer aan de andere kant in ongeveer de aangenomen richting plaatst. Het blijft een aanname over eigendom die uniform wordt toegepast op uitoefenprijzen waar deze vaak onjuist is, inclusief een uitoefenprijs die zojuist door een grote institutionele call-koper is gevuld. Een dashboard dat het cijfer toont zonder de conventie te vermelden, verbergt de belangrijkste input.
Waar bevindt de gamma zich over de verschillende expiratiedata?
Een GEX-cijfer zonder filter op expiratiedatum voegt contracten die vanmiddag aflopen samen met contracten die pas volgend kwartaal expireren en behandelt het totaal als één hoeveelheid. Gamma concentreert zich aan de voorzijde, en die voorzijde rolt elke sessie door.
De exacte SQL achter elk getal
SELECT
formatDateTime(expiry_date, '%b %e') AS expiry,
round(sumIf(gex, side = 'call') / 1e9, 2) AS call_gex_bn,
round(-sumIf(gex, side = 'put') / 1e9, 2) AS put_gex_bn,
round((sumIf(gex, side = 'call') - sumIf(gex, side = 'put')) / 1e9, 2) AS net_gex_bn
FROM
(
SELECT
expiration_date AS expiry_date,
if(lower(option_type) LIKE 'c%', 'call', 'put') AS side,
toFloat64(gamma) * toFloat64(volume) * 100
* pow(toFloat64(underlying_close), 2) * 0.01 AS gex
FROM global_markets.options_greeks
WHERE underlying_symbol = 'SPY'
AND date = (SELECT max(date) FROM global_markets.options_greeks WHERE underlying_symbol = 'SPY')
AND iv_converged = 1
AND volume > 0
AND days_to_expiry BETWEEN 0 AND 21
)
GROUP BY expiry_date
ORDER BY expiry_dateOver de 11 expiratiedata binnen drie weken draagt de dichtstbijzijnde, Aug 7, een call-zijde van $20.57 miljard per 1% beweging en een netto gesigneerd totaal van -5.1 miljard. Het verre uiteinde van het panel is slechts een fractie daarvan. Een dashboardgrafiek die het lezen waard is, vermeldt het gebruikte expiratiefilter op de grafiek zelf.
Het zero gamma-niveau, vaak de 'flip' genoemd, is de koers van de onderliggende waarde waarbij het gesommeerde profiel de nullijn kruist. Om dit correct te berekenen, moet de optieketen opnieuw worden geprijsd op een grid van hypothetische spotprijzen en moet de gamma van elk contract bij elk van die prijzen opnieuw worden berekend, aangezien gamma zelf verandert naarmate de spotprijs beweegt. Veel projecten slaan die herwaardering over en interpoleren het kruispunt direct vanuit het huidige uitoefenprijs-profiel. Die kortere weg is goedkoper, maar leidt tot een andere prijs. Controleer welke methode een project hanteert voordat u het flip-niveau citeert.
Hoe sterk beweegt het profiel van dag tot dag?
Open interest is geen statisch gegeven. Contracten lopen af, nieuwe uitoefenprijzen worden genoteerd en posities worden gedurende elke handelssessie geopend en gesloten.
De exacte SQL achter elk getal
SELECT
toString(d) AS session_date,
formatDateTime(d, '%b %e') AS session_label,
round(sumIf(gex, side = 'call') / 1e9, 2) AS call_gex_bn,
round(-sumIf(gex, side = 'put') / 1e9, 2) AS put_gex_bn,
round((sumIf(gex, side = 'call') - sumIf(gex, side = 'put')) / 1e9, 2) AS net_gex_bn
FROM
(
SELECT
date AS d,
if(lower(option_type) LIKE 'c%', 'call', 'put') AS side,
toFloat64(gamma) * toFloat64(volume) * 100
* pow(toFloat64(underlying_close), 2) * 0.01 AS gex
FROM global_markets.options_greeks
WHERE underlying_symbol = 'SPY'
AND date >= today() - 60
AND iv_converged = 1
AND volume > 0
AND days_to_expiry BETWEEN 0 AND 45
)
GROUP BY d
ORDER BY dTwee zaken vallen op over de 41 sessies in het overzicht. De bruto zijden zijn omvangrijk en de netto waarde is het verschil daartussen: op Aug 6, de laatste sessie in het panel, bedroeg de call-zijde $29.2 miljard tegenover een put-zijde van -34.53 miljard, wat resulteerde in een netto waarde van -5.32 miljard. Een kleine verandering aan een van beide bruto zijden heeft een grote invloed op de netto waarde. De lijn is bovendien allesbehalve vloeiend. De netto waarde bedroeg -4.9 miljard op Jun 9, en het panel toont de aanzienlijke beweging tussen de sessies door. Een GEX-grafiek zonder tijdstempel is louter decoratief.
Waarin verschilt GEX van max pain?
Beide cijfers analyseren dezelfde optieketen, maar beantwoorden verschillende vragen. GEX weegt elke uitoefenprijs op basis van gamma en berekent hoeveel hedge-vraag een beweging van één procent zou creëren. Max pain negeert gamma volledig en stelt een vraag over de afwikkeling: bij welke prijs zou de totale in-the-money-waarde die aan optiehouders verschuldigd is, op de expiratiedatum het kleinst zijn. Het onderstaande paneel construeert die curve op basis van hetzelfde snapshot, voor contracten die binnen een week expireren.
De exacte SQL achter elk getal
WITH chain AS
(
SELECT
toFloat64(strike_price) AS k,
if(lower(option_type) LIKE 'c%', 'call', 'put') AS side,
sum(toFloat64(volume)) AS contracts,
min(abs(toFloat64(strike_price) / toFloat64(underlying_close) - 1)) AS moneyness
FROM global_markets.options_greeks
WHERE underlying_symbol = 'SPY'
AND date = (SELECT max(date) FROM global_markets.options_greeks WHERE underlying_symbol = 'SPY')
AND volume > 0
AND days_to_expiry BETWEEN 0 AND 7
GROUP BY k, side
)
SELECT
concat('$', toString(round(sk))) AS settle_price,
round(sum(multiIf(
side = 'call' AND sk > k, (sk - k) * contracts * 100,
side = 'put' AND sk < k, (k - sk) * contracts * 100,
0)) / 1e9, 2) AS itm_value_bn
FROM (SELECT DISTINCT k AS sk FROM chain WHERE moneyness <= 0.015) AS grid
CROSS JOIN chain
GROUP BY sk
ORDER BY skDe curve beslaat 23 potentiële afwikkelingsprijzen. Bij $758 bedraagt de totale in-the-money-waarde $0.86 miljard, en bij $780 komt dit uit op $0.7 miljard. Het laagste punt van de curve is de max pain-uitoefenprijs. Deze kan enkele dollars verwijderd zijn van de uitoefenprijs met de grootste gamma-exposure in hetzelfde snapshot, en geen van beide punten vormt een voorspelling van de koers waarop de onderliggende waarde zal afwikkelen.
Wat heeft u nodig om een open-source GEX-dashboard te draaien?
De meeste van deze projecten zijn kleine Python-pakketten met een visualisatielaag erbovenop. Wat zij van u vragen is kort:
- een chain-snapshot met uitoefenprijs, expiratiedatum, optietype, open interest en ofwel een door de vendor geleverde gamma of een implied volatility om er een te berekenen
- de spot price van de onderliggende waarde, vastgelegd op exact hetzelfde moment als de chain
- een timestamp, die bij de output wordt opgeslagen in plaats van aangenomen
- een expiratiefilter dat u bewust kiest
- een market data key
Installeer vanuit een tagged release in plaats van de default branch. git clone --branch <tag> --depth 1 <repo-url> geeft u een build die door iemand is goedgekeurd, terwijl main u geeft wat er vanochtend is gepusht. Werk binnen een virtual environment: python3 -m venv .venv, activeer deze en voer daarna pip install -r requirements.txt uit. Lees eerst de requires-python-regel in de pyproject.toml van het project. Een pakket dat is vastgezet op een oudere interpreter faalt op verwarrende wijze op een nieuwere versie.
Market data is het onderdeel dat zelden gratis is. Een snapshot met zowel open interest als greeks voor elk contract in een chain is bij de meeste vendors per augustus 2026 een betaald recht. Gratis endpoints geven doorgaans koersen terug zonder open interest, of open interest die pas de volgende ochtend wordt gepubliceerd. Een profiel dat is gebaseerd op de open interest van gisteren is verouderd op precies het punt waar de berekening het meest gevoelig is.
Wat een GEX-dashboard niet kan weten
De werkelijke dealer-inventaris wordt niet gepubliceerd. Bedrijven rapporteren posities in geaggregeerde vorm en met vertraging; details op strike-niveau verschijnen nooit in een openbare feed. Een GEX-dashboard modelleert de hedging-vraag op basis van een aanname over het eigendom, en het blijft een model, hoe nauwkeurig de berekening er ook uitziet.
Vier zaken vallen buiten het bereik van wat een op optieketens gebaseerde constructie kan zien:
- wie daadwerkelijk aan elke kant van elke strike staat
- posities die buiten de beursgenoteerde markt zijn geopend
- het hedging-beleid van elke trading desk, inclusief desks die volgens een schema hedgen in plaats van continu
- of een bepaalde print in de open interest voortkomt uit het openen of sluiten van trades
Dat maakt het cijfer niet nutteloos. Het betekent wel dat het cijfer een expliciete aanname bevat, en die aanname hoort naast de grafiek te staan. Dezelfde discipline zien we terug in het werk met greeks op portefeuilleniveau, waarbij beta-weging van de delta van een portefeuille de aanname achter een aggregaat expliciet maakt in plaats van deze te verhullen.
Hoe deze panelen zijn berekend
Elk paneel leest de dagelijkse greeks per contract voor SPY van de meest recente beschikbare sessie, gefilterd op geconvergeerde implied volatility-fits en op contracten waarin is gehandeld. Elke strike wordt gewogen op basis van het contractvolume van die sessie in plaats van de open interest, aangezien deze dataset die niet bevat. Gamma dollars gebruiken de hierboven gegeven formule, met de slotkoers van de onderliggende waarde als spot. Het max pain-paneel laat de greeks volledig weg en gebruikt uitsluitend strikes, zijden en contractaantallen.
Veelgestelde vragen
Wat is GEX in de optiehandel?
GEX, of gamma exposure, is een schatting van de verandering in de vraag naar hedging van opties bij een beweging van één procent in de onderliggende waarde. De berekening vermenigvuldigt de gamma van elk contract met de open interest, de vermenigvuldiger van honderd aandelen en het kwadraat van de spotprijs. Vervolgens worden deze waarden gesommeerd over alle uitoefenprijzen, waarbij een vastgesteld teken wordt gehanteerd voor calls en puts.
Is open interest vereist om GEX te berekenen?
De standaardberekening maakt gebruik van open interest, het aantal nog openstaande posities. Sommige dashboards gebruiken het handelsvolume als open interest niet beschikbaar of vertraagd is; het uitwisselen van deze twee variabelen verandert het niveau van het profiel.
Wat is het zero gamma- of gamma flip-niveau?
Dit is de prijs van de onderliggende waarde waarbij het totale gamma exposure-profiel de nullijn kruist. Een zorgvuldige implementatie herrekent de gamma van elk contract bij elke kandidaat-spotprijs in plaats van te interpoleren op basis van het huidige profiel van de uitoefenprijzen, aangezien gamma verandert naarmate de spotprijs beweegt.
Is een positieve GEX-waarde bullish?
Het teken beschrijft een veronderstelde hedging-houding, geen resultaat, en is volledig afhankelijk van de gekozen conventie over wie de calls en puts aanhoudt. Het omdraaien van die conventie keert het teken om bij identieke data; de waarde beschrijft dus een gemodelleerde positie en geen richting.
Kan ik een GEX-dashboard bouwen zonder betaalde datastroom?
U kunt de berekening bouwen en testen op elke snapshot van een optieketen, inclusief vertraagde of gedeeltelijke data. Voor het genereren van een actueel profiel is doorgaans een datastroom nodig die zowel open interest als de greeks voor de volledige keten bevat, waarvoor de meeste aanbieders sinds augustus tweeduizendzesentwintig kosten in rekening brengen.
Elk paneel hier wordt geleverd met de bijbehorende SQL-code. Open een paneel, wijzig de ticker of het expiratietijdvak en voer de berekening zelf uit op de Strasmore-terminal.