Обычный трейдер смотрит на свечной график, но свеча — это уже тень прошлого, постфактум. Между тем настоящая динамика рождается в глубине торгового стакана — Limit Order Book, где борьба заявок определяет будущий импульс.

Проблема в том, что историю стакана почти нигде не увидеть: розничные терминалы для частных клиентов дают лишь текущую таблицу DOM ( Depth of Market ) и это статичный срез без прошлого.

Чтобы увидеть то, на что обычный трейдер не обращает внимание я собрал инструмент, который превращает исторические данные L2 Order Book (стакан заданной глубиной) и Trades Stream (обезличенные сделки) в тепловые карты и позволяет изучать эволюцию заявок на Московской бирже через браузер с Deep Zoom — плавно, как в Google Maps.

Знаете Bookmap?

Если вы когда‑либо видели Bookmap, то идея проекта вам покажется знакомой. Bookmap — это профессиональный инструмент, который рисует тепловую карту ликвидности стакана и сделок в реальном времени: где стоят крупные заявки, как они двигаются, исчезают или наоборот «притягивают» цену. Но Bookmap дорог, закрыт и не работает с Московской биржей.

Что мы на самом деле видим?

Биржевой стакан — это не таблица в терминале и не набор случайных чисел. Это живая очередь намерений. Тысячи алгоритмов и людей размещают заявки на покупку (bid) и продажу (ask), формируя хрупкий баланс спроса и предложения. В каждый момент времени стакан отражает то, что участники хотят сделать, но ещё не сделали. И именно эти несовершившиеся действия двигают рынок.

Когда‑то впервые открыть глаза на это помогли работы Nanex. Их система NxCore показала, что HFT‑алгоритмы оставляют следы — характерные узоры, вспышки ликвидности, провалы, которые на свечном графике просто растворяются. В их визуализации «Disturbing Liquidity» исчезновение 80% заявок за одну секунду выглядело как цифровой обвал — видимый только тем, кто смотрит внутрь книги ордеров, а не на результат на графике.

Nanex ~ 14-Sep-2012 ~ Disturbing Liquidity. Prices and depth of book (top). Size map (bottom).
Nanex ~ 14-Sep-2012 ~ Disturbing Liquidity. Prices and depth of book (top). Size map (bottom).

Другой источник — исследования Parasec, где анализировали глубину и «дыхание» ликвидности на биткоин‑биржах. Их визуализации тоже показали, что стакан — это не плоская таблица, а многослойная структура, где заявки добавляются, исчезают и перестраиваются, создавая паттерны, похожие на биение пульса.

Визуализация высокочастотной торговли в Bitcoin. Источник: parasec.net
Визуализация высокочастотной торговли в Bitcoin. Источник: parasec.net
Визуализация высокочастотной торговли в Bitcoin. Источник: parasec.net
Визуализация высокочастотной торговли в Bitcoin. Источник: parasec.net

В моей реализации я пытаюсь сделать так же. Код берет L2 Order Book (стакан глубиной 50) и Trades Stream (обезличенные сделки) и проходит путь от «хаоса массивов» до карты эволюции рынка.

Мой код представлен на GitHub: empenoso/MOEX-OrderBook-DeepZoom

Сначала все события объединяются во временные блоки, чтобы уместить недели данных в шаблон по горизонтали — без потери структуры. Далее строятся две тепловые карты: верхняя показывает абсолютные уровни цен и ликвидности, нижняя — относительное смещение вокруг mid‑price, чтобы видеть деформации книги ордеров независимо от тренда. Яркость пикселей кодирует объём (после логарифмической нормализации), а цвет — насыщенность ликвидности. Сделки накладываются поверх — как тонкая линия и серия точек разных размеров, привязанных к реальным объёмам.

Мой черновик реализации. Большой пример с увеличением есть в репозитории
Мой черновик реализации. Большой пример с увеличением есть в репозитории

Временно развернул как сервис у себя. Ссылку публично не буду давать, боюсь что мой сервер просто упадёт, но если вы напиши мне лично, то я сброшу ссылку вам посмотреть. Долго держать включенным сервис не буду - у меня нет идеи создать такую услугу, я лишь хочу посмотреть закономерности для самого себя.

Мой черновик реализации. Все данные которые у меня были - в этом черновике сервиса
Мой черновик реализации. Все данные которые у меня были - в этом черновике сервиса

Зачем это нужно?

Например для поиска аномалий:

Flash Crashes. Когда цена внезапно проваливается, трейдеры ищут виноватых в свечах или новостях. Но иногда причина банальна: на стороне bid просто исчез слой ликвидности, и рынок провалился в пустоту. Визуализация показывает это мгновенно — пустые коридоры, резкие «дыры» в глубине, которые на обычном графике не видны.

Spoofing. Ложные крупные заявки, которые появляются и исчезают, чтобы напугать участников или двинуть цену в нужную сторону. В стакане это выглядит как рваные по��осы «жирных» уровней, которые никогда не исполняются. Понять такую манипуляцию по свечам невозможно, но на тепловой карте она читается моментально. Польза? Видеть то, что скрыто от большинства — а значит принимать решения раньше толпы.

