7 дней Pro+ · без картыНачать пробный период

Тепловые карты ликвидаций

Как собираются и отображаются принудительные ликвидации и чем тепловая карта отличается от ленты.

Что показывает тепловая карта

Полноэкранная Liquidation Heatmap — это сетка интенсивности «время × цена», нарисованная за живым свечным графиком, причём оба привязаны к одной общей ценовой оси в USD, поэтому одно движение или масштабирование сдвигает их вместе. Горизонтальная ось — время, вертикальная — цена, а каждая ячейка представляет собой ценовой интервал внутри временного интервала. Слой по умолчанию — расчётная поверхность ликвидаций: она проецирует вновь открытый номинал с плечом на дискретные уровни ликвидации, привязанные к цене входа, переносит эти уровни вперёд, пока цена их не пересечёт, и убирает ту полосу, которую рынок смёл. Поскольку это моделируемая проекция, а не наблюдаемая запись, легенда этого слоя подписана как относительная интенсивность, а не как доллары.

Цена (USD)Время (UTC)Шкала цветаинтенсивность, не долларыТепловая сеткаячейка = интервал ×столбецСвечиодна ценовая ось —сдвигаются вместенаведение читает весь столбецОдна ячейкаодин уровень, один столбецПоказаниязначение уровня и итог столбца
Оба слоя привязаны к одной и той же ценовой оси в USD, поэтому одно движение или масштабирование сдвигает их вместе. Строка — это один ценовой интервал: пятьдесят долларов для BTC, пять для ETH, пятьдесят центов для SOL, — а столбец — это один шаг отрисовки, который расширяется вместе с lookback. Шкала цвета подписана как относительная интенсивность, потому что расчётный слой — это моделируемая проекция, а не сохраняющийся долларовый итог. Наведение выделяет ровно одну ячейку и считывает весь её столбец.

От open interest к уровню ликвидации

Каждый столбец расчётной поверхности начинается с одного числа на площадку: насколько вырос open interest этой площадки с предыдущего столбца на той же временной сетке. Учитывается только прирост; снижение ничего не добавляет. Этот вновь открытый номинал привязывается к цене, которую площадка сообщила для данного интервала и которую модель трактует как цену входа только что открывшейся когорты. Площадка, увиденная впервые или появившаяся вновь после разрыва в покрытии, лишь заново устанавливает свою базовую точку и не добавляет ничего вообще, потому что цены входа позиций, открытых до разрыва, ненаблюдаемы и никогда не выдумываются.

Открытый номинал затем разделяется на долю лонгов и долю шортов. При отсутствии входных данных о соотношении счетов разделение следует за funding rate через линейный сигнал с ограничением, а получившаяся доля лонгов всегда удерживается между 30 и 70 процентами, поэтому разделение никогда не бывает полностью односторонним. Каждая сторона распределяется по лестнице плеча из 49 ступеней от 5x до 125x с шагом 2,5x, взвешенных логнормальной кривой с пиком на 45x. Эта лестница — заявленное модельное допущение, а не измерение: плечо по отдельным позициям на централизованных площадках ненаблюдаемо.

Для каждой ступени модель берёт ставку поддерживающей маржи площадки для репрезентативного размера позиции в десять тысяч долларов, а не для полного номинала когорты. Использование номинала когорты задело бы у каждой площадки диапазон для крупного номинала и схлопнуло бы все ступени в одну цену ликвидации. Цена уровня далее является фиксированной функцией входа и плеча: вход, умноженный на единицу минус единица делённая на плечо плюс ставка поддержания — для лонгов, и вход, умноженный на единицу плюс единица делённая на плечо минус ставка поддержания — для шортов. Поскольку вход зафиксирован, уровень не двигается при движении цены.

Что сохраняет полосу и что её убирает

Спроецированные уровни сворачиваются в накопленную поверхность, и в каждом столбце происходят ровно три вещи, именно в таком порядке. Существующие полосы переносятся вперёд без изменений — временного затухания нет, поэтому нетронутая полоса спустя часы выглядит так же, как в момент открытия. Новые уровни, попадающие в интервал, где уже есть полоса, суммируются с ней — поэтому многократное открытие по одной цене делает одну линию ярче, а не рисует вторую. Наконец, каждый интервал, который цена пересекла за этот столбец, удаляется, включая всё, что было добавлено туда в том же столбце.

