# Gamma & Hedge Scenarios (`options_gamma`)

> Modeled gamma exposure, walls, flip levels and an options regime, with price, time and volatility what-ifs. Dealer hedge ladders depend on an explicit positioning scenario — theoretical sensitivity, not observed dealer orders.

- Category: Options
- MCP tool: `options_gamma`
- REST: `GET /options/gamma/{currency}`
- MCP App: hosts that support MCP Apps render the result as an interactive view
- x402 price: $0.03 per call (USDC on Base)
- HTML: https://www.f1ow.com/docs/tools/options_gamma

## What it does

Crypto options gamma exposure (modeled): gross and dealer-signed GEX in USD per 1% move, by strike and expiry, gamma walls, modeled gamma flip levels, options-derived price levels (call/put OI walls, gamma concentrations, max pain, high-sensitivity zones) and a rule-based options regime (positive/negative modeled gamma, near flip, expiry concentration, elevated/compressed vol), with perp funding/OI/liquidations/order book as a separate evidence block. What-ifs: hedging=true adds theoretical dealer hedge ladders (spot ±0.5–5%, charm 1–24h and through the next expiry, vanna ±1/2/5 vol points); target_price / horizon_hours / iv_change reprice the same frozen contracts (GEX, dealer delta, hedge, flips and walls before vs after). Signed numbers depend on an explicit dealer-positioning scenario; modeled, not observed orders.

## Parameters

| Name | Type | In | Required | Description |
| --- | --- | --- | --- | --- |
| `currency` | string | path | yes | Underlying symbol, e.g. "BTC". |
| `scenario` | string | query | no | Assumed dealer positioning (public OI can't show it). Default calls_long_puts_short: dealers long calls, short puts. One of: `calls_long_puts_short`, `short_all`, `long_all`. |
| `hedging` | boolean | query | no | Add theoretical dealer hedge ladders (price, charm, vanna). Implied by any what-if parameter. |
| `price_change_pct` | number | query | no | Extra custom spot move for the hedge ladder, percent (e.g. -3). |
| `target_price` | number | query | no | What-if: underlying price to reprice at. |
| `horizon_hours` | number | query | no | What-if: hours to advance (0–2160). Contracts expiring in between drop out. |
| `iv_change` | number | query | no | What-if: absolute IV shift in vol points (e.g. -2). |
| `expiry` | string | query | no | What-if/hedging scope: only this expiry ("next", "2026-11-27" or "27NOV26"). Default all. |

## Call it

### cURL

```bash
curl "https://mcp.f1ow.com/v1/options/gamma/BTC" \
  -H "Authorization: Bearer $F1OW_API_KEY"
```

### MCP

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "options_gamma",
    "arguments": {
      "currency": "BTC"
    }
  }
}
```

### TypeScript

```ts
const res = await fetch("https://mcp.f1ow.com/v1/options/gamma/BTC", {
  headers: { Authorization: `Bearer ${process.env.F1OW_API_KEY}` },
});
const data = await res.json(); // the tool's result as JSON, typed in the OpenAPI spec
console.log(data);
```

### Python

```python
import os, requests

res = requests.get(
    "https://mcp.f1ow.com/v1/options/gamma/BTC",
    headers={"Authorization": f"Bearer {os.environ['F1OW_API_KEY']}"},
)
data = res.json()  # the tool's result as JSON, typed in the OpenAPI spec
print(data)
```

### WebSocket

```jsonc
// wss://mcp.f1ow.com/v1/ws — subprotocol "jsonrpc-2.0", Authorization: Bearer <key>
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "options_gamma",
    "arguments": {
      "currency": "BTC"
    }
  }
}

