Криптобиржи с поддержкой API: методика проверки качества связи

Ошибка здесь может стоить дороже, чем неудачный сигнал: бот перестанет получать котировки, пропустит закрытие позиции или временно потеряет доступ к API из-за блокировки IP.
Я оцениваю криптобиржи с поддержкой API для торговых ботов по пяти вещам: ограничениям на запросы, задержке сети, устойчивости WebSocket, доступным метрикам квот и качеству проверки соединения. Универсального победителя в таком сравнении нет. Результат зависит от конкретного алгоритма, частоты запросов и расположения вашего сервера. Но несколько тестов до подключения реальных средств помогают увидеть скрытые ограничения заранее.
Архитектура лимитов: почему вес запроса важнее их количества
Лимит API часто описывают числом запросов за интервал. Этого недостаточно для оценки. Биржи могут присваивать разным запросам разный вес: обращение за текущим временем и запрос большого снимка стакана расходуют квоту неодинаково. Поэтому бот, который делает сравнительно мало обращений, способен исчерпать лимит раньше другого, если постоянно запрашивает тяжёлые данные.
Для Binance базовый лимит REST API для эндпоинтов /api/* составляет 6000 единиц веса в минуту на один IP-адрес. Это именно вес, а не 6000 одинаковых запросов. После исчерпания квоты сервер отвечает HTTP 429. Если продолжать отправлять запросы, IP может получить блокировку со статусом HTTP 418. Срок такой блокировки варьируется от 2 минут до 3 дней.
У Bybit базовое ограничение устроено иначе: 600 HTTP-запросов за 5-секундное окно на IP. При превышении можно получить ошибку 403 и временную блокировку на 10 минут. Эти цифры нельзя сравнивать напрямую с лимитом Binance: у бирж отличаются единицы измерения, интервалы, состав эндпоинтов и реакции на нарушение.
| Параметр | Binance | Bybit |
|---|---|---|
| Базовое ограничение REST | 6000 единиц веса в минуту на IP для /api/* | 600 запросов за 5 секунд на IP |
| Реакция на превышение | HTTP 429; дальнейшие запросы могут привести к HTTP 418 | Ошибка 403 и временная блокировка |
| Особенность WebSocket | Сессия живёт не более 24 часов | Не более 500 новых подключений за 5 минут |
Перед настройкой бота я бы разложила его поведение на виды обращений. Сколько раз он получает котировку? Как часто обновляет стакан? Запрашивает ли состояние ордеров циклом, хотя может получать обновления потоком? Повторяет ли неудачный запрос сразу, создавая всплеск нагрузки? Именно такие детали определяют, насколько быстро упрётся алгоритм в лимит.
Практически полезно разделить запросы на три группы:
1. Критичные для торговли. Получение состояния ордера, баланса или данных, без которых бот не может безопасно управлять позицией.
2. Частые рыночные данные. Котировки и стакан, которые разумно получать через WebSocket, если биржа и стратегия это позволяют.
3. Фоновые проверки. Синхронизация времени, диагностика и периодические запросы, которые можно выполнять реже или переносить на менее загруженные моменты.
Такое разделение помогает понять, какие обращения можно сократить первыми, если квота заканчивается. Без него разработчик часто видит только общий счётчик и не понимает, какой участок кода расходует лимит.
Считать нужно не только обращения. Считайте вес запросов, частоту повторов и то, что бот делает после ошибки.
Задержка сети и близость к серверам биржи
Когда говорят о задержке исполнения ордеров через API, нередко приводят одно значение ping. Оно может быть полезной подсказкой о сетевом маршруте, но не показывает время полного торгового запроса. ICMP ping не включает установление TCP-соединения, TLS-шифрование и обработку обращения на стороне биржи. Низкий результат команды ping сам по себе не доказывает, что ордер быстро дойдёт до торговой системы.
Для алгоритмической торговли важнее измерять round-trip time, или RTT: время от отправки API-запроса до получения ответа. Ещё один показатель — джиттер, то есть колебания задержки. Если один запрос проходит быстро, а следующий при тех же условиях заметно дольше, боту сложнее рассчитывать точный тайминг. Пакетные потери тоже важны: при них часть обращений не доходит или требует повторной отправки.
В методике имеет значение и география сервера. Для Bybit известна зона AWS в Сингапуре с идентификатором apse1-az3. Размещение собственного сервера ближе к инфраструктуре биржи может уменьшить сетевой путь, но не гарантирует более быстрое исполнение: на него также влияют загрузка сети и обработка запроса на стороне площадки. Для других бирж точные физические адреса серверов обычно не раскрываются, поэтому выбирать локацию только по предполагаемому адресу дата-центра рискованно.
Я бы проверяла связь с того же сервера и через тот же сетевой маршрут, которые будут использоваться ботом. Тест на домашнем компьютере мало говорит о производительности облачного сервера, где затем запустится алгоритм. И наоборот: хороший результат из дата-центра не переносится автоматически на домашнее подключение.
Для первичной оценки подходят лёгкие эндпоинты проверки связности и времени, например REST /api/v3/ping и /api/v3/time. Они позволяют измерять базовую задержку без создания торговой нагрузки. Но их результат следует трактовать аккуратно: это тест пути до API и ответа на простой запрос, а не замер времени сопоставления ордера.
Чтобы сравнение было осмысленным, фиксируйте не единичный лучший результат, а серию измерений. Смотрите на типичное время ответа, разброс и случаи резкого замедления. Отдельно отмечайте сетевые ошибки и тайм-ауты. Если сравниваете несколько криптобирж для алгоритмической торговли, используйте одну машину, одинаковые интервалы тестирования и сопоставимые типы запросов. Иначе разница может объясняться не биржей, а условиями измерения.
WebSocket: heartbeat и срок жизни соединения
WebSocket удобен для получения рыночных обновлений без постоянного опроса REST API. Но он не отменяет лимиты и не означает, что соединение будет работать бесконечно. Биржи ограничивают создание сессий, а сами соединения могут обрываться из-за сетевых сбоев или правил платформы. Бот, который умеет только подключиться, но не умеет восстановить поток и проверить актуальность данных, уязвим даже при хорошем RTT.
У Binance одно WebSocket-соединение к потокам действует не более 24 часов, после чего биржа принудительно его закрывает. На Spot WebSocket API сервер отправляет ping-фрейм каждые 20 секунд. Клиент должен ответить pong в течение минуты, иначе соединение может быть разорвано. Следовательно, для непрерывной работы бота нужно предусмотреть плановое переподключение и обработку heartbeat.
У Bybit отдельное ограничение касается новых WebSocket-сессий: не более 500 подключений за 5 минут. Это не повод открывать новое соединение для каждого инструмента или потока. Если бот после каждой краткой сетевой ошибки массово переподключается, он может создать собственную проблему: частые попытки восстановления сами приведут к срабатыванию ограничения.
В настройке стоит предусмотреть несколько состояний соединения: активное, потерянное и восстанавливаемое. После разрыва бот должен повторно подключиться с разумной задержкой, проверить, что поток снова поступает, и убедиться, что данные не устарели. Если стратегия использует локальный стакан, восстановление должно учитывать необходимость заново получить исходный снимок и согласовать его с последующими обновлениями. Иначе соединение формально восстановится, а расчёты останутся неверными.
Проверяйте также, как библиотека клиента обрабатывает ping и pong. Некоторые библиотеки делают это автоматически, но полагаться на такое поведение без проверки опасно. В логах должны быть видны время последнего сообщения, факт переподключения и причина закрытия сессии. Тогда сбой можно отличить от ситуации, когда связь формально открыта, но данные перестали приходить.
Мониторинг квот: смотреть на ответ, а не гадать
API биржи может сообщать о расходовании лимитов в заголовках REST-ответа. Binance, например, возвращает метрику вида X-MBX-USED-WEIGHT-(intervalNum)(intervalLetter). У Bybit для этого предусмотрены заголовки X-Bapi-Limit-Status и X-Bapi-Limit-Reset-Timestamp.
Для бота это полезнее, чем строить оценку только по числу отправленных запросов. Локальный счётчик может расходиться с фактической квотой: запросы могут иметь разный вес, часть обращений может идти от других процессов с того же IP, а ограничения могут обновляться по временным окнам. Заголовки ответа дают сигнал о том, как биржа учитывает нагрузку в конкретном случае.
Я бы сохраняла эти значения вместе с временем ответа и типом эндпоинта. Тогда при приближении к лимиту алгоритм сможет снизить частоту второстепенных запросов, а не продолжать работать до первой ошибки. Особенно важно учитывать процессы, запущенные на одном IP: квота может быть общей для них, и отдельный бот не всегда видит полную картину.
При HTTP 429 безопаснее не повторять запрос немедленно в цикле. Такой подход усиливает нагрузку в момент, когда биржа уже сообщает о превышении. Следует остановить или замедлить повторные обращения, учесть временное окно и восстановить работу постепенно. При HTTP 418 на Binance проблема серьёзнее: это признак блокировки IP, а срок может составить от нескольких минут до нескольких дней. На Bybit ответ 403 также требует остановить частые повторы и выяснить причину, прежде чем возобновлять нагрузку.
Для настройки API-ключей на бирже полезно заранее разделить доступы. Если ключ нужен торговому боту, не выдавайте ему права, которые не требуются для стратегии. Ограничение ключа по IP, если биржа его поддерживает, уменьшает последствия утечки, но требует аккуратного управления адресом сервера. Перед запуском проверьте, что ключ не попал в журналы, сообщения об ошибках или публичный репозиторий. Секрет API — это доступ к аккаунту в пределах выданных ему полномочий.
Диагностика связности перед запуском
Проверку API лучше проводить без реальных торговых ордеров. Для базовой оценки используйте лёгкие эндпоинты, такие как /api/v3/ping и /api/v3/time, или WebSocket ping с весом 1 IP Weight. Эти запросы помогают проверить доступность сервиса и оценить время ответа, не создавая торговую нагрузку. Они не заменяют тестирование ордеров в безопасной среде, но позволяют отсеять очевидные проблемы с маршрутом, тайм-аутами и DNS.
Я бы выстроила проверку в таком порядке:
1. Запустить серию простых запросов с будущего сервера бота. Записать RTT, разброс значений, тайм-ауты и ошибки. Не делать вывод по одному удачному ответу.
2. Проверить квоты и заголовки. Убедиться, что клиент сохраняет сведения о весе или статусе лимита, если биржа их возвращает.
3. Подключить WebSocket и проверить heartbeat. Посмотреть, отвечает ли клиент на ping, замечает ли разрыв и умеет ли восстановить поток без лавины новых подключений.
4. Проверить поведение при ошибках. Убедиться, что HTTP 429 и 403 не запускают бесконечный цикл повторов. Для Binance учитывать, что продолжение запросов после 429 может привести к HTTP 418.
5. Ограничить права и проверить хранение ключа. Оставить только необходимые разрешения и не размещать секрет в конфигурации, доступной посторонним.
Во время проверки не нужно намеренно провоцировать блокировку IP. Гораздо безопаснее оценивать нагрузку по заголовкам и заранее заложить запас относительно доступной квоты. Сценарий бота в рабочее время тоже может отличаться от теста: несколько процессов, обновления рынка и повторные запросы одновременно расходуют ресурсы быстрее, чем изолированный запуск.
Что считать надёжной площадкой для бота
Криптобиржи с поддержкой API стоит сравнивать не по рекламному обещанию скорости, а по тому, можно ли наблюдать и контролировать их поведение. Для меня хорошая площадка в этом смысле даёт понятные ограничения, сообщает о расходовании квоты, поддерживает устойчивые потоки данных и позволяет безопасно восстановиться после сетевого сбоя. При этом даже подробная документация не заменяет тест с вашей архитектурой.
До подключения капитала я бы проверила три вещи: выдерживает ли сервер биржи выбранный маршрут, укладывается ли бот в лимиты с запасом и корректно ли он переживает разрыв WebSocket. Если хотя бы один пункт не проверен, стабильность пока существует только в расчётах. Реальную надёжность показывают измерения с рабочего сервера, логи ответов API и отсутствие бесконтрольных повторов.
Итог проверки должен быть прагматичным: известна задержка и её разброс, понятен расход лимита, предусмотрено переподключение, а ключ не имеет лишних прав. Если этих условий нет, перенос бота на другую биржу может ничего не исправить. Сначала нужно устранить слабое место в маршруте, логике запросов или восстановлении соединения, а уже потом сравнивать площадки по фактическому поведению API.