Пересечённый диапазон — это не движение от закрытия к закрытию. Он охватывает наименьшую и наибольшую отметку, наблюдавшуюся внутри интервала, расширенную так, чтобы включить взвешенную по open interest отметку предыдущего столбца, поэтому тень, дотянувшаяся до уровня, всё равно его убирает. Две защиты отбраковывают неправдоподобные диапазоны вместо удаления настоящих полос: скачок от предыдущей отметки внутрь свечи, превышающий половину цены, трактуется как разрыв в покрытии, а отдельный интервал, у которого размах от максимума к минимуму превышает 80 процентов цены, трактуется как сбой данных. В обоих случаях этот столбец не сметает ничего.

Полоса ниже порога номинала отбрасывается как численный шум. Живое чтение текущей поверхности задаёт этот порог равным нулю, поэтому выживают только строго положительные полосы, а путь записи в хранилище отбрасывает всё, что меньше одного доллара. Практическое следствие в том, что столбцы отличаются от соседних только тем, что линия появилась или линия была срезана. Поэтому чтение ценовой строки слева направо говорит вам, когда уровень был впервые открыт и где рынок его пересёк, — но никогда не говорит, насколько сильно он угас, потому что он не угасает.

Откуда берутся данные

Представления ликвидаций питают три разных набора данных, и они охватывают не одни и те же площадки. Агрегированное представление по многим биржам обращается к Binance, Bybit, OKX, Hyperliquid, Bitget, Gate.io, HTX, MEXC, dYdX и Kraken за open interest, фондированием и ценой. Сохраняемая поверхность текущего тепла строится из меньшего сохраняемого набора: Binance, Bybit, OKX, Deribit, Bitget и Hyperliquid. Реализованные события ликвидаций приходят из реестра биржевых WebSocket-лент, в котором сейчас зарегистрированы Binance и Bybit. Набор для живого опроса и сохраняемый набор не являются подмножествами друг друга, поэтому их итоги не сойдутся в точности.

Почему на шкале цвета нет долларовых подписей

Цвет ячейки кодирует накопленный открытый поток, который проецирует уровень в этот интервал за загруженное окно. Эта величина ограничена сверху тем open interest, который её открыл, но она не является ни текущим стаканом, ни сохраняющимся долларовым итогом за окно, поэтому градиент с долларовыми подписями провоцировал бы читателя складывать ячейки в число, которое ничего не значит. Поэтому легенда этого слоя подписана как относительная интенсивность, а её деления напечатаны по шкале от нуля до ста, где сто — это текущий цветовой потолок, а не фиксированная сумма денег.

Этот потолок равен 99,9-му процентилю загруженной сетки, а не её максимуму, поэтому одна очень крупная ячейка не может утянуть всё остальное в тёмный край, пока прочие магниты сплющиваются в один яркий тон. Сетка, передаваемая на GPU, хранит каждую ячейку делённой на этот потолок, потому что формат текстуры — half float, и сырые долларовые значения примерно выше шестидесяти пяти тысяч переполнили бы его. Линейное и symlog-масштабирование от этого деления не меняются; логарифмический режим охватывает четыре порядка ниже потолка. Легенда расставляет деления той же функцией, что использует шейдер, поэтому подпись стоит там, где её цвет действительно нарисован.

Элементы управления и цветовая шкала

На маршруте тепловой карты вы выбираете актив (BTC, ETH или SOL), окно lookback и то, показывать ли плотностную тепловую карту или представление Liquidation Levels, которое заменяет сетку дискретными привязанными линиями, профилем открытых уровней и панелью накопленной дельты. Панель отображения предлагает четыре colormap — viridis, inferno, magma и cividis, из которых viridis и cividis отмечены как безопасные при нарушениях цветового зрения, — три режима шкалы (linear, log, symlog) и ползунок чувствительности; поставляемые значения по умолчанию — viridis, linear и показатель 0,85. Реализованный слой можно включить как второй полупрозрачный слой с разрешением 1m, 1h или 1d.

низкаявысокаяviridisпо умолчаниюдля дальтониковinfernomagmacividisдля дальтоников
Четыре градиента, доступные на панели отображения, взяты из таблиц соответствия, которые загружает рендерер. Два из них отмечены как безопасные для самых распространённых нарушений цветового зрения; viridis используется по умолчанию.

