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

Китовые стены

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

Что считается китовой стеной

Китовая стена (whale wall) — это один ценовой уровень в биржевом стакане, лимитный объём которого достигает заданного минимума или превышает его. Трекер читает живой стакан, сохраняет каждый уровень покупки или продажи, который достигает минимума, и следит за этим уровнем во времени как за одним отслеживаемым объектом. Минимумы хранятся отдельно для каждой торговой пары и каждой площадки, а не как одно глобальное число, и отслеживаются только те пары, для которых сохранена включённая конфигурация. Если стена исчезает и вновь появляется по той же цене в течение пяти минут с похожим объёмом, она считается тем же ордером, а не новым.

Жизнь стены в трекере

Поток несёт пять имён событий: wall_appeared, wall_updated, wall_cancelled, wall_filled и wall_partialfill. Appeared отмечает первый момент, когда уровень достигает минимума; updated срабатывает при каждом изменении объёма. Исчезнувший уровень не закрывается сразу. Он переходит в состояние ожидания на срок до пяти минут, и если та же цена возвращается с объёмом, который трекер оценивает в 0,70 или выше как тот же ордер, он объединяется обратно, а его счётчик пропусков увеличивается. Только когда пять минут проходят без возврата, трекер выдаёт одно завершающее событие. На доске cancelled и filled убирают строку, тогда как updated и частичное исполнение сохраняют её и переписывают её числа.

Завершающие события обрабатываются иначе, чем фильтрация по размеру. Сервер отбрасывает события appeared и updated ниже вашего минимума до того, как они покинут канал, но всегда пересылает cancelled и filled, потому что клиент может по-прежнему держать эту стену из более раннего snapshot и должен её убрать. Доска следует тому же правилу: она игнорирует обновление ниже порога, но никогда не игнорирует удаление. Именно поэтому стена может исчезнуть с вашей доски через мгновение после того, как вы подняли минимум, и при этом ей на смену не придёт никакая новая стена.

Новый уровеньдостигает минимумаОтслеживаетсявиден на доскеОжиданиеисчез, до 5 минутwall_appearedуровень исчезаетwall_updatedвернулся и совпалисполнено 90%Исполнена90% и болееисполнено 20%Частичное исполнениеот 20% до 89%нет следов исполненияОтмененаменее 20%мгновенная жизньSpoofingпрожила менее 500 мс
Трекер удерживает исчезнувший уровень в состоянии ожидания пять минут. Если та же цена возвращается с количеством, которое оценивается в 0,70 или выше как тот же ордер, она возвращается на доску с сохранённой историей и счётчиком пропусков. Иначе выдаётся одна завершающая классификация, определяемая накопленной исполненной долей, с двумя исключениями: стена, сквозь которую прошла цена, засчитывается как исполненная даже без зафиксированных сокращений, а стена, прожившая менее 500 миллисекунд почти без исполнения и без пересечения ценой, засчитывается как spoofing.

Как трекер решает: исполнена, частично исполнена или отменена

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

Эти величины накапливаются за время жизни стены в итог исполнения и итог отмен. Когда стена наконец закрывается, накопленная исполненная доля определяет завершающее событие: 90 процентов и выше — исполнена, 20 процентов и выше — частичное исполнение, всё, что ниже, — отменена. Два особых случая перекрывают эту арифметику. Стена, исчезнувшая за один тик без зафиксированных сокращений, но там, где рыночная цена прошла сквозь её уровень, засчитывается как исполненная. Стена, прожившая менее 500 миллисекунд почти без исполнения и не пересечённая ценой, классифицируется как spoofing.

Охваченные биржи и рынки

Охвачены четыре площадки: Binance Futures, Binance Spot, Coinbase и Hyperliquid. Binance Futures и Hyperliquid сгруппированы как фьючерсы; Binance Spot и Coinbase — как спот. Данные стакана и сделок читаются напрямую из собственной публичной WebSocket-ленты каждой биржи. Покрытие у площадок не одинаково — трекеры Coinbase и Hyperliquid работают только по явному списку пар, поддерживаемых каждой площадкой, а часть пар пропускается на Binance Spot, потому что там их нет в листинге. В интерфейсе вы выбираете, какие площадки отображать, а в заголовке показано, сколько из четырёх выбрано сейчас.

Настройки, которыми вы управляете

