Заметки о работе криптовалютного торгового терминала на примере API Binance
Меня зовут Mike. Моя команда на протяжении 3х лет занимается разработкой и продвижением торгового терминала MoonBot и связанных с ним ресурсов: чатов, каналов в Телеграме, сигнального канала, сайта статистики торгов, форума и проч. Полный перечень наших ресурсов приведен в конце статьи.
В процессе работы мы успешно преодолели множество трудностей и решили множество интересных задач, но одну решить не можем. Связана она с работой API Binance, лучшей (даже несмотря на эти проблемы API) криптовалютной биржей на сегодняшний день.
Данная статья предназначена прежде всего нашим пользователям, торгующим на терминале MoonBot. Статья также может быть интересной и тем, кто использует другие скальперские терминалы для торгов на бинансе, и сталкивался с описанными ниже проблемами. Главная цель статьи — объяснить пользователям, что происходит, и донести до бинанса информацию о том, что работу 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.
Обратим внимание, речь идет прежде всего о скальперских терминалах и ботах, каковым является МунБот, где трейдеру важны доли секунды для анализа рыночной ситуации и управления ордерами, а в автоторговле важны миллисекунды. Если вы торгуете в среднесрок, то можете и вовсе не замечать лагов. Но если вы занимаетесь скальпингом, если вы хотите иметь идеальную отзывчивость ПО, идеальную точность тикового графика и управления ордерами — для вас вопрос лагов очень важен! Многие пользователи МунБота застали времена, когда биржа работала без лагов, поэтому им есть с чем сравнивать.
Лаг, о котором говорим мы — это задержка между событием и получением информации о нем более, чем в 500мс. Многие наши пользователи считают допустимым еще меньшие значения в 200–300мс при ручной торговле, а в автоторговле при значениях больше 50мс уже стоит выключать ботов.
Вот пример, как выглядит лаг на графике:
Если вы не пользователь МунБота, вид этого графика может вас испугать, но тут все просто — разные линии — это значения цены BTC/USDT, на бинансе, полученные из разных источников (цена сделок, цена ASK в стакане, цена маркировки). Очевидно, что на самом деле в каждый момент времени цена BTC имела примерно одинаковое значение, поэтому все линии должны совпадать. Но они не совпадают из-за того, что цены сделок приходили с задержкой в 10–20 секунд против цен в стакане, и на графике видна старая цена, с огромным запаздыванием!
Мы собрали точные данные о лагах со всех работающих МунБотов на графике.
На этом графике ниже пример того, как были распределены задержки получения сделок с бинанса на протяжении суток 14.07.2020
Онлайн-статистика лагов за последние сутки тут :
https://api.moon-bot.com/latency/ru.html
данные обновляются раз в 20 секунд.
Неделю назад Binance сделал новый вебсокет fstream3.binance.com, нам было предложено проверить его в работе. Обнаружилось, что на этом сокете нет поддержки сжатия данных (permessage-deflate), вследствии чего ситуация с лагом еще больше усложнилась: теперь помимо зависимости от серверов Бинанса, вы зависите еще от качества своего интернета: объем данных без сжатия слишком велик, и дополнительный лаг вносится вашим провайдером.
Мы сразу сообщили об этой недоработке с сжатием в Бинанс, однако к нашему глубочайшему удивлению сегодня в новостях был опубликован этот сокет … все еще без исправления сжатия.
Кажется, биржа Бинанс настолько торопится увеличить объемы торгов и привлечь как можно больше пользователей, что на вопросы контроля качества времени совсем не остается.
Краткое резюме с техническими подробностями о работе MoonBot с API Бинанса
Тиковый график строится по следующим вебсокет потокам:
Фьючерсы: wss://fstream.binance.com/ws/<symbol>@aggTrade
Спот: wss://stream.binance.com:9443/ws/<symbol>@trade
Лаг на графике означает, что данные с этих потоков приходят с задержками. Если вы видите на графике, что сделки отстают на N секунд, значит ваш ПК получает данные с Бинанса с отставанием в N секунд.
Если вы видите на графике разрывы, значит в эти моменты ваш ПК физически не получает данные с Бинанса на указанных выше адресах. Если в МунБоте поставить уровень логирования на 5, то вы скорее всего увидите в логе тайм-ауты соединения.
Сравнить свои показатели лагов с другими пользователями и посмотреть общую картину лагов на Бинансе за текущие сутки можно на этом сайте https://api.moon-bot.com/latency/ru.html
Наши ресурсы:
Telegram чаты и каналы:
- Сайт: инструкции, загрузки, блог https://moon-bot.com
2. Новостной канал MoonBot https://t.me/MoonBotNews
3. Общие вопросы, тех вопросы, обсуждения, предложения по Мун Боту https://t.me/moon_bot_crypto
4. Чат по обсуждению спец. канала Мун бота с торговыми сигналами в Телеграмме https://t.me/crypto_moon_mafia
5. Чат по вопросам настроек Мун Бота https://t.me/MoonBotSettings
6. Теория трейдинга и общефилософские вопросы https://t.me/moon_bot_kurilka
7. Англо-говорящая аудитория MoonBot https://t.me/Moon_Bot_Public
Статистика торгов на терминале MoonBot (ручная торговля и алготрейдинг) приведены данные по объемам и сделкам от всех пользователей, кто дал согласие на отправку сделок.
Обновляется онлайн https://stat.moon-bot.com/
Наш форум
Наш топик на крупнейшем крипто-форуме bitcointalk: https://bitcointalk.org/index.php?topic=2234450.msg22522662
English bitcointalk topic: https://bitcointalk.org/index.php?topic=2234450.msg22522662