Перейти к основному содержимому

Dealer Hedge Flow API

Dealer Hedge Flow API показывает, как позиционированы опционные дилеры в опционах BTC на Deribit и что сделает их хеджирование, если цена сдвинется: для каждого ценового уровня — на сколько долларов США дилеры купят или продадут BTC, чтобы по пути к нему оставаться дельта-захеджированными, и будет ли этот поток усиливать или гасить движение. Кроме того, API возвращает чистую гамма-экспозицию (GEX), уровень нулевой гаммы и несколько устаревших статистик по опционам. Новый снимок рассчитывается каждый час.

Как восстанавливаются позиции дилеров, формулы и допущения: Методология Dealer Hedge Flow.

Не торговый сигнал

Dealer Hedge Flow — описательная модель позиционирования дилеров, а не ценовая цель и не торговый сигнал.

Эндпоинты​

МетодПутьОписание
GET/v1/options/gexДневной ряд: одна строка в день (снимок 00:00 UTC)
GET/v1/options/gex/hourlyКаждый часовой снимок (Pro)
GET/v1/options/gex/profileПоток хеджирования по ценам для одного снимка (по умолчанию — последнего)
GET/v1/options/gex/heatmapМатрица влияния «время × цена» для тепловой карты

Базовый URL: https://api.blocklens.co. Все ответы — JSON в обёртке {"success": true, "data": …}: для рядов data — список строк (рядом с ним — count, access и message), для /profile и /heatmap — объект, содержащий access. Ошибки возвращаются в виде {"success": false, "message": {…}, "timestamp": "…"} (см. Ошибки).

Аутентификация​

Все запросы требуют API-ключа:

Authorization: Bearer YOUR_API_KEY

Об API-ключах см. Аутентификация, а о том, какие тарифы включают доступ к API, и о лимитах запросов — Лимиты запросов и тарифы.

Знаки и единицы​

  • Все суммы — в USD. Значения GEX (net_gex, gex[], strikes[].call_gex / put_gex) выражены в USD на движение в 1%; поток хеджирования и влияние — в USD за всё движение от текущей цены до уровня.
  • hedge_flow > 0 — по пути к уровню дилеры покупают BTC; < 0 — продают.
  • impact = hedge_flow × sign(уровень − spot): > 0 — усиление (поток подталкивает движение дальше), < 0 — гашение (поток противодействует движению).
  • net_gex > 0 — дилеры в сумме имеют длинную гамму (режим гашения); < 0 — короткую гамму (режим усиления).
  • spot — цена индекса BTC в снимке; уровни лежат на абсолютной сетке с шагом $500 в пределах ±30% от неё.
  • zero_gamma ищется в пределах ±50% от spot, поэтому может лежать за пределами сетки уровней; null, если кривая GEX там не меняет знак.

Тарифы и история​

Тарифные правила применяет сам API, а не только интерфейс Lab:

FreePro, Enterprise
/v1/options/gex (дневной ряд)последние 30 днейвся история с 2026-03-16
/v1/options/gex/hourly— (403)да
/v1/options/gex/profileтолько последний снимок, без strikesлюбой снимок, со strikes
/v1/options/gex/heatmapresolution=1d, последние 30 дней1h, 6h, 1d, вся история

Каждый ответ содержит блок access:

"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 — первый день, доступный вызывающей стороне (null при полной истории).
  • resolutions, profile_history, strikes, hourly — что разрешает тариф вызывающей стороны.
  • clipped — true, если в дневном ряду или тепловой карте были запрошены дни раньше history_from и они были отсечены. По этой причине эти два эндпоинта никогда не возвращают 403: они отдают разрешённую часть.
  • Прошлый снимок из /profile (любой, кроме последнего), /hourly и тепловая карта с шагом 6h / 1h на тарифе Free возвращают 403 (см. Ошибки).

Снимки и время​

  • Один снимок опционной доски BTC на Deribit в час, через несколько секунд после начала часа. История начинается 2026-03-16; 2026-06-08 … 2026-07-07 отсутствует (сбой сбора данных), а отдельные часы пропускаются, если доска была неполной. Данные обновляются каждый час примерно в :20 UTC.
  • Время указывается в UTC, ISO 8601. Время снимка содержит микросекунды, если они есть у снимка ("2026-10-24T09:00:02.418731Z"): передайте значение ts / times[] обратно в /profile?ts= без изменений — и будет выбран именно этот снимок. ts без долей секунды соответствует любому снимку в пределах этой секунды.
  • День (дневной ряд, /profile?date=, тепловая карта 1d) — это снимок 00:00 UTC этого дня, а если снимка в 00:00 нет — первый снимок дня. Он лежит в стороне от ежедневной экспирации в 08:00 UTC, поэтому строка дня после появления не меняется.