Доской управляют два фильтра размера. Min задаёт наименьшую стену, которая вообще показывается; Big задаёт уровень, выше которого стена помечается как крупный ордер. Оба предлагают одинаковые предустановки — 5, 10, 25, 50, 100 и 250 единиц базового актива — плюс произвольную величину, и оба могут выражаться в единицах базового актива или в долларах США через один переключатель валюты, причём рядом с каждой предустановкой показывается долларовый эквивалент. Значения по умолчанию различаются по парам, поэтому при смене символа применяются собственные значения этой пары. Настройки хранятся в браузере, а когда вы вошли в аккаунт — синхронизируются с ним.

Насколько актуальны данные

Доска открывается однократным snapshot текущих активных стен, а затем поддерживает себя в актуальном состоянии через поток server-sent events — один для фьючерсов, один для спота, — поэтому изменения приходят по мере возникновения, а не по таймеру обновления. Фильтр размера применяется на сервере в запросе snapshot. Сервер отправляет heartbeat каждые 15 секунд и комментарий keep-alive каждые 30. Клиент помечает данные как устаревшие после 30 секунд без событий, считает отсутствие heartbeat в течение 45 секунд признаком мёртвого соединения и переподключается с экспоненциальной задержкой, максимум десять попыток. Snapshot загружается при подключении и после смены символа или порога; автоматическое переподключение восстанавливает только поток и продолжает с последнего порядкового номера, который оно видело.

Подключениеsnapshot + поток15с30с45сСервер отправляетheartbeatкомментарий keep-aliveКлиент заключаетданные устарелисоединение мертвоэкспоненциальная задержка, до 10попытокReconnectтолько поток — без snapshot
Время отсчитывается от последнего события или последнего heartbeat, а не от начала соединения. Только намеренные действия — открытие страницы, смена символа, изменение порога — запрашивают snapshot; автоматическое переподключение после обрыва потока лишь заново открывает поток и ничего больше, потому что сервер не присылает идентификаторов событий, пригодных для возобновления. Задержка удваивается с одной секунды до потолка в 30 секунд и прекращается после десяти попыток, после чего соединение помечается как ошибочное и появляется кнопка Reconnect для ручного подключения.

Как доска согласует snapshot и поток

Поток открывается до того, как приходит snapshot, поэтому события иначе применялись бы к стакану, который вот-вот будет заменён. Вместо этого они удерживаются в буфере до 10 000 событий, пока запрашивается snapshot; если буфер переполняется, старшая половина отбрасывается, а факт отбрасывания записывается в лог. Как только snapshot получен, буфер сортируется и воспроизводится, при этом сохраняются только те события, порядковый номер которых выше, чем у snapshot. Применённые события затем выводятся на экран пакетами по кадрам анимации, причём appeared, filled и cancelled ставятся в очередь раньше остальных.

  • Под нагрузкой сервер сбрасывает только низкоприоритетный трафик: appeared, filled и cancelled никогда не отбрасываются из канала, а события updated могут быть отброшены, как только буфер канала превысит 800 записей.
  • Когда что-то отброшено, сервер не молчит — он отправляет событие data_gap с числом отброшенных событий и причиной: сброс из-за нагрузки или отставший клиент.
  • Изменение порога размера заново открывает поток с новым фильтром и подтягивает свежий snapshot; стены, которые больше не проходят порог, сначала удаляются из локальной карты.
  • Смена символа очищает карту стен, порядковый номер и метрики до того, как будет запрошено что-либо новое, поэтому два символа никогда не смешиваются.

Как читать доску

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

Чем на самом деле является строка: ценовые buckets

Строка — это не один ордер. Прежде чем что-либо будет нарисовано, каждая отслеживаемая стена округляется на ценовую сетку, и стены, попавшие на один и тот же шаг, на одной площадке и на одной стороне, объединяются в одну строку. Шаг берётся из самой цены: при 1000 и выше шаг равен 0,1, от 10 до 1000 — 0,01, ниже 10 — 0,001. Так уровень около 100 000 группируется с точностью до десятой доллара, а уровень около 3 — с точностью до десятой цента. Ваши настройки размера сетку никак не меняют.

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

