Слогер Создать блог
Разработка

Как получать биржевые данные в реальном времени: WebSocket вместо REST API

Каждую секунду дёргать API — не вариант: данные устаревают, лимиты тают. Рассказываю, как перейти на WebSocket, что учесть и где обычно ломается подключение.

Бот опрашивал биржевой API раз в секунду и всё равно опаздывал. Знакомо? Так было, пока я не перешёл на WebSocket: вместо того чтобы выпрашивать цену, получаешь поток данных, который сам приходит в момент сделки. Разница — как между скриншотом вчерашнего графика и живой лентой котировок.

Почему polling проигрывает

Когда код дёргает REST API каждую секунду, он видит мир с опозданием. Для обычного приложения — мелочь. Для арбитража или скальпинга — вечность: узкое окно между ценами закрывается раньше, чем приходит ответ.

И это не единственная проблема.

  • Каждый запрос сжигает rate-limit кредиты. Начнёте опрашивать чаще — упрётесь в блокировку.
  • Цена в ответе уже устарела к моменту обработки.
  • Нет механизма восстановления: если запрос упал, цикл просто продолжается вслепую.

Симптомы знакомы любому, кто писал торгового бота на коленке. Раньше это казалось нормой, пока не узнаёшь про WebSocket.

WebSocket — это постоянное соединение: сервер сам отправляет сообщение, когда в стакане или ленте сделок что-то меняется.

Сравнение: REST polling vs WebSocket

КритерийREST pollingWebSocket
СоединениеНовый HTTP-запрос каждую секундуОдно постоянное соединение
Задержка данныхЦена устаревает на секунду и большеМиллисекунды после события
Расход лимитовКаждый запрос тратит лимитОдин коннект без повторных рукопожатий
ОтказоустойчивостьВстроенной обработки сбоев нетНужно самому ловить ConnectionClosed и переподключаться

Как это выглядит в коде

В Python достаточно библиотеки websockets. Подключаетесь к combined stream Binance: wss://stream.binance.com:9443/stream?streams=btcusdt@ticker/btcusdt@trade — и в цикле читаете сообщения.

Формат простой: каждая порция данных оборачивается объектом с полем stream (например, btcusdt@ticker) и data (сам payload). В ticker приходят лучшие bid/ask — поля b и a. В trade — цена p и объём q.

Дальше логика тривиальная: если stream заканчивается на @ticker, печатаем цену; если на @trade — печатаем сделку. Вся магия — в async with websockets.connect(...), а не в цикле опроса.

Три грабли, о которые спотыкаются

  1. Игнорирование ping/pong. Некоторые биржи ждут ответа на ping-фрейм, иначе отключают. Библиотеки обычно делают это сами, но если пишете свой клиент — не забудьте pong.
  2. Сообщения приходят не по порядку и могут дублироваться. Ориентируйтесь на event time или trade time, чтобы выстроить правильную последовательность.
  3. Тяжёлые вычисления внутри цикла. Обработка каждого сообщения должна быть лёгкой. Сложную логику выносите в asyncio.Queue или воркеры, иначе не успеете за потоком.

Ещё важный момент — backpressure. Если сообщений слишком много, вы не сможете обработать всё. Надо либо буферизовать, либо осознанно отбрасывать. Молчаливое отставание хуже явного дропа.

Что это даёт на практике

Живой поток данных открывает то, что на polling выглядело фантастикой:

  • Micro-скальпинг — ловить спреды, живущие меньше секунды.
  • Детект дисбаланса стакана — реагировать на резкие сдвиги до движения цены.
  • Автоматический хедж — подстраивать фьючерсную позицию в момент изменения спота.

Тот же код работает и для других бирж: Coinbase Pro, Kraken, Alpaca. Меняется только URL и форма payload, логика остаётся.

План перехода

  1. Выберите биржу с WebSocket API. Начните с Binance — документация внятная.
  2. Подключите один поток тикера и просто печатайте изменения.
  3. Добавьте обработку ConnectionClosed с повторным подключением через пару секунд.
  4. Вынесите обработку сообщений в отдельную очередь, чтобы цикл оставался лёгким.
  5. Прогоните на исторической записи, прежде чем включать в боевую стратегию.

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

По материалам: finance. Текст переработан редакцией Слогера.

← На главную

Рекламное место — Конец поста
Реклама · Слогер

Комментарии (0)

Войдите, чтобы комментировать.

Пока нет комментариев. Будьте первым.

Разработка

Как переписать личное портфолио с Angular 12 на Angular 22: разбор прыжка через десять версий

Личный сайт на Angular 12, продакшен на Angular 19 — и решение переписать всё сразу на 22. Что даёт чистая переписка вместо цепочки миграций, и почему инфраструктура и SVG-математика важнее списка логотипов в резюме.

Слогер 04.10.2026 ▲ 0
Карьера

Как выбрать тренажёр для mock-интервью: разбор AI-сервисов, живых интервьюеров и банков задач с ценами

Собеседование проверяет не только код, но и умение объяснять. Разбираем, какие сервисы для репетиции интервью стоят своих денег, а какие путают с тренажёрами.

Слогер 04.10.2026 ▲ 0
Разработка

Как отвечать на вопросы по Git на собеседовании: разбор механизмов вместо заученных команд

Git спрашивают почти на каждом техническом интервью, но проверяют не флаги, а модель репозитория в твоей голове. Разбираем частые вопросы и то, что за ними стоит.

Слогер 04.10.2026 ▲ 0
Карьера

Как составить резюме, которое пройдёт ATS: разбор для студентов-инженеров

Автоматические системы отсеивают резюме до того, как их увидит рекрутер. Разбираем, как описать дипломный проект, какие разделы поставить вперёд и какие ошибки в вёрстке убивают документ.

Слогер 04.10.2026 ▲ 0
Fluxs lenta
Реклама · fluxs.ru
Карьера

Как подавать заявки на вакансии, не заполняя формы вручную: разбор в три шага

Расширение для браузера заполняет однотипные формы откликов за вас и через 15 минут присылает отчёт. Разбираем, как это устроено, где границы метода и какие настройки экономят нервы.

Слогер 03.10.2026 ▲ 0
Карьера

5 навыков разработчика, без которых технические знания простаивают

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

Слогер 03.10.2026 ▲ 0
Карьера

Как автоматизировать отклики на вакансии: разбор расширения, которое отправляет заявки за вас

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

Слогер 03.10.2026 ▲ 0
Fluxs lenta
Реклама · fluxs.ru
Разработка

Чем опенсорс-команда отличается от работодателя: опыт участника проекта Pyxel из ESA

Инженер пришёл в открытый проект ESA с одним коммитом и получил там то, чего не дал ни один наниматель: подробную обратную связь, включённость и спасибо за каждый шаг. Разбираем, что именно сработало — и как повторить это у себя.

Слогер 02.10.2026 ▲ 0
Карьера

Почему процент откликов врёт: как считать воронку поиска работы и просроченные счета

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

Слогер 02.10.2026 ▲ 0
Карьера

Как получать пользу от IT-ассоциации: пять слоёв участия и план на первые 30 дней

Членство само по себе ничего не даёт. Разбираем, что реально можно делать внутри профессионального сообщества, что доступно всегда, а что зависит от людей, города и обстоятельств.

Слогер 02.10.2026 ▲ 0
Fluxs lenta
Реклама · fluxs.ru