// Or push a fresh result whenever it changes (minimum interval 15 s)
{
  "jsonrpc": "2.0",
  "id": 2,
  "method": "subscriptions/subscribe",
  "params": {
    "name": "options_gamma",
    "arguments": {
      "currency": "BTC"
    },
    "intervalSeconds": 60
  }
}
```

### x402

```bash
# No account: the first call answers 402 with a PAYMENT-REQUIRED challenge;
# an x402 client pays it in USDC on Base and retries.
curl "https://mcp.f1ow.com/x402/v1/options/gamma/BTC"
```

## Sample response

Captured 2026-11-13. The JSON is what REST and WebSocket return and the `structuredContent` of an MCP call (trimmed):

```json
{
  "byExpiry": [
    {
      "expiry": "2026-11-14T08:00:00Z",
      "grossUsd": 5745211.11448767,
      "signedUsd": -4921743.49801488
    },
    {
      "expiry": "2026-11-15T08:00:00Z",
      "grossUsd": 2641721.45862925,
      "signedUsd": -1978051.30666821
    },
    {
      "expiry": "2026-11-16T08:00:00Z",
      "grossUsd": 3250669.77639335,
      "signedUsd": -2266597.2393263
    },
    {
      "expiry": "2026-11-20T08:00:00Z",
      "grossUsd": 34678959.3481711,
      "signedUsd": -23665523.9283983
    },
    {
      "expiry": "2026-11-27T08:00:00Z",
      "grossUsd": 117082596.614853,
      "signedUsd": -93814532.9790289
    },
    {
      "expiry": "2026-12-04T08:00:00Z",
      "grossUsd": 560839.363061613,
      "signedUsd": -244175.714783567
    },
    "… 5 more"
  ],
  "byStrike": [
    {
      "callUsd": -45835.6923099011,
      "grossUsd": 2739790.48112173,
      "putUsd": 2693310.85563195,
      "signedUsd": -2739146.54794185,
      "strike": 50000
    },
    {
      "callUsd": -1266.47873781372,
      "grossUsd": 472872.235777945,
      "putUsd": 470769.691588953,
      "signedUsd": -472036.170326767,
      "strike": 52000
    },
    {
      "callUsd": 716.779449313166,
      "grossUsd": 1242875.68903756,
      "putUsd": 1242158.90958825,
      "signedUsd": -1241442.13013893,
      "strike": 54000
    },
    {
      "callUsd": 26377.2406761568,
      "grossUsd": 3495009.39586134,
      "putUsd": 3468632.15518518,
      "signedUsd": -3442254.91450903,
      "strike": 55000
    },
    {
      "callUsd": 10978.4100110965,
      "grossUsd": 692376.289621929,
      "putUsd": 681397.879610832,
      "signedUsd": -670419.469599736,
      "strike": 56000
    },
    {
      "callUsd": 19075.7688217783,
      "grossUsd": 5124120.80711162,
      "putUsd": 5105045.03828984,
      "signedUsd": -5085969.26946806,
      "strike": 58000
    },
    "… 38 more"
  ],
  "caveat": "Modeled dealer hedging is not observed dealer trading: public open interest does not show who holds what, so every signed number rests on the stated positioning assumption. Options positioning alone does not establish the future direction of the underlying.",
  "crossMarket": {
    "bookImbalancePct": -30.2052668337543,
    "fundingRatePctPerInterval": 0.000163375,
    "liquidations24hUsd": 918621983.506613,
    "perpOpenInterestUsd": 2560109472.4656,
    "priceChange24hPct": -6.79676,
    "source": "perp market merge + order book; separate evidence"
  },
  "dataQuality": {
    "instruments": 1572,
    "linearOnly": false,
    "nearExpiryExcluded": 0,
    "priced": 1045,
    "pricedOiSharePct": 100,
    "unpricedWithOi": 0,
    "warnings": []
  },
  "flip": {
    "crossings": [
      76832.5074174907
    ],
    "gridHigh": 89213.618,
    "gridLow": 48038.102
  },
  "gex": {
    "callUsdPer1Pct": 76420730.1355919,
    "expiring7dSharePct": 5.74947126342374,
    "gammaState": "NEGATIVE MODELED GAMMA",
    "grossUsdPer1Pct": 329834819.687822,
    "putUsdPer1Pct": 252795109.767778,
    "signedAtSpotDown1Pct": -177082689.764935,
    "signedAtSpotUp1Pct": -173438033.900716,
    "signedUsdPer1PctModeled": -176374379.632186,
    "top5StrikeSharePct": 41.6392747844804
  },
  "levels": [
    {
      "basis": "dealers long calls, short puts (customers sell calls, buy puts)",
      "distancePct": 0.545188067588515,
      "kind": "negative modeled gamma",
      "price": 69000,
      "unit": "USD per 1% move (modeled)",
      "value": -20133790.8573949
    },
    {
      "basis": "reported OI",
      "distancePct": 2.00236470624922,
      "kind": "put OI wall",
      "price": 70000,
      "unit": "USD OI notional (all expiries)",
      "value": 772996196.9712
    },
    {
      "basis": "dealers long calls, short puts (customers sell calls, buy puts)",
      "distancePct": 2.00236470624922,
      "kind": "negative modeled gamma",
      "price": 70000,
      "unit": "USD per 1% move (modeled)",
      "value": -35292762.0273651
    },
    {
      "basis": "dealers long calls, short puts (customers sell calls, buy puts)",
      "distancePct": 4.91671798357062,
      "kind": "negative modeled gamma",
      "price": 72000,
      "unit": "USD per 1% move (modeled)",
      "value": -23391347.8962148
    },
    {
      "basis": "minimum aggregate holder payout; not a pinning forecast",
      "distancePct": 5.64530630290098,
      "expiry": "2026-11-16T08:00:00Z",
      "kind": "max pain (theoretical)",
      "price": 72500,
      "unit": "USD OI notional of that expiry",
      "value": 49035235.7458
    },
    {
      "basis": "minimum aggregate holder payout; not a pinning forecast",
      "distancePct": 7.10248294156168,
      "expiry": "2026-11-14T08:00:00Z",
      "kind": "max pain (theoretical)",
      "price": 73500,
      "unit": "USD OI notional of that expiry",
      "value": 160904308.9076
    },
    "… 11 more"
  ],
  "meta": {
    "ageSeconds": 26,
    "observedAt": "2026-11-13T08:05:16Z",
    "provider": "Deribit",
    "underlying": "BTC"
  },
  "model": "Model: Black-76 on each expiry's Deribit forward, r = 0, calendar time; inverse (coin-settled) options hedge the premium-adjusted delta Δ − V/F, linear (USDC) the plain delta; spot moves keep each forward's basis; IV shifts are absolute vol points, sticky strike; open interest frozen as listed.",
  "regime": {
    "evidence": [
      "modeled signed GEX -$176.4M vs gross $329.8M per 1% move (-53% net)",
      "modeled gamma flip(s) at 76833 (+12.0%)",
      "6% of OI notional expires within 7 days",
      "DVOL at the 38th percentile of its year",
      "30d realized vol at the 35th percentile of its history"
    ],
    "labels": [
      "NEGATIVE MODELED GAMMA"
    ],
    "thresholds": [
      "|signed| < 10% of gross → NEAR-NEUTRAL; otherwise the sign of signed GEX",
      "a modeled flip within 1% of spot → NEAR GAMMA FLIP",
      ">= 25% of OI notional expiring within 7 days → HIGH EXPIRY CONCENTRATION",
      "DVOL >= 75th pct → ELEVATED VOL; DVOL and realized <= 25th pct → VOL COMPRESSION"
    ]
  },
  "scenario": {
    "code": "calls_long_puts_short",
    "description": "dealers long calls, short puts (customers sell calls, buy puts)",
    "observed": false
  },
  "scenarios": [
    {
      "flip": {
        "crossings": [
          76832.5074174907
        ],
        "gridHigh": 89213.618,
        "gridLow": 48038.102
      },
      "scenario": "calls_long_puts_short",
      "signedUsdPer1Pct": -176374379.632186
    },
    {
      "flip": {
        "crossings": [],
        "gridHigh": 89213.618,
        "gridLow": 48038.102
      },
      "scenario": "short_all",
      "signedUsdPer1Pct": -329215839.90337
    },
    {
      "flip": {
        "crossings": [],
        "gridHigh": 89213.618,
        "gridLow": 48038.102
      },
      "scenario": "long_all",
      "signedUsdPer1Pct": 329215839.90337
    }
  ],
  "spotUsd": 68625.86,
  "units": {
    "gex": "USD of underlying hedge per 1% move (Γ·OI·S²·1%)"
  },
  "walls": {
    "absolute": [
      {
        "distancePct": 2.00236470624922,
        "grossUsdPer1Pct": 44100531.2800692,
        "relativeStrength": 5.88730330039195,
        "signedUsdPer1Pct": -35292762.0273651,
        "strike": 70000
      },
      {
        "distancePct": 4.91671798357062,
        "grossUsdPer1Pct": 29998973.673253,
        "relativeStrength": 5.75744680486799,
        "signedUsdPer1Pct": -23391347.8962148,
        "strike": 72000
      },
      {
        "distancePct": 16.5741310928562,
        "grossUsdPer1Pct": 21713476.4900203,
        "relativeStrength": 3.95728820300141,
        "signedUsdPer1Pct": 1374766.55961709,
        "strike": 80000
      }
    ],
    "negative": [
      {
        "distancePct": 2.00236470624922,
        "grossUsdPer1Pct": 44100531.2800692,
        "relativeStrength": 5.88730330039195,
        "signedUsdPer1Pct": -35292762.0273651,
        "strike": 70000
      },
      {
        "distancePct": 4.91671798357062,
        "grossUsdPer1Pct": 29998973.673253,
        "relativeStrength": 5.75744680486799,
        "signedUsdPer1Pct": -23391347.8962148,
        "strike": 72000
      },
      {
        "distancePct": 0.545188067588515,
        "grossUsdPer1Pct": 20356797.9951389,
        "relativeStrength": 1.28259549709592,
        "signedUsdPer1Pct": -20133790.8573949,
        "strike": 69000
      }
    ],
    "positive": [
      {
        "distancePct": 28.2315442021419,
        "grossUsdPer1Pct": 3613217.33563622,
        "relativeStrength": 1.63803296670264,
        "signedUsdPer1Pct": 2744083.52955642,
        "strike": 88000
      },
      {
        "distancePct": 31.1458974794633,
        "grossUsdPer1Pct": 4540620.51693711,
        "relativeStrength": 3.54479995285406,
        "signedUsdPer1Pct": 2449205.93722321,
        "strike": 90000
      },
      {
        "distancePct": 25.3171909248205,
        "grossUsdPer1Pct": 3611861.15721698,
        "relativeStrength": 1.0197940319368,
        "signedUsdPer1Pct": 2128985.76635552,
        "strike": 86000
      }
    ]
  },
  "generatedAt": "2026-11-13T08:05:16Z"
}
```

Over MCP the text report a model reads comes with it:

```text
=== BTC options gamma (modeled) — Deribit ===
Observed 2026-11-13T08:05:16Z (26s ago) | spot index $68625.86
Model: Black-76 on each expiry's Deribit forward, r = 0, calendar time; inverse (coin-settled) options hedge the premium-adjusted delta Δ − V/F, linear (USDC) the plain delta; spot moves keep each forward's basis; IV shifts are absolute vol points, sticky strike; open interest frozen as listed.
Dealer positioning assumed: dealers long calls, short puts (customers sell calls, buy puts) (calls_long_puts_short). Not observed.

