Заметки о работе криптовалютного торгового терминала на примере API Binance и MoonBotМеня зовут 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 секунд против цен в стакане, и на графике видна старая цена, с огромным запаздыванием!Мы собрали точные данные о лагах со всех работающих МунБотов на графике.На этом графике ниже пример того, как были распределены задержки получения сделок с бинанса на протяжении суток 23.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/
@aggTrade
Спот: wss://stream.binance.com:9443/ws/@trade
Лаг на графике означает, что данные с этих потоков приходят с задержками. Если вы видите на графике, что сделки отстают на N секунд, значит ваш ПК получает данные с Бинанса с отставанием в N секунд.
Если вы видите на графике разрывы, значит в эти моменты ваш ПК физически не получает данные с Бинанса на указанных выше адресах. Если в МунБоте поставить уровень логирования на 5, то вы скорее всего увидите в логе тайм-ауты соединения.
Сравнить свои показатели лагов с другими пользователями и посмотреть общую картину лагов на Бинансе за текущие сутки можно на этом сайте https://api.moon-bot.com/latency/ru.html
Наши ресурсы:
Telegram чаты и каналы:
1. Сайт: инструкции, загрузки, блог 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/
Наш форум
http://forum.moon-bot.com/
Наш топик на крупнейшем крипто-форуме bitcointalk: https://bitcointalksearch.org/topic/m.22522662
English bitcointalk topic: https://bitcointalksearch.org/topic/m.22522662