How we compute the numbers

Last updated 2026-10-25

This page documents where Obelion Terminal's options data comes from and the exact formulas behind every gamma, delta and positioning figure we show. It is written from the code that produces those figures. Everything here is for education only and is not financial advice; see the disclaimer.

Data sources and delay

Obelion builds every options metric from the full options chain of the underlying: strike, expiration, open interest, implied volatility, bid, ask, volume and, when the feed supplies them, gamma and delta. The default source is CBOE's public delayed-quote feed. If it fails validation, the server falls back to Polygon and then Yahoo Finance.

OrderSourceGreeksNotes
1CBOE delayed quotesGamma, delta from the feedDefault. Delayed, not real time. Free and shared by all users.
2Polygon (Massive)Gamma, delta from the feedFallback only when a server-side key is configured.
3Yahoo FinanceNoneLast resort. Gamma and delta are computed with Black-Scholes from each contract's IV. Only the 12 nearest expirations are fetched.

Signed-in users can also choose Polygon or Tradier with their own API key; those requests use the provider's data directly and refresh every 60 seconds. A user's own key is never used to cover an outage of the default source.

Validation

A chain from any source is rejected, and the next source is tried, when:

  • the underlying price is missing, zero or not a number;
  • fewer than 20 contracts carry open interest;
  • there are no strikes on one side of the current price (the walls and the flip need both sides);
  • more than half of the contracts with open interest have neither a gamma nor an implied volatility.

Expirations more than 180 days out are dropped. Each fallback is logged and alerted internally so we know when figures are coming from a degraded source.

Gamma exposure (GEX)

Gamma exposure (GEX) estimates how much stock, in dollars, options dealers must buy or sell to stay hedged for each 1% move in the underlying. Obelion computes it per strike from open interest and gamma, counting calls as positive and puts as negative, and reports totals in billions of dollars per 1% move.

GEX(strike) = Σ calls  Γ × OI × 100 × S² × 0.01
            − Σ puts   Γ × OI × 100 × S² × 0.01

Γ   gamma of the contract     OI  open interest
100 shares per contract       S   current underlying price
0.01 scales to a 1% move      result divided by 1e9 for display ($B)

Sign convention

We use the standard dealer-positioning assumption: customers are net sellers of calls and net buyers of puts, so dealers are long call gamma and short put gamma. Call contributions are positive and put contributions negative. Open interest does not reveal who actually holds each side, so this is an assumption, not an observation (see limitations).

Where gamma comes from

When the feed supplies a positive gamma, we use it. Otherwise gamma is computed with Black-Scholes from the contract's implied volatility (20% if the contract has none), a 5% risk-free rate and no dividend yield. Time to expiry is measured to the expiration close, with a floor of 0.0001 years so same-day contracts do not divide by zero.

Γ = φ(d1) / (S × σ × √T)
d1 = [ ln(S/K) + (r + σ²/2) × T ] / (σ × √T)

Per-strike bars and the call, put and net totals cover strikes within ±20% of the current price. Totals are summed at full precision before rounding.

Gamma flip

The gamma flip, or zero-gamma level, is the underlying price at which total dealer gamma exposure changes sign. Above it, total GEX is positive and dealer hedging tends to dampen moves. Below it, GEX is negative and hedging tends to amplify them. Obelion solves for it numerically rather than reading it off a strike.

  1. Take 60 evenly spaced hypothetical prices from 12% below to 12% above the current price.
  2. At each price, recompute Black-Scholes gamma for every contract using that contract's own implied volatility, and sum total GEX across all strikes (not only the ±20% display window).
  3. Find every adjacent pair of prices where total GEX changes sign and interpolate linearly to zero.
  4. Report the crossing closest to the current price, rounded to the cent.

If total GEX does not change sign anywhere in the ±12% window, no flip is shown. Reading the flip off the per-strike chart instead gives wrong answers, because a strike's GEX at today's price says nothing about where the total changes sign as price moves.

Call and put walls

The call wall is the strike at or above the current price with the largest call gamma exposure. The put wall is the strike at or below the current price with the largest put gamma exposure. Together they mark where dealer hedging is most concentrated on each side of spot, often acting as resistance and support.

LevelRule
Call wall (GEX)Strike ≥ spot with the highest call GEX
Put wall (GEX)Strike ≤ spot with the most negative put GEX
Call wall (OI)Strike with the most call open interest, either side of spot
Put wall (OI)Strike with the most put open interest, either side of spot

The GEX walls are constrained to their side of spot because a call strike already below price cannot cap a rally that has passed it. If no strike on that side carries gamma, no wall is shown rather than an arbitrary one. The open interest view shows the plain OI maxima without that constraint.

Delta exposure (DEX)

Delta exposure (DEX) is the net dollar delta of all open options at a strike: delta times open interest times 100 shares times the underlying price. Calls add positive delta and puts add negative delta. Unlike GEX, Obelion does not flip the sign for dealer positioning, so DEX reads as the market's net directional exposure.

DEX(strike) = Σ (calls and puts)  Δ × OI × 100 × S

call Δ = N(d1)        put Δ = N(d1) − 1

Delta comes from the feed when it is supplied, otherwise from Black-Scholes with the same inputs as gamma. Call DEX is always zero or positive and put DEX zero or negative.

Delta flip

The delta flip, or zero-delta level, is the underlying price at which total options delta exposure crosses zero. Below it, open interest is net short delta; above it, net long. Obelion finds it with the same price sweep used for the gamma flip, recomputing every contract's delta at each hypothetical price.