108,450$4.2MbinanceОдна строкаценовой bucket, не ордерМаркер Bigитог bucket ≥ BigЦена bucketокруглена до шага сеткиИтог bucketUSD или базовый активЗначок площадкитолько сводные видыНакопительная полосадоля от максимума карточкиПолоса деталейпри наведенииРасстояние от цены, в процентахВозраст самой старой стены в bucket
Слева направо строка содержит маркер крупного ордера, округлённую цену bucket и суммарную стоимость bucket; закрашенная полоса за ней — накопительный итог от верха этой стороны, отмасштабированный относительно наибольшего накопительного итога в той же карточке. Значок площадки появляется только в объединённых представлениях. При наведении на строку внизу страницы открывается полоса деталей, где расстояние — это разрыв между ценой bucket и текущей ценой в процентах, а возраст — возраст самой старой стены внутри bucket.

Пересечённые стены и ценовые отметки

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

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

Четыре раскладки

Меню раскладок предлагает четыре предустановки. Все четыре читают одни и те же данные о стенах и одни и те же пороги; они различаются тем, как расположены строки, а в одном случае — тем, что вообще отрисовывается.

  • Default: по одной карточке на выбранную площадку, расположенные рядом и прокручиваемые по горизонтали, с покупками в левом столбце и продажами в правом. Карточки можно перетаскивать, чтобы менять порядок площадок, а их ширину можно зафиксировать в пикселях, задать как долю контейнера или подогнать автоматически. В конец можно добавить дополнительную сводную карточку.
  • Compact: тоже по одной карточке на площадку, но каждая карточка представляет собой вертикальную лестницу — продажи сверху, текущая цена площадки посередине, покупки снизу.
  • Aggregate: две панели рядом, обе показывают все выбранные площадки, объединённые в один список, с цветным значком площадки в каждой строке. Левая панель — вертикальная лестница, правая — вид из двух столбцов с покупками и продажами.
  • Chart: полностью заменяет доску свечным графиком для одной площадки — Binance Futures, Binance Spot или Coinbase. Таймфреймы идут от одной минуты до одной недели, по умолчанию пять минут. Уровни стен рисуются поверх свечей горизонтальными полосами с подписью их стоимости и пометкой «возраст · количество», не более 64 уровней одновременно, а рядом с графиком располагается панель глубины.

Оценка спуфинга есть в API, но не на доске

В интерфейсе нет индикатора spoofing. Полоса деталей строки показывает площадку, сторону, цену, стоимость, накопительную стоимость, расстояние, количество, возраст и значок крупного ордера; нижняя панель показывает состояние соединения, число событий в секунду, свежесть, число стен, итоги покупок и продаж, дисбаланс и значок состояния. Ни там, ни там нет оценки спуфинга, и нет ни фильтра, ни сортировки по ней. Оценка живёт только в API, на двух эндпоинтах — один для фьючерсов, один для спота — по пути whale-walls.

Запрос принимает необязательные фильтры по символу и площадке плюс lookback в часах, который по умолчанию равен 24 и ограничен 168. Ответ содержит по одной записи на символ и площадку, каждая — с составной оценкой от 0 до 100, трактовкой «низкая», «умеренная» или «высокая» на отметках 40 и 70, числом проанализированных стен и четырьмя факторами оценки: доля стен, проживших менее 60 секунд, среднее число исчезновений и возвратов на стену, доля отменённых стен дороже фиксированного долларового порога и среднее число изменений количества. Учитываются только закрытые стены, паре нужно как минимум десять таких, чтобы вообще появиться, а результаты кешируются на одну минуту.

Где доска китовых стен стоит относительно остального стакана

Доска намеренно не является полным стаканом. Отслеживаются только уровни, достигающие вашего минимума или превышающие его, поэтому пространство между двумя строками — это не пустой стакан, а просто объём, который никогда не прошёл порог. Агрегированная глубина, история дисбаланса, история глубины и тепловая карта стакана — это отдельные эндпоинты со своим путём данных, а второе семейство эндпоинтов агрегирует те же события стен в итоги, отношения и дельты по сторонам покупки и продажи, а не в отдельные уровни. Читать строку китовой стены как полную картину ликвидности по этой цене — ошибка, которую данные не подтверждают.

Цены, показанные рядом с каждой площадкой, вообще не приходят из потока стен. Браузер открывает собственные WebSocket-соединения к Binance Futures, Binance Spot, Coinbase и Hyperliquid и читает цены напрямую — поэтому карточка может показывать живую цену до того, как придёт хотя бы одна стена, и поэтому цена продолжает двигаться, пока поток стен переподключается. Та же исполняющая среда стен обеспечивает и виджет китовых стен в Terminal, поэтому пороги размера и переключатель валюты, заданные в одном месте, действуют и в другом.