GET /v1/options/gex​

Дневной ряд, новые дни первыми.

ПараметрПо умолчаниюОписание
from_dateпервый разрешённый деньYYYY-MM-DD (UTC); раньше окна тарифа → отсекается, access.clipped = true
to_dateпоследний деньYYYY-MM-DD (UTC, включительно)
limit100Количество дней (1–10 000), новые первыми
fieldsвсеИмена полей через запятую (date возвращается всегда)
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)"
}
ПолеЗначение
dateДень по UTC
hedge_snapshot_ts, spotСнимок дня, по которому рассчитаны поля потока хеджирования, и его цена индекса BTC
net_gexЧистый GEX дилеров при spot, по Black-Scholes, USD на движение в 1% — публикуемый чистый GEX
zero_gammaБлижайшая к spot смена знака пересчитанной кривой GEX (±50%); null, если её нет
flow_up5, flow_dn5, flow_up10, flow_dn10Поток хеджирования в USD при движении цены на +5% / −5% / +10% / −10% от spot, ровно при spot × 1.05 / 0.95 / 1.10 / 0.90
snapshot_ts, btc_priceСнимок устаревших полей и его цена BTC
top_support_strike, top_support_gexСтрайк с наибольшим положительным GEX (гамма Deribit; страйки с |GEX| меньше $1,000 не учитываются)
top_resist_strike, top_resist_gexСтрайк с наибольшим отрицательным GEX (те же правила)
pc_ratio_oi, pc_ratio_vol_24hСоотношение путов и коллов по открытому интересу и по объёму за 24 часа
max_pain, max_pain_expiryСтрайк max pain ближайшей экспирации и сама эта экспирация
legacy_total_gex, legacy_call_gex, legacy_put_gexGEX по публикуемой гамме Deribit (округлена до 1e-5 — смещена относительно Black-Scholes); используйте net_gex
legacy_flip_pointСмена знака GEX по страйкам между двумя страйками вокруг цены — не гамма-флип; используйте zero_gamma

Дневные столбцы net_gex, zero_gamma, flow_* и top_*_strike также являются метриками каталога (options_*, категория options), доступными через /v1/metrics и MCP-инструмент get_metric.

GET /v1/options/gex/hourly​

Каждый часовой снимок, новые первыми (Pro). Те же поля, что и в дневном ряду, но ключом служит timestamp (время снимка), а не date; устаревшие значения и значения потока хеджирования одного снимка находятся в одной строке.

ПараметрПо умолчаниюОписание
from_date, to_date—YYYY-MM-DD (UTC, to_date включительно)
limit168Количество снимков (1–10 000); по умолчанию — одна неделя
fieldsвсеИмена полей через запятую (timestamp возвращается всегда)
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​

Поток хеджирования по ценам для одного снимка.

ПараметрПо умолчаниюОписание
tsпоследнийВремя снимка (ISO 8601, UTC, если смещение не указано): последний снимок на этот момент или раньше. Не вместе с date
date—YYYY-MM-DD (UTC): снимок 00:00 UTC этого дня (первый снимок дня). Не вместе с ts

На тарифе Free доступен только последний снимок: не передавайте ts / date (ts / date, которые указывают на последний снимок, тоже принимаются).

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}
}
}

Пример сокращён: в реальном профиле около сотни уровней.

