Уважаемые пользователи Голос!
Сайт доступен в режиме «чтение» до сентября 2020 года. Операции с токенами Golos, Cyber можно проводить, используя альтернативные клиенты или через эксплорер Cyberway. Подробности здесь: https://golos.io/@goloscore/operacii-s-tokenami-golos-cyber-1594822432061
С уважением, команда “Голос”
GOLOS
RU
EN
UA
chiterelk
6 лет назад

Баг API биржи BITTREX (1)

Думаю, что не один я при написании торгового бота, работаю с API биржи BITTREX. Также, есть люди, которые пишут удобные клиенты для бирж и в частности для этой. И я хочу поделиться информацией о багах которые мне встретились и попортили нервы при работе с этой биржей и её API, так-как бот торгует реальными деньгами и ошибки в его работе могут привести к небольшим или большим финансовым потерям.

Багов у BITTREX-а не мало, из-за этого после названия статьи стоит единичка в круглых скобках. Не исключено, что появятся еще статьи с таким названием, а число в этих скобках может стать двузначным.

Я и первый баг приветствуем вас! Начинаем!

API BITTREX-а имеет инструмент для получения открытых ордеров. Получить можно ордера по какой-то одной паре или по всех сразу.

После отправки запроса мы получаем ответ в формате JSON который имеет вид как на картинке сверху.
Мой бот имеет функцию для обработки ответа в этом формате:

В ней все просто. Есть объект класса QList который хранит в себе объекты класса QString.

Так вот задача этой функции - это из массива result по очереди скопировать uuid каждого открытого ордера и записать его в объект openOrders.

В этой функции много проверок, сам BITTREX советует всегда проверять флаг success, а остальные проверки я добавил в процессе отладки.

Если полученный ответ будет удовлетворительным и пройдет все проверки, то вся нужная информация окажется в openOrders и функция даст сигнал окончания обработки и передаст openOrders другой функции задача которой проверить есть ли в openOrders uuid ордера который бот выставлял. Если uuid нашего ордера не нашлось, то значит он уже исполнен.

Изначально, эта функция прекрасно работала и выглядела приблизительно так:

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

Придя из университета первым делом, я подбежал к ноутбуку для того, чтобы посмотреть сколько бот наторговал. Я немного расстроился, что бот осуществил всего один трейд. Но еще больше я расстроился, когда зашел на вкладку Wallet биржи Bittrex и увидел, что мои ефирки куда-то пропали. Уже через минуту я обнаружил, что у меня просто весит не исполненный ордер. Но бот почему-то подумал, что он исполнен. Я решил забить и поставил бота заново, и история повторилась.

После этого я начал делать всякие проверки и выводить в консоль, всю информацию которая мне может помочь отследить ошибку. Этот баг начал повторяться несколько раз в день.
Оказывается, Bittrex иногда может прислать ответ, что у меня нету открытых ордеров, хоть на самом деле это не так. А мой бот с радостью верит этой бирже и принимает эту информацию за успешный трейд. Но если отправить еще один запрос, то нам придёт уже правдивый ответ, в котором указаны, еще не исполненные, открытые мной ордера.
После обнаружения этой особенности, мне пришлось изменить мою функцию. Теперь моя функция проверяет открыт ли ордер и только после того как несколько раз подряд подтвердится, что ордер исполнен, то бот решает, что нужный ордер закрыт и только после этого продолжает выполнять свою работу.


По коду видно, что теперь мой бот принимает, что ордер исполнен только после четырех подряд подтверждений.

Так-что, НЕ ВЕРЬТЕ BITTREX-у С ПЕРВОГО РАЗА!

Надеюсь, что обнаруженная мною особенность поможет многим избежать ошибок. Удачи вам!

4
0.054 GOLOS
На Golos с December 2017
Комментарии (1)
Сортировать по:
Сначала старые