Числа под курсором

Наведение определяет ценовой уровень и временной столбец. Опорная цена, по которой определяется направление, — это закрытие свечи, содержащей начало интервала данного столбца, а не свечи под указателем, поэтому уровень не может перескакивать между стороной лонгов и стороной шортов, пока курсор движется внутри одного столбца. Уровень выше этой опоры читается как сторона шортов, ниже — как сторона лонгов, а уровень в том же интервале, что и опора, считается нейтральным и сообщает обе стороны вместе. Времена столбцов форматируются в UTC, чтобы показания совпадали с осью времени, а не с местным часовым поясом зрителя.

Показываются две величины. Число «на этом уровне» — это направленное значение ячейки под курсором, ровно та величина, которую рисует цвет, поэтому число и оттенок не могут противоречить друг другу. Накопительное число суммирует ту же сторону от опорного интервала, не включая его, до уровня под курсором включительно, отвечая на вопрос, сколько находится между текущей ценой и этим уровнем. В режиме текущей поверхности третья, более мелкая строка сообщает текущий open interest, проецирующий уровень в этот интервал. Она берётся из отдельного профиля, построенного только по самому новому столбцу, ограничена сверху совокупным open interest и намеренно показана мелким шрифтом, потому что отвечает на другой вопрос.

Представление Liquidation Levels подробно

Представление Levels заменяет плотностную сетку отдельными линиями. Каждая линия — это одна когорта: площадка, ступень плеча, сторона и столбец, на котором она открылась, — удерживаемая на своей точной спроецированной цене, а не привязанная к интервалу. Когорты, открывшиеся на разных столбцах, никогда не объединяются, поэтому левые края поля линий следуют за траекторией цены лесенкой. Линия заканчивается там, где торговый диапазон более позднего столбца накрывает её собственную цену, и представление сохраняет и тик входа, и тик касания — именно это позволяет ему рисовать конечный отрезок, а не линию во всю ширину.

Гранулярность фильтрует по размеру позиции. Точки отсечения пересчитываются при каждом запросе как терцили распределения номиналов линий этого же запроса, поэтому они следуют за активом и окном, а не являются фиксированными долларовыми порогами. Large оставляет линии на нижней отсечке и выше, Whale — на верхней и выше, а All не применяет фильтра. Управление «дельта к объёму» — это второй, двусторонний фильтр: два его ползунка выделяют поддиапазон наблюдаемого диапазона номиналов, поэтому он способен выделить линии среднего размера, до которых односторонний фильтр не дотягивается. Measure переключает накопительную панель между подсчётом линий и суммированием их номинала.

Карту обрамляют три панели. Профиль справа сворачивает все открытые линии в ценовые полосы и строится по полному сохранённому набору, поэтому остаётся полным даже тогда, когда отрисованное поле линий ограничено; он всегда сворачивается по номиналу независимо от настройки measure. Нижняя панель накопительная: линия прибавляется на столбце, где она открылась, и вычитается на столбце, где по ней прошла цена, поэтому ряд откатывается назад по мере того, как цена сметает уровни, а не только растёт. Четвёртая панель сообщает о перекосе этого профиля между лонгами и шортами. Сама полезная нагрузка линий останавливается на шести тысячах линий, сохраняя крупнейшие по номиналу и помечая ответ, тогда как сообщаемые счётчики открытых остаются полными итогами.

Реализованный слой и когда чтение объявляет себя усечённым

Реализованный слой — это второй, полупрозрачный слой, нарисованный поверх расчётного поля со своей цветовой таблицей и прозрачностью. Управление его разрешением предлагает 1m, 1h и 1d, и выбор разрешения заодно включает слой, поэтому этот элемент управления никогда не срабатывает вхолостую. Разрешение относится только к этому слою. За каждым разрешением стоит непрерывный агрегат, который материализует лишь скользящее окно: примерно три часа для 1m, восемь дней для 1h и тридцать дней для 1d. Запрос шире окна своего уровня молча опускает более старые интервалы, поэтому чтение сообщает о себе как об усечённом, а не выдаёт короткую сетку за полную.

