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:
| Free | Pro, Enterprise | |
|---|---|---|
/v1/options/gex (дневной ряд) | последние 30 дней | вся история с 2026-03-16 |
/v1/options/gex/hourly | — (403) | да |
/v1/options/gex/profile | только последний снимок, без strikes | любой снимок, со strikes |
/v1/options/gex/heatmap | resolution=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, включительно) |
limit | 100 | Количество дней (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_gex | GEX по публикуемой гамме 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 включительно) |
limit | 168 | Количество снимков (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_gex | GEX при 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
| Параметр | По умолчанию | Описание |
|---|---|---|
resolution | 1d | 1d, 6h или 1h (Pro): один снимок на интервал — первый (1d = снимок 00:00 UTC) |
from | 1d: вся история; 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"} |
| 401 | API-ключ отсутствует или недействителен | |
| 403 | Free: прошлый снимок из /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 | Превышен лимит запросов | См. Лимиты запросов и тарифы |