Dealer Hedge Flow API
Die Dealer Hedge Flow API zeigt, wie Options-Dealer in Deribit-BTC-Optionen positioniert sind und was ihr Hedging bei einer Kursbewegung bewirken würde: für jedes Preisniveau, für wie viele US-Dollar Dealer auf dem Weg dorthin BTC kaufen oder verkaufen würden, um delta-gehedgt zu bleiben, und ob dieser Flow die Bewegung verstärkt oder dämpft. Außerdem liefert sie das Netto-GEX (Gamma-Exposure), das Zero-Gamma-Niveau und einige Legacy-Optionskennzahlen. Jede Stunde wird ein neuer Snapshot berechnet.
Wie die Dealer-Positionen rekonstruiert werden, die Formeln und die Annahmen: Methodik des Dealer Hedge Flow.
Der Dealer Hedge Flow ist ein deskriptives Modell der Dealer-Positionierung, kein Kursziel und kein Handelssignal.
Endpoints
| Methode | Pfad | Beschreibung |
|---|---|---|
GET | /v1/options/gex | Tägliche Zeitreihe: eine Zeile pro Tag (der Snapshot um 00:00 UTC) |
GET | /v1/options/gex/hourly | Jeder stündliche Snapshot (Pro) |
GET | /v1/options/gex/profile | Hedge-Flow nach Preis für einen Snapshot (Standard: der neueste) |
GET | /v1/options/gex/heatmap | Matrix Zeit × Preis des Impacts für eine Heatmap |
Basis-URL: https://api.blocklens.co. Alle Antworten sind JSON im Format {"success": true, "data": …}: Bei den
Zeitreihen ist data eine Liste von Zeilen (daneben stehen count, access und message), bei /profile und /heatmap
ein Objekt, das access enthält. Fehler verwenden {"success": false, "message": {…}, "timestamp": "…"}
(siehe Fehler).
Authentifizierung
Alle Anfragen erfordern einen API-Schlüssel:
Authorization: Bearer YOUR_API_KEY
Siehe Authentifizierung zu API-Schlüsseln und Rate Limits & Tarife dazu, welche Tarife API-Zugriff enthalten und welche Anfragelimits gelten.
Vorzeichen und Einheiten
- Alle Beträge sind in USD. GEX-Werte (
net_gex,gex[],strikes[].call_gex/put_gex) sind USD je 1 % Bewegung; Hedge-Flow und Impact sind USD für die gesamte Bewegung vom aktuellen Preis bis zum Niveau. hedge_flow> 0 — Dealer kaufen auf dem Weg zum Niveau BTC; < 0 — sie verkaufen.impact=hedge_flow× sign(Niveau − Spot): > 0 — Verstärkung (der Flow treibt die Bewegung weiter), < 0 — Dämpfung (er stemmt sich gegen die Bewegung).net_gex> 0 — Dealer sind netto Long Gamma (dämpfendes Regime); < 0 — netto Short Gamma (verstärkendes Regime).spotist der BTC-Indexpreis des Snapshots; die Niveaus liegen auf einem absoluten $500-Raster innerhalb von ±30 % davon.zero_gammawird innerhalb von ±50 % umspotgesucht und kann daher außerhalb des Niveaurasters liegen;null, wenn die GEX-Kurve dort ein Vorzeichen beibehält.
Tarife und Historie
Die Tarifregeln erzwingt die API selbst, nicht erst die Lab-Oberfläche:
| Free | Pro, Enterprise | |
|---|---|---|
/v1/options/gex (täglich) | die letzten 30 Tage | vollständige Historie seit 2026-03-16 |
/v1/options/gex/hourly | — (403) | ja |
/v1/options/gex/profile | nur der neueste Snapshot, ohne strikes | jeder Snapshot, mit strikes |
/v1/options/gex/heatmap | resolution=1d, die letzten 30 Tage | 1h, 6h, 1d, vollständige Historie |
Jede Antwort enthält einen access-Block:
"access": {"tier": "free", "grade": 0, "full_history": false, "history_from": "2026-09-24",
"resolutions": ["1d"], "profile_history": false, "strikes": false, "hourly": false,
"required_grade": 1, "clipped": false}
history_from— der erste Tag, den der Aufrufer sehen darf (nullbei voller Historie).resolutions,profile_history,strikes,hourly— was der Tarif des Aufrufers erlaubt.clipped—true, wenn bei der täglichen Zeitreihe oder der Heatmap Tage vorhistory_fromangefragt und abgeschnitten wurden. Diese beiden Endpoints liefern aus diesem Grund nie 403, sondern geben den erlaubten Teil zurück.- Ein vergangener Snapshot von
/profile(alles außer dem neuesten),/hourlysowie eine6h- /1h-Heatmap liefern im Free-Tarif 403 (siehe Fehler).
Snapshots und Zeit
- Ein Snapshot des Deribit-BTC-Options-Boards pro Stunde, wenige Sekunden nach der vollen Stunde. Die Historie beginnt am 2026-03-16; 2026-06-08 … 2026-07-07 fehlt (Ausfall der Datenerfassung), und einzelne Stunden werden übersprungen, wenn das Board unvollständig war. Die Daten werden stündlich gegen :20 UTC aktualisiert.
- Zeitangaben sind UTC, ISO 8601. Snapshot-Zeitpunkte enthalten Mikrosekunden, sofern der Snapshot sie hat
(
"2026-10-24T09:00:02.418731Z"): Übergeben Sie einen Wert austs/times[]unverändert an/profile?ts=, dann wählt er genau diesen Snapshot aus. Eintsohne Sekundenbruchteile trifft jeden Snapshot innerhalb dieser Sekunde. - Ein Tag (die tägliche Zeitreihe,
/profile?date=, die1d-Heatmap) ist der Snapshot um 00:00 UTC dieses Tages — bzw. der erste Snapshot des Tages, falls 00:00 fehlt. Er liegt mit Abstand zum täglichen Verfall um 08:00 UTC, daher ändert sich die Zeile eines Tages nicht mehr, sobald sie erschienen ist.
GET /v1/options/gex
Tägliche Zeitreihe, neueste zuerst.
| Parameter | Standard | Beschreibung |
|---|---|---|
from_date | erster erlaubter Tag | YYYY-MM-DD (UTC); früher als das Tariffenster → abgeschnitten, access.clipped = true |
to_date | neuester Tag | YYYY-MM-DD (UTC, einschließlich) |
limit | 100 | Anzahl der Tage (1–10.000), neueste zuerst |
fields | alle | Kommagetrennte Feldnamen (date bleibt immer erhalten) |
curl -H "Authorization: Bearer YOUR_API_KEY" \
"https://api.blocklens.co/v1/options/gex?from_date=2026-10-01&fields=btc_price,net_gex,zero_gamma,flow_up5,flow_dn5"
{
"success": true,
"data": [
{"date": "2026-10-23", "snapshot_ts": "2026-10-23T00:00:02Z", "btc_price": 80712.4,
"legacy_total_gex": 30112000.0, "legacy_call_gex": 41870000.0, "legacy_put_gex": -11758000.0,
"top_support_strike": 80000.0, "top_support_gex": 9120000.0,
"top_resist_strike": 76000.0, "top_resist_gex": -3410000.0, "legacy_flip_point": 80551.2,
"pc_ratio_oi": 0.62, "pc_ratio_vol_24h": 0.81, "max_pain": 82000.0, "max_pain_expiry": "24OCT26",
"hedge_snapshot_ts": "2026-10-23T00:00:02Z", "spot": 80712.4, "net_gex": 35700000.0, "zero_gamma": 59300.0,
"flow_up5": -219000000.0, "flow_dn5": 288000000.0, "flow_up10": -402000000.0, "flow_dn10": 515000000.0}
],
"count": 1,
"access": {"tier": "pro", "grade": 1, "full_history": true, "history_from": null, "resolutions": ["1h", "6h", "1d"],
"profile_history": true, "strikes": true, "hourly": true, "required_grade": 1, "clipped": false},
"message": "Options GEX and dealer hedge flow, daily (Deribit BTC)"
}
| Feld | Bedeutung |
|---|---|
date | UTC-Tag |
hedge_snapshot_ts, spot | Der Snapshot des Tages, der für die Hedge-Flow-Felder verwendet wird, und sein BTC-Indexpreis |
net_gex | Netto-Dealer-GEX bei spot, Black-Scholes, USD je 1 % Bewegung — das veröffentlichte Netto-GEX |
zero_gamma | Der spot nächstgelegene Vorzeichenwechsel der neu berechneten GEX-Kurve (±50 %); null, falls keiner vorhanden |
flow_up5, flow_dn5, flow_up10, flow_dn10 | Hedge-Flow in USD bei einer Kursbewegung um +5 % / −5 % / +10 % / −10 % ab spot, exakt bei spot × 1.05 / 0.95 / 1.10 / 0.90 |
snapshot_ts, btc_price | Der Snapshot der Legacy-Felder und sein BTC-Kurs |
top_support_strike, top_support_gex | Der Strike mit dem größten positiven GEX (Deribit-Gamma; Strikes mit |GEX| unter $1,000 werden ausgelassen) |
top_resist_strike, top_resist_gex | Der Strike mit dem am stärksten negativen GEX (gleiche Regeln) |
pc_ratio_oi, pc_ratio_vol_24h | Put/Call-Ratio nach Open Interest und nach 24-Stunden-Volumen |
max_pain, max_pain_expiry | Max-Pain-Strike des nächstgelegenen Verfalls und dieser Verfall |
legacy_total_gex, legacy_call_gex, legacy_put_gex | GEX auf Basis des von Deribit veröffentlichten Gammas (auf 1e-5 gerundet — gegenüber Black-Scholes verzerrt); verwenden Sie net_gex |
legacy_flip_point | Vorzeichenwechsel des Strike-GEX zwischen den beiden Strikes um den Preis — kein Gamma-Flip; verwenden Sie zero_gamma |
Die täglichen Spalten net_gex, zero_gamma, flow_* und top_*_strike sind außerdem Katalogmetriken (options_*, Kategorie
options), verfügbar über /v1/metrics und das MCP-Tool get_metric.
GET /v1/options/gex/hourly
Jeder stündliche Snapshot, neueste zuerst (Pro). Dieselben Felder wie in der täglichen Zeitreihe, jedoch mit timestamp (dem
Snapshot-Zeitpunkt) statt date als Schlüssel; die Legacy- und die Hedge-Flow-Werte desselben Snapshots stehen in einer Zeile.
| Parameter | Standard | Beschreibung |
|---|---|---|
from_date, to_date | — | YYYY-MM-DD (UTC, to_date einschließlich) |
limit | 168 | Anzahl der Snapshots (1–10.000); der Standard entspricht einer Woche |
fields | alle | Kommagetrennte Feldnamen (timestamp bleibt immer erhalten) |
curl -H "Authorization: Bearer YOUR_API_KEY" \
"https://api.blocklens.co/v1/options/gex/hourly?limit=24&fields=spot,net_gex,zero_gamma"
GET /v1/options/gex/profile
Hedge-Flow nach Preis für einen Snapshot.
| Parameter | Standard | Beschreibung |
|---|---|---|
ts | neuester | Snapshot-Zeitpunkt (ISO 8601, UTC ohne Offset): der neueste Snapshot zu diesem Zeitpunkt oder davor. Nicht zusammen mit date |
date | — | YYYY-MM-DD (UTC): der Snapshot um 00:00 UTC dieses Tages (der erste des Tages). Nicht zusammen mit ts |
Free-Aufrufer erhalten nur den neuesten Snapshot: Lassen Sie ts / date weg (ein ts / date, das auf den neuesten
Snapshot verweist, wird ebenfalls akzeptiert).
curl -H "Authorization: Bearer YOUR_API_KEY" https://api.blocklens.co/v1/options/gex/profile
{
"success": true,
"data": {
"ts": "2026-10-24T09:00:02Z", "spot": 80712.4, "step": 500.0,
"levels": [80000.0, 80500.0, 81000.0, 81500.0],
"hedge_flow": [21400000.0, 4900000.0, -6800000.0, -27300000.0],
"impact": [-21400000.0, -4900000.0, -6800000.0, -27300000.0],
"gex": [36900000.0, 35900000.0, 35200000.0, 34100000.0],
"net_gex": 35700000.0, "zero_gamma": 59300.0, "flips": [59300.0],
"flow": {"up5": -219000000.0, "dn5": 288000000.0, "up10": -402000000.0, "dn10": 515000000.0},
"max_amplify_level": null, "max_dampen_level": 74000.0, "method_version": 1,
"legacy": {"flip_point": 80551.2, "top_support_strike": 80000.0, "top_resist_strike": 76000.0,
"total_gex": 30112000.0},
"strikes": [{"strike": 80000.0, "call_gex": 6200000.0, "put_gex": 2920000.0}],
"access": {"tier": "pro", "grade": 1, "full_history": true, "history_from": null, "resolutions": ["1h", "6h", "1d"],
"profile_history": true, "strikes": true, "hourly": true, "required_grade": 1, "clipped": false}
}
}
Das Beispiel ist gekürzt: Ein echtes Profil hat etwa hundert Niveaus.
| Feld | Bedeutung |
|---|---|
ts, spot | Snapshot-Zeitpunkt und BTC-Indexpreis |
step, levels | Rasterweite ($500) und die Preisniveaus, aufsteigend, innerhalb von ±30 % um spot |
hedge_flow[i] | USD, die Dealer handeln, wenn sich der Preis von spot auf levels[i] bewegt (> 0 Kauf, < 0 Verkauf) |
impact[i] | hedge_flow[i], mit dem Vorzeichen der Bewegungsrichtung versehen (> 0 Verstärkung, < 0 Dämpfung) |
gex[i] | Netto-Dealer-GEX, neu berechnet, als läge der Preis bei levels[i], USD je 1 % |
net_gex | GEX bei spot |
zero_gamma, flips | Der spot nächstgelegene Vorzeichenwechsel der GEX-Kurve und alle Vorzeichenwechsel, aufsteigend, innerhalb von ±50 % um spot (null / [], falls keine vorhanden) |
flow | Hedge-Flow exakt bei spot × 1.05 / 0.95 / 1.10 / 0.90 (up5, dn5, up10, dn10) |
max_amplify_level, max_dampen_level | Das $500-Band mit dem größten verstärkenden / dämpfenden marginalen Flow (null, falls keines vorhanden) |
method_version | Version der Berechnungsmethode |
legacy | Legacy-Werte desselben Snapshots (Deribit-Gamma): flip_point, top_support_strike, top_resist_strike, total_gex |
strikes | Netto-GEX nach Strikes, Calls und Puts getrennt, summiert über alle Verfälle (Pro; null im Free-Tarif) |
hedge_flow ist entlang des Preispfads kumulativ: Für ein Band zwischen zwei Niveaus bilden Sie die Differenz, niemals die
Summe mehrerer Niveaus.
GET /v1/options/gex/heatmap
| Parameter | Standard | Beschreibung |
|---|---|---|
resolution | 1d | 1d, 6h oder 1h (Pro): ein Snapshot je Bucket — jeweils der erste (1d = der Snapshot um 00:00 UTC) |
from | 1d: die gesamte Historie; 6h: die letzten 180 Tage; 1h: die letzten 30 Tage | ISO-Datum oder Datum mit Uhrzeit (UTC). Früher als das Tariffenster → abgeschnitten, access.clipped = true |
to | jetzt | ISO-Datum (einschließlich) oder Datum mit Uhrzeit (ausschließlich) |
price_min, price_max | alle Niveaus | Begrenzen den Preisbereich, USD (endlich, ≥ 0, price_min < price_max) |
from / to werden nach außen auf ganze Buckets von resolution erweitert.
curl -H "Authorization: Bearer YOUR_API_KEY" \
"https://api.blocklens.co/v1/options/gex/heatmap?resolution=6h&from=2026-09-01"
{
"success": true,
"data": {
"resolution": "1d", "times": ["2026-10-22T00:00:01Z", "2026-10-23T00:00:02Z"], "step": 500.0,
"levels": [80000.0, 80500.0, 81000.0],
"matrix": [[-18200000, null, -5100000], [-21400000, -4900000, -6800000]],
"overlays": {"price": [80310.0, 80712.4], "zero_gamma": [null, 59300.0]},
"scale": {"p98": 310000000, "max": 612000000},
"access": {"tier": "pro", "grade": 1, "full_history": true, "history_from": null, "resolutions": ["1h", "6h", "1d"],
"profile_history": true, "strikes": true, "hourly": true, "required_grade": 1, "clipped": false}
}
}
matrix[t][l]— der Impact in ganzen USD beilevels[l]für den Snapshottimes[t](> 0 Verstärkung, < 0 Dämpfung).nullaußerhalb des eigenen ±30-%-Bereichs dieses Snapshots oder in einer Lücke seines Rasters.timessind die tatsächlichen Snapshot-Zeitpunkte, aufsteigend; um Datenlücken herum sind die Abstände unregelmäßig (keine leeren Zeilen).levels— ein gemeinsames $500-Raster, das jeden zurückgegebenen Snapshot abdeckt.overlays.price—spotjeder Zeile;overlays.zero_gamma— ihr Zero-Gamma-Niveau (null, wo keines vorhanden ist). Das Zero-Gamma-Niveau kann außerhalb vonlevelsliegen: Schneiden Sie die Linie beim Zeichnen ab.scale— das 98. Perzentil und das Maximum von |impact|; kappen Sie eine Farbskala beip98.
Limits und Antwortgröße
resolution=1humfasst höchstens 90 Tage pro Anfrage (sonst 400 — verwenden Sie für längere Zeiträume6hoder1d).- Eine Heatmap-Anfrage darf höchstens 2.000.000 Zellen (Snapshots × Niveaus) umfassen; größere Anfragen liefern 400 —
verwenden Sie eine gröbere Auflösung, einen kürzeren Zeitraum oder
price_min/price_max. - Die vollständige stündliche Historie umfasst etwa 10 MB unkomprimiertes JSON. Antworten werden bei der Übertragung
gzip-komprimiert. Verwenden Sie für die erste Ansicht
1doder6hoder ein kurzes1h-Fenster. - Anfragelimits pro API-Schlüssel: Rate Limits & Tarife.
Aktualisierungen und Caching
- Ein neuer Snapshot wird bei uns jede Stunde berechnet und gegen :20 UTC veröffentlicht; bis dahin ist die vorherige Stunde die neueste.
- Antworten werden serverseitig gecacht und aktualisiert, sobald neue Daten eintreffen.
- Dieselbe URL liefert für verschiedene Tarife unterschiedliche Daten, daher werden Antworten mit
Cache-Control: private, max-age=600undVary: Authorizationgesendet — geteilte Caches speichern sie also nie.
Fehler
Fehler werden im Format {"success": false, "message": {…}, "timestamp": "…"} geliefert; die Tabelle zeigt message.
| Status | Wann | message |
|---|---|---|
| 400 | Ein ungültiges Datum oder eine ungültige Uhrzeit, to_date vor from_date, sowohl ts als auch date, unbekannte resolution, price_min / price_max nicht endlich, negativ oder price_min >= price_max, ein Bereich, der sich nicht mit den Niveaus überschneidet, mehr als 90 Tage bei 1h, eine Heatmap mit mehr als 2.000.000 Zellen | {"error": "Invalid parameter", "message": "resolution must be one of 1h, 6h, 1d"} |
| 401 | Fehlender oder ungültiger API-Schlüssel | |
| 403 | Free: ein vergangener Snapshot von /profile, /hourly, eine 6h- / 1h-Heatmap | {"error": "Insufficient tier", "message": "Profiles of past snapshots requires Pro", "required_grade": 1, "current_tier": "free", "current_grade": 0, "history_from": "2026-09-24", "upgrade_url": "https://blocklens.co/pricing"} |
| 404 | Kein Snapshot für den angefragten Tag oder Zeitpunkt oder keine Daten im angefragten Bereich | {"error": "Not found", "message": "no profile on 2026-06-20"} |
| 429 | Rate Limit überschritten | Siehe Rate Limits & Tarife |