У уровня 1d есть и нижняя граница. Его интервалы начинаются в полночь UTC, тогда как фильтр чтения отсчитывается от текущего момента, поэтому запрос на 24 часа может ничего не вернуть ранним утром; всё, что меньше 48 часов, поэтому тоже помечается. Достижение лимита строк в хранилище поднимает тот же флаг. Ответ несёт объект покрытия со списком бирж, которые фактически внесли вклад, плюс примечание о том, что реализованные ликвидации являются нижней границей, потому что биржевые ленты ограничивают частоту публикаций и учитываются только подключённые площадки. Второй пункт подсказывает читателю, следует ли сузить или расширить окно.

Расчётная сетка ограничена иначе. Поскольку самое широкое доступное окно составляет семь дней, а часовой уровень хранит восемь, само окно никогда не может усечь расчётное чтение; это могут сделать только лимиты строк. В интерфейсе статус сетки переключается с «живой» на «неполный» с предупреждающим маркером и поясняющим заголовком, представление Levels добавляет примечание о том, что нарисованы только верхние линии, тогда как счётчики остаются полными, а блок покрытия слоя дословно повторяет примечание о нижней границе. Ничего не отбрасывается молча.

Расчётный слоймоделируемая проекцияРеализованный слойнаблюдаемые записиВходOpen interest, 6 площадокЗаписи о ликвидациях, лентыМетодЛестница плеча, уровень на ступеньСуммы по 1m / 1h / 1dВремя жизниДо пересечения ценойФиксируется при записиЕдиницаОтносительная интенсивность, 0–100Доллары США, нижняя границаОдна сетка, разные вопросы — не считайте один слой проверкой другого.
Расчётный слой превращает прирост open interest в каждом столбце в уровни по лестнице плеча, переносит их вперёд, пока цена их не пересечёт, и выдаёт относительную интенсивность. Реализованный слой суммирует фактические записи о ликвидациях в ту же сетку и выдаёт доллары, но только как нижнюю границу: биржевые ленты ограничивают частоту публикаций, и учитываются только подключённые площадки. У них общая ось, но не единица измерения — поэтому их можно сравнивать по положению, но никогда нельзя складывать.

Страница Liquidations против тепловой карты

Эти два маршрута — разные продукты. Страница Liquidations — это дашборд с вкладками: реализованные ликвидации во времени плюс расчётные кластеры, Multi-Exchange Map, Liquidation Estimator и кнопка запуска с глубокой ссылкой на полноэкранную тепловую карту. Эта кнопка существует потому, что настоящая сетка «время × цена» — это отдельный маршрут на WebGL, использующий тот же движок продвинутого графика, и его нельзя встроить в панель вкладки. Эти два интерфейса ограничены разными доменами прав доступа — дашборд относится к order flow, тепловая карта к derivatives, — а агрегат по многим биржам за дашбордом работает только по BTC, и его показатель риска подписан BTC независимо от актива, выбранного на тепловой карте.

Четыре вкладки дашборда ликвидаций

Первая вкладка, Liquidations and Levels, объединяет столбчатый график реализованных ликвидаций лонгов и шортов по интервалам с карточкой расчётных кластеров по уровням плеча. Её элемент управления интервалом меняет и размер интервала, и то, сколько интервалов запрашивается: 168 интервалов при одном часе, 84 при четырёх часах, 30 при одном дне. Карточка кластеров явно помечена как ориентировочная и печатает собственные допущения — open interest Binance с маржой в USDT, предполагаемое равное разделение лонгов и шортов и фиксированное распределение розничного плеча, — поэтому её невозможно принять за биржевые данные. Выбор актива на этой странице предлагает только BTC и ETH.

Вторая вкладка — Multi-Exchange Map: расчётный объём ликвидаций по ценовым интервалам, агрегированный из живого опроса, с разбивкой по биржам, таблицей кластеров и слоем реальных событий. Она использует ту же ширину ценового интервала по активу, что и сохраняемая сетка, — пятьдесят долларов для BTC, пять для ETH, полдоллара для SOL, с пропорциональным цене запасным вариантом для активов без заданных значений, — поэтому обе поверхности ложатся на одну ценовую решётку. Третья вкладка — отдельный Liquidation Estimator для BTC и ETH, который считает полосы на 3x, 5x, 10x, 25x, 50x и 100x по цене и open interest фьючерсов Binance, с прокси плеча от Bybit, за тридцатисекундным кешем.