Total delta rises steadily with price (call deltas move toward 1, put deltas toward 0), so at most one crossing is expected in the ±12% window. If there is none, no delta flip is shown.

Vanna and charm

Vanna is the rate at which an option's delta changes when implied volatility changes. Vanna exposure estimates how many dollars of delta dealers gain or lose for each one point move in implied volatility, so it shows where volatility changes, not price changes, can force hedging flows. Obelion uses the dealer sign convention for vanna.

vanna = −φ(d1) × d2 / σ            (d2 = d1 − σ√T)
vanna exposure = ± vanna × OI × 100 × S × 0.01   (calls +, puts −)

charm = −φ(d1) × (2rT − d2σ√T) / (2T × σ√T)
charm exposure = ± charm × OI × 100 × S / 365   (per day)

Vanna and charm are always computed with Black-Scholes from each contract's implied volatility, since the feeds do not supply them. Charm is the change in delta as time passes, shown per calendar day.

Open interest

Open interest (OI) is the number of option contracts outstanding at a strike and expiration that have not been closed, exercised or expired. It is a stock of positions, updated once a day by the Options Clearing Corporation, unlike volume, which counts contracts traded during the current session.

FigureDefinition
Call OI / Put OISum of open interest per strike, across the selected expirations
Net OICall OI − Put OI
Total call / put OISum across strikes within ±20% of spot

Because OI only changes overnight, every OI-weighted figure on this page (GEX, DEX, vanna, max pain) reflects positions as of the prior close, revalued at the current price.

Max pain

Max pain is the strike price at which the options expiring on a given date would pay out the least total value to their holders. It is found by pricing every call and put at its intrinsic value for each candidate settlement price, weighting by open interest, and choosing the strike with the smallest total.

payout(P) = Σ calls  OI × 100 × max(0, P − K)
          + Σ puts   OI × 100 × max(0, K − P)

max pain = the listed strike P with the smallest payout(P)

Max pain is computed per expiration, because contracts that expire on different dates settle at different prices. It describes where option holders collectively lose the most, not where price will go, and its pull is usually discussed only close to expiration.

Put/call ratio

The put/call ratio compares put activity to call activity. The volume ratio divides total put volume by total call volume for the session; the open interest ratio divides total put open interest by total call open interest. A ratio above 1 means more puts than calls; below 1, more calls than puts.

P/C volume = Σ put volume ÷ Σ call volume     (current session)
P/C OI     = Σ put OI ÷ Σ call OI             (strikes within ±20% of spot)

The volume ratio reacts within the day; the OI ratio moves only overnight. When there are no calls the ratio is undefined and shown as a dash.

Implied volatility

Implied volatility (IV) is the annualized volatility that, plugged into an option pricing model, reproduces an option's market price. It is the market's estimate of how much the underlying may move before expiration, not which direction. Obelion reads IV per contract from the data feed and uses it wherever a greek must be computed.

IV is quoted as an annual decimal (0.25 means 25%). It is used as the volatility input for every Black-Scholes calculation on this page: fallback gamma and delta, the flip sweeps, vanna and charm. A contract with no IV falls back to 20%, and a chain where most contracts lack both IV and gamma is rejected (see validation).

Expected move

The expected move is the price range the options market implies for the underlying over a period, at one standard deviation. It is the current price times implied volatility times the square root of days to expiration divided by 365. Under the model's assumptions, price finishes inside that range about 68% of the time.

1 sd move = S × IV × √(days / 365)

Example: S = 500, IV = 0.20, 7 days
500 × 0.20 × √(7/365) ≈ 13.85   →   range ≈ 486.15 to 513.85

The earnings calendar uses the other common estimate: the at-the-money straddle, meaning the call plus put last price at the strike nearest spot, for the first expiration on or after the report date. The straddle includes any event premium priced into that one expiration.

Refresh cadence and caching

Obelion caches each ticker's options chain on the server, so one upstream fetch serves every user viewing that ticker. With the default CBOE source, data refreshes every 15 minutes during regular trading hours and every 4 hours after the close. Charts read from that shared cache rather than polling the source directly.

SourceMarket openMarket closed
CBOE (default) and fallbacks15 minutes4 hours
Polygon / Tradier on your own key60 seconds60 seconds

Regular hours are 9:30 AM to 4:00 PM ET, Monday to Friday. Because the CBOE feed is itself delayed and then cached, a figure can be older than 15 minutes.

Known limitations

Every number on this page is a model estimate built from public data, not an observation of real dealer books. Open interest does not reveal who is long or short, the feed is delayed, and Black-Scholes assumptions simplify real pricing. Use these figures as context for your own analysis, not as trading signals.

  • Positioning is assumed. The dealer sign convention fails when customers are net long calls sold by other customers, or net short puts.
  • OI is a day old. Positions opened or closed today are not in the open interest until the next morning.
  • Model inputs are simplified. A fixed 5% rate, no dividends and European exercise are assumed wherever a greek is computed rather than taken from the feed.
  • Yahoo fallback is approximate. With no feed greeks and only 12 expirations, levels can differ from the CBOE-based figures until CBOE recovers.
  • Windows are finite. Bars and totals cover ±20% of spot, flips are searched within ±12%, and expirations beyond 180 days are excluded.
  • Market hours ignore holidays. The open/closed check uses the weekday schedule, so on an exchange holiday the cache runs on the market-open cadence.

Learn the concepts in the GEX course and the options course. Questions or a suspected error: contact support.

Methodology: How Obelion Computes GEX, Max Pain and Options Data | Obelion Terminal