Отличная книга издана на русском на обе эти темы и написана относительно недавно в 2020 году: Flash Crash. История о трейдере‑самоучке, обвалившем финансовый рынок на 1 трлн $ (Лиам Воган).

Отличная книга на русском на обе эти темы -  Flash Crash Лиам Воган
Отличная книга на русском на обе эти темы — Flash Crash Лиам Воган

Анализ микроструктуры. Стакан показывает, как именно цена проходит путь от уровня к уровню. Когда рынок упирается в крупную «плиту» заявок, визуализация помогает понять: это реальный интерес или просто бутафория? Цена отскакивает от плотных уровней, если там стоит живой спрос, и наоборот — легко «проедает» их, когда объёмы фиктивны. Дисбаланс bid/ask перед импульсом становится заметен как изменение наклона и плотности тепловой карты.

Обучение и Research. Для ML‑инженеров такой инструмент — находка. Прежде чем закармливать модель признаками, полезно глазами увидеть структуру данных: как меняется ликвидность, где возникают аномалии, какие зоны повторяются. Это позволяет строить более осмысленные фичи и проверять гипотезы не в абстракции, а на живой микроструктуре рынка.

Техническая часть

Стек: NumPy и Matplotlib для чисел и генерации PNG, Pillow (PIL) для оптимизации графики и, наконец, OpenSeadragon для работы в браузере. Эта комбинация позволяет эффективно обрабатывать гигабайты потенциальных данных.

Код открыт на https://github.com/empenoso/MOEX-OrderBook-DeepZoom

Формат и структура

Данные хранятся в.npz — это бинарные архивы NumPy, идеальные для хранения огромных многомерных массивов. Структура проста и быстра: A/B — 50 уровней цен Ask/Bid (цены спроса и предложения), vA/vB — соответствующие им объемы. Такая структура, близкая к матрице, максимально эффективна для Data Engineering и скоростного анализа.

Временный сервис работает и с телефона
Временный сервис работает и с телефона

Пайплайн: от тика до тепловой карты

  1. Биннинг (агрегация). Чтобы стабилизировать визуальное разрешение (ось X = 12 000px) и справиться с хаосом необработанных тиков (событий), мы агрегируем данные в фиксированные временные слоты. Это позволяет уместить неделю биржевой активности в HD карту без потери общей структуры и видимых аномалий.

  2. Математика объемов (np.log1p). Ключевая деталь: логарифмирование объемов. Разница между ритейл‑заявкой и крупным фондом может достигать 4-х порядков. Линейная шкала убивает детали, делая мелкие, но важные намерения невидимыми. Функция np.log1p() сжимает этот разброс, позволяя на одной тепловой карте видеть как «бумажные» ордера, так и реальные ликвидные «плиты».

  3. Генерация и Тайлинг. Мы создаем огромный PNG (до 12 000 пикселей в ширину), который затем Pillow нарезает на пирамиду мелких (256px) тайлов с манифестом.dzi. Это суть Deep Zoom: браузер загружает только видимые плитки, обеспечивая плавный, Google Maps‑подобный скроллинг и масштабирование (через OpenSeadragon) без необходимости загружать весь гигабайтный файл.

Примеры

Акции Газпром GAZP в августе на MOEX (TQBR)
Акции Газпром GAZP в августе на MOEX (TQBR)
МКПАО "Т-Технологии" (T) – котировки на MOEX (TQBR) в декабре
МКПАО «Т‑Технологии» (T) — котировки на MOEX (TQBR) в декабре
ПАО "Татнефть" им. В.Д. Шашина (TATN) – в декабре
ПАО «Татнефть» им. В.Д. Шашина (TATN) — в декабре

Как запустить у себя?

Процесс максимально прост и понятен для любого разработчика:

  1. Клонируйте репозиторий и установите зависимости: git clone ..., затем pip install -r requirements.txt.

  2. Поместите файлы с историей стакана (ваши .npz) в папку npz_data/.

  3. Запустите оркестратор: python main.py (он нарежет данные, создаст Ultra‑HD карты и Deep Zoom тайлы).

  4. Запустите локальный сервер и откройте http://localhost:8000.

Важный дисклеймер: мой код — это «плеер» (визуализатор), который умеет работать с готовым форматом. «Кассета» (исторические данные Московской Биржи) является платной. Скрипт ждет готовые .npz файлы, которые вы должны предоставить самостоятельно. Если нет доступа к платным данным, то можно самостоятельно накопить историю через API брокера — это бесплатно и доступно для частного лица.

Заключение

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

Если вам интересно покопаться внутри рынка — забирайте репозиторий, улучшайте, экспериментируйте, дополняйте. Чем больше мы делаем таких инструментов, тем меньше рынок остаётся «чёрным ящиком» и тем больше у частных инвесторов п��является возможностей понимать происходящее, а не гадать.

Спасибо, что дочитали до конца. Если хотите увидеть живые примеры или пообщаться — пишите в Telegram. Буду рад обсудить, подсказать и услышать ваши идеи.

Автор: Михаил Шардин
🔗 Моя онлайн‑визитка
📢 Telegram «Умный Дом Инвестора»

16 декабря 2025