Четвёртая вкладка не рисует тепловой карты вовсе. Сетка «время × цена» — это полноэкранный маршрут на WebGL, который использует движок продвинутого графика и не может быть смонтирован внутри панели вкладки, поэтому эта вкладка представляет собой кнопку запуска, переносящую выбранный актив в глубокую ссылку. Смонтировано только содержимое активной вкладки, поэтому переключение вкладок не запускает циклы опроса других вкладок. Разделяемая часть этой ссылки — актив и lookback; разрешение, режим и переключатель реализованного слоя остаются локальными для сессии, а устаревший параметр разрешения из старых ссылок вырезается.

Шаг столбцов, лимиты строк и частота обновления

Более широкое окно не даёт больше столбцов. Чтение выводит шаг столбца из lookback — 60 секунд до четырёх часов, 300 секунд до суток, 900 секунд до четырёх дней и 1800 секунд далее, — подобранный так, чтобы ни одно допустимое окно не превышало примерно четырёхсот столбцов. Чтения текущей поверхности и Levels ограничивают этот шаг снизу своей пятиминутной базой — поэтому короткие окна сохраняют привычное разрешение, а длинные расширяются. Прореживание выбирает самый новый столбец внутри каждого окна шага и никогда не суммирует столбцы, потому что поверхность переносится вперёд и суммирование считало бы одну и ту же стоящую полосу многократно.

Полезную нагрузку ограничивают три лимита, и о каждом сообщается, а не умалчивается. Сетка текущей поверхности останавливается на пятистах тысячах строк и при превышении отбрасывает целые самые старые столбцы, чтобы сетка оставалась прямоугольной и самый новый столбец — тот, по которому строится профиль текущего стакана, — уцелел. Полезная нагрузка Levels останавливается на шести тысячах линий. Запрос реализованных событий по умолчанию ограничен тысячей строк с жёстким потолком в десять тысяч, а чтение, достигшее потолка, помечается как заниженное.

Обновление выполняется опросом и зависит от видимости вкладки, поэтому фоновая вкладка не продолжает запрашивать данные. Тепловая сетка и представление Levels обновляются каждые 120 секунд, ряд событий на дашборде ликвидаций — каждые 60 секунд, а Liquidation Estimator — каждые 30 секунд. Смена актива, окна, гранулярности или measure отбрасывает устаревшую модель до повторного запроса, поэтому элемент управления никогда не подписывает один набор данных настройками другого, пока запрос в пути.

Задокументированные ограничения

Lookback задан на сервере фиксированным списком разрешённых значений — 1h, 4h, 12h, 24h и 7d, — и всё остальное отклоняется, а не подменяется молча значением по умолчанию. Выпадающий список предлагает четыре из этих пяти; 1h доступен только через API. Расчётная и текущая поверхности сохраняются только с часовой частотой, поэтому другие таймфреймы отклоняются; только реализованный слой материализован с разрешением 1m, 1h и 1d. Каждый реализованный уровень хранит ограниченное скользящее окно (примерно 3 часа для 1m, 8 дней для 1h, 30 дней для 1d), а уровню 1d нужен lookback минимум на 48 часов, чтобы вернуть полные интервалы. Запросы за этими границами возвращаются с пометкой об усечении, а интерфейс показывает предупреждение о неполных данных. Запрос реализованных событий имеет лимит строк по умолчанию 1000 и жёсткий лимит 10 000; достижение лимита отображается примечанием о заниженном подсчёте.

СлойРазрешениеХранитсяЧтение вне окна
Реализованный1mоколо 3 часовпомечается как усечённое
Реализованный1hоколо 8 днейпомечается как усечённое
Реализованный1dоколо 30 днейнужен запрос на 48 часов
Расчётныйтолько часовоесохраняется по столбцамтолько лимит строк
Реализованный слой читает три уровня непрерывных агрегатов с разным сроком хранения. Уровню 1d дополнительно нужен запрос минимум на 48 часов, потому что его интервалы начинаются в полночь UTC, тогда как фильтр отсчитывается от текущего момента. У расчётной поверхности выбора разрешения нет вовсе: её писатель сохраняет столбец каждые шестьдесят секунд под часовой меткой, и поскольку самое широкое доступное окно составляет семь дней, а часовой уровень хранит восемь, обрезать его могут только ограничения на число строк, но не окно.