ПолеЗначение
ts, spotВремя снимка и цена индекса BTC
step, levelsШаг сетки ($500) и ценовые уровни по возрастанию в пределах ±30% от spot
hedge_flow[i]Объём в USD, который дилеры проторгуют, если цена пройдёт от spot до levels[i] (> 0 — покупка, < 0 — продажа)
impact[i]hedge_flow[i] со знаком направления движения (> 0 — усиление, < 0 — гашение)
gex[i]Чистый GEX дилеров, пересчитанный так, как если бы цена была на уровне levels[i], USD на 1%
net_gexGEX при spot
zero_gamma, flipsБлижайшая к spot смена знака кривой GEX и все смены знака по возрастанию в пределах ±50% от spot (null / [], если их нет)
flowПоток хеджирования ровно при spot × 1.05 / 0.95 / 1.10 / 0.90 (up5, dn5, up10, dn10)
max_amplify_level, max_dampen_levelПолоса шириной $500 с наибольшим предельным потоком усиления / гашения (null, если такой нет)
method_versionВерсия метода расчёта
legacyУстаревшие значения того же снимка (гамма Deribit): flip_point, top_support_strike, top_resist_strike, total_gex
strikesЧистый GEX по страйкам, отдельно для коллов и путов, суммарно по всем экспирациям (Pro; null на Free)

hedge_flow накапливается вдоль ценового пути: чтобы получить значение для полосы между двумя уровнями, берите разность, а не сумму нескольких уровней.

GET /v1/options/gex/heatmap​

ПараметрПо умолчаниюОписание
resolution1d1d, 6h или 1h (Pro): один снимок на интервал — первый (1d = снимок 00:00 UTC)
from1d: вся история; 6h: последние 180 дней; 1h: последние 30 днейДата или дата-время ISO (UTC). Раньше окна тарифа → отсекается, access.clipped = true
toсейчасДата ISO (включительно) или дата-время (не включительно)
price_min, price_maxвсе уровниОбрезают ценовой диапазон, USD (конечные, ≥ 0, price_min < price_max)

from / to расширяются наружу до целых интервалов resolution.

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] — влияние в целых долларах USD на уровне levels[l] для снимка times[t] (> 0 — усиление, < 0 — гашение). null за пределами собственного диапазона ±30% этого снимка или в пропуске его сетки.
  • times — реальное время снимков по возрастанию; вокруг пропусков данных шаг неравномерен (пустых строк нет).
  • levels — одна общая сетка с шагом $500, охватывающая все возвращённые снимки.
  • overlays.price — spot каждой строки; overlays.zero_gamma — её уровень нулевой гаммы (null, если его нет). Уровень нулевой гаммы может лежать за пределами levels: при отрисовке обрезайте линию.
  • scale — 98-й перцентиль и максимум |impact|; ограничивайте цветовую шкалу значением p98.

Лимиты и объём ответа​

  • resolution=1h охватывает не более 90 дней за запрос (иначе 400 — для более длинных диапазонов используйте 6h или 1d).
  • Запрос тепловой карты может охватывать не более 2 000 000 ячеек (снимки × уровни); более крупные запросы возвращают 400 — используйте более грубый шаг, более короткий период или price_min / price_max.
  • Полная часовая история — около 10 МБ несжатого JSON. При передаче ответы сжимаются gzip. Для первого отображения используйте 1d или 6h либо короткое окно 1h.
  • Лимиты запросов на API-ключ: Лимиты запросов и тарифы.

Обновления и кэширование​

  • Новый снимок рассчитывается на нашей стороне каждый час и публикуется примерно в :20 UTC; до этого последним остаётся предыдущий час.
  • Ответы кэшируются на сервере и обновляются при поступлении новых данных.
  • Один и тот же URL возвращает разные данные для разных тарифов, поэтому ответы отправляются с Cache-Control: private, max-age=600 и Vary: Authorization — общие кэши их никогда не сохраняют.

Ошибки​

Ошибки возвращаются в обёртке {"success": false, "message": {…}, "timestamp": "…"}; в таблице показано поле message.

СтатусКогдаmessage
400Некорректная дата или время, to_date раньше from_date, одновременно ts и date, неизвестный resolution, price_min / price_max не конечны, отрицательны или price_min >= price_max, диапазон, не пересекающийся с уровнями, больше 90 дней при 1h, тепловая карта больше 2 000 000 ячеек{"error": "Invalid parameter", "message": "resolution must be one of 1h, 6h, 1d"}
401API-ключ отсутствует или недействителен
403Free: прошлый снимок из /profile, /hourly, тепловая карта с шагом 6h / 1h{"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Нет снимка за запрошенный день или время либо нет данных в запрошенном диапазоне{"error": "Not found", "message": "no profile on 2026-06-20"}
429Превышен лимит запросовСм. Лимиты запросов и тарифы