Post
Topic
Board Кодеры
Merits 25 from 3 users
Topic OP
Лаги API бинанса
by
mvgx
on 23/08/2020, 16:34:56 UTC
⭐ Merited by cryptoman77777 (15) ,suchmoon (7) ,Ratimov (3)
Меня зовут Mike. Моя команда на протяжении 3х лет занимается разработкой и продвижением торгового терминала MoonBot и связанных с ним ресурсов: чатов, каналов в Телеграме, сигнального канала, сайта статистики торгов, форума и проч. Полный перечень наших ресурсов приведен в конце статьи.

В процессе работы мы успешно преодолели множество трудностей и решили множество интересных задач, но одну решить не можем. Связана она с работой API Binance, лучшей (даже несмотря на эти проблемы API) криптовалютной биржей на сегодняшний день.

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

Проблема API бинанса — это лаги.

Данная проблема делится на 2:

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

Вторая- это так называемая проблема “Order Does Not Exist”, рассинхронизация БД биржи. Если вы видите такие строчки в логе, значит вас это тоже коснулось.

Суть проблемы: когда вы поставили новый ордер, он еще отсутствует в базе данных бинанса, и попадает туда лишь спустя некоторое время. По заявлению Бинанса, это время в норме не превышает 1 секунды, что вполне допустимо. На самом деле это время может превышать 5–10 минут, что абсолютно неприемлемо!

Когда мы пишем об этом в тех. поддержку, Бинанс отвечает, “используйте вебсокет”. Господа, на дворе 20 год, уже все давно используют вебсокет. Проблема в том, что по вебсокету информация отправляется только 1 раз, и если в момент отправки случился какой то лаг (см. п.1), или даже дисконнект, не важно на чьей стороне — информация об ордере не дойдет! И повторно уже не будет отправлена.

Некоторые скажут, что вебсокет соединение очень надежно, и как может не дойти информация? Очень просто. Самый наглядный пример — выдерните на секунду сетевой кабель из компьютера, и вы увидите на тиковом графике разрыв. Разрыв — это и есть период, в течении которого данные не поступали. Более сложные, и более реальные случаи — разнообразные сбои и перегрузки сетевого оборудования на всем пути от Токио (местоположения серверов BInance) до вашего ПК. Результат — соединение отваливается по таймауту. МунБот сразу же восстанавливает его, но часть данных уже безвозвратно потеряна.

Обратите внимание, мы говорим о торговой информации, жизненно важной для сохранения и преумножения депозита. Не страшно , если например до вас не дойдет информация о прогнозе погоды, но если будет потеряна важная информация об ордере — вы не сможете его вовремя закрыть и лишитесь средств.

Поэтому помимо вебсокета, МунБот использует для контроля состояния ордера функцию API GET /api/v3/order. Если по каким либо причинам обновление ордера по вебсокету не было получено, в ход идет запасная функция GET /api/v3/order, а она вследствии десинка не работает ! Точнее, работает, но спустя неопределенное время.

Мы собрали статистику, как долго эта функция может не работать. Ниже график:



На этом графике собрана статистика со всех торгующих ботов за сутки. Видно, что API функция для проверки состояния ордера не работала от 200 до 600 секунд !

Данный график обновляется в реальном времени, вместе с другой статистикой работы API Binance его можно посмотреть тут


Теперь подробнее о лаге в чистом виде
Т.е. о задержках между какими-либо событиями на бирже и получением информации о них по API.

Обратим внимание, речь идет прежде всего о скальперских терминалах и ботах, каковым является МунБот, где трейдеру важны доли секунды для анализа рыночной ситуации и управления ордерами, а в автоторговле важны миллисекунды. Если вы торгуете в среднесрок, то можете и вовсе не замечать лагов. Но если вы занимаетесь скальпингом, если вы хотите иметь идеальную отзывчивость ПО, идеальную точность тикового графика и управления ордерами — для вас вопрос лагов очень важен! Многие пользователи МунБота застали времена, когда биржа работала без лагов, поэтому им есть с чем сравнивать.

Лаг, о котором говорим мы — это задержка между событием и получением информации о нем более, чем в 500мс. Многие наши пользователи считают допустимым еще меньшие значения в 200–300мс при ручной торговле, а в автоторговле при значениях больше 50мс уже стоит выключать ботов.

Вот пример, как выглядит лаг на графике:



Если вы не пользователь МунБота, вид этого графика может вас испугать, но тут все просто — разные линии — это значения цены BTC/USDT, на бинансе, полученные из разных источников (цена сделок, цена ASK в стакане, цена маркировки). Очевидно, что на самом деле в каждый момент времени цена BTC имела примерно одинаковое значение, поэтому все линии должны совпадать. Но они не совпадают из-за того, что цены сделок приходили с задержкой в 10–20 секунд против цен в стакане, и на графике видна старая цена, с огромным запаздыванием!

Мы собрали точные данные о лагах со всех работающих МунБотов на графике.

На этом графике ниже пример того, как были распределены задержки получения сделок с бинанса на протяжении суток 28.08.2020 (очень тихий день, лаг не превышал 900мс)



Онлайн-статистика лагов за последние сутки тут: https://api.moon-bot.com/latency/ru.html
данные обновляются раз в 20 секунд.

Неделю назад Binance сделал новый вебсокет fstream3.binance.com, нам было предложено проверить его в работе. Обнаружилось, что на этом сокете нет поддержки сжатия данных (permessage-deflate), вследствии чего ситуация с лагом еще больше усложнилась: теперь помимо зависимости от серверов Бинанса, вы зависите еще от качества своего интернета: объем данных без сжатия слишком велик, и дополнительный лаг вносится вашим провайдером.

Мы сразу сообщили об этой недоработке с сжатием в Бинанс, однако к нашему глубочайшему удивлению сегодня в новостях был опубликован этот сокет … все еще без исправления сжатия.



Кажется, биржа Бинанс настолько торопится увеличить объемы торгов и привлечь как можно больше пользователей, что на вопросы контроля качества времени совсем не остается.

Краткое резюме с техническими подробностями о работе MoonBot с API Бинанса

Тиковый график строится по следующим вебсокет потокам:

Фьючерсы: wss://fstream.binance.com/ws/