GEX, USD of hedge per 1% move: gross $329.8M | calls $76.4M | puts $252.8M (long-option magnitudes, no positioning assumption)
Modeled signed GEX -$176.4M/1% → NEGATIVE MODELED GAMMA | repriced at spot −1%: -$177.1M/1%, +1%: -$173.4M/1%
Concentration: top 5 strikes hold 42% of gross; 6% of OI notional expires within 7 days
Gamma flip (modeled, spot repriced over ±30%): $76832.51 (+12.0%)
Other scenarios: short_all signed -$329.2M/1%, flip none between $48038.10 and $89213.62 | long_all signed +$329.2M/1%, flip none between $48038.10 and $89213.62

Gamma walls (modeled; exposure values, not support/resistance):
  + $88000.00 (+28.2%) signed +$2.7M/1%, gross $3.6M, 1.6x neighbours
  + $90000.00 (+31.1%) signed +$2.4M/1%, gross $4.5M, 3.5x neighbours
  + $86000.00 (+25.3%) signed +$2.1M/1%, gross $3.6M, 1.0x neighbours
  − $70000.00 (+2.0%) signed -$35.3M/1%, gross $44.1M, 5.9x neighbours
  − $72000.00 (+4.9%) signed -$23.4M/1%, gross $30.0M, 5.8x neighbours
  − $69000.00 (+0.5%) signed -$20.1M/1%, gross $20.4M, 1.3x neighbours
  largest absolute: $70000.00 $44.1M, $72000.00 $30.0M, $80000.00 $21.7M
By expiry (gross / modeled signed, per 1%):
  20 Nov 2026  $34.7M / -$23.7M/1%
  27 Nov 2026  $117.1M / -$93.8M/1%
  25 Dec 2026  $113.1M / -$33.8M/1%
  29 Jan 2027  $8.2M / -$3.0M/1%
  26 Mar 2027  $31.3M / -$8.8M/1%
  25 Jun 2027  $9.2M / -$2.2M/1%

Options levels (nearest first; reference points, not guaranteed support or resistance):
  $69000.00 (+0.5%) negative modeled gamma: -$20.1M USD per 1% move (modeled)
  $70000.00 (+2.0%) put OI wall: $773.0M USD OI notional (all expiries)
  $70000.00 (+2.0%) negative modeled gamma: -$35.3M USD per 1% move (modeled)
  $72000.00 (+4.9%) negative modeled gamma: -$23.4M USD per 1% move (modeled)
  $72500.00 (+5.6%) max pain (theoretical): $49.0M USD OI notional of that expiry, expiry 16 Nov 2026
  $73500.00 (+7.1%) max pain (theoretical): $160.9M USD OI notional of that expiry, expiry 14 Nov 2026
  $73500.00 (+7.1%) max pain (theoretical): $76.7M USD OI notional of that expiry, expiry 15 Nov 2026
  $74287.49 (+8.3%) high gamma sensitivity (modeled): $20.1M per 1% move: change in signed GEX per 1% move of spot
  $76832.51 (+12.0%) gamma flip (modeled)
  $60000.00 (-12.6%) put OI wall: $887.5M USD OI notional (all expiries)
  $80000.00 (+16.6%) call OI wall: $873.0M USD OI notional (all expiries)
  $86000.00 (+25.3%) positive modeled gamma: +$2.1M USD per 1% move (modeled)
  $88000.00 (+28.2%) positive modeled gamma: +$2.7M USD per 1% move (modeled)
  $90000.00 (+31.1%) call OI wall: $859.1M USD OI notional (all expiries)
  $90000.00 (+31.1%) positive modeled gamma: +$2.4M USD per 1% move (modeled)

Options regime: NEGATIVE MODELED GAMMA
  evidence: modeled signed GEX -$176.4M vs gross $329.8M per 1% move (-53% net)
  evidence: modeled gamma flip(s) at 76833 (+12.0%)
  evidence: 6% of OI notional expires within 7 days
  evidence: DVOL at the 38th percentile of its year
  evidence: 30d realized vol at the 35th percentile of its history
  rule: |signed| < 10% of gross → NEAR-NEUTRAL; otherwise the sign of signed GEX
  rule: a modeled flip within 1% of spot → NEAR GAMMA FLIP
  rule: >= 25% of OI notional expiring within 7 days → HIGH EXPIRY CONCENTRATION
  rule: DVOL >= 75th pct → ELEVATED VOL; DVOL and realized <= 25th pct → VOL COMPRESSION
  Positive modeled gamma does not guarantee range-bound trading, nor negative gamma a trend.

Stored snapshot 24h ago: none yet (hourly, in memory since server start; never reconstructed).

Cross-market (perp data; separate evidence, not used in the options labels):
  perp funding +0.0002% per funding interval (market merge; funding_current gives the per-hour rate) | perp OI $2.56B | 24h price -6.80% | 24h liquidations $918.6M
  order book (Hyperliquid): imbalance -30.2%, spread 0.1 bps

Data quality: 1572 listed instruments; 1045 priced (100% of live OI has mark IV and forward), 0 with OI unpriced; 0 within 1h of expiry left out of gamma; observed 2026-11-13T08:05:16Z
Modeled dealer hedging is not observed dealer trading: public open interest does not show who holds what, so every signed number rests on the stated positioning assumption. Options positioning alone does not establish the future direction of the underlying.
```

## Related tools

- [Options Chain](https://www.f1ow.com/docs/tools/options_chain) — Calls and puts by strike and expiry: quotes, mark implied volatility, open interest and volume. Reported data is separated from calculated metrics, with coverage and thin-market caveats.
- [Implied Volatility](https://www.f1ow.com/docs/tools/options_volatility) — ATM volatility, term structure, implied move size, 25-delta skew and IV versus realized volatility. BTC/ETH volatility-index history adds context. What options price for the size of a move — not its direction.
- [Options Positioning](https://www.f1ow.com/docs/tools/options_positioning) — Put/call open interest, strike and expiry concentrations, expiring notional, theoretical max pain and recent option trades. One venue; aggregate open interest does not reveal who is long or short, and max pain is not a forecast.
- [Options-Implied Odds](https://www.f1ow.com/docs/tools/options_probability) — Risk-neutral expiry probabilities above or below a price or inside a range, plus implied 68% and 90% ranges. Derived from options forwards and volatility, with smile adjustment where quoted — not calibrated real-world forecasts.
