Биржевой бот на Python — часть 1

Пишем простого бота для поиска арбитражных ситуаций

Влад Скуришин
3 min readJan 30, 2018

В одно время активно пилил букмекерских ботов и недавно заинтересовался очень похожей областью — криптовалютными биржами. В качестве первого проекта, который позволил бы мне разобраться с необъятным миром ордеров, спредов, шортов стал арбитражный бот, работающий внутри одной биржи — Poloniex.

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

Терминология

Попробую описать необходимые для нас термины.

Криптовалютная биржа

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

Ордер

Для заключение сделки продажи или покупки необходимо открыть биржевую заявку — ордер.

Ордер может быть описан следующими параметрами: пара, стоймость, объем, тип операции. Например:

Из данной таблицы видно, что вы можете купить 0.5 ETH за 1 BTC.

Пара читается справа налево при совершении операции. Например:

  • [BTC_ETH, Продажа] — продаю ETH за BTC,
  • [BCH_ETH, Покупка] — покупаю ETH за BCH.

Биржевой стакан

Если вы откроете страницу торгов на бирже Poloniex, то увидите ордера на продажу — SELL ORDERS и ордера на покупку — BUY ORDERS, которые выставляют трейдеры. Данные таблицы называются биржевым стаканом и отображают информацию о том сколько и за какую цену хотят купить / продать валюту.

Биржевой стакан на Poloniex

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

Арбитражная ситуация

Арбитражная ситуация — это ситуация, при которой за счет разницы в оценке актива (в данном случае валюты) трейдер может получить прибыль.

Например на бирже Poloniex есть три пары валют: BTC, BCH, ETH. И представим, что в биржевом стакане были созданы следующие ордера:

Данная таблица демонстрирует арбитражную ситуацию внутри биржы. Если вы выполните ордера, выставленные трейдерами (совершите с ними сделку) :

  • 1 BTC => 10 ETH
  • 10 ETH => 8 BCH
  • 8 BCH => 1.6 BTC

то останетесь в прибыли на 0.6 BTC, так как изначально имели 1 BTC.

API

На Poloniex доступна документация API. В рамках нашей задачи нас интересует раздел Public API Methods, метод returnOrderBook.

Order Book — является описанным выше биржевым стаканом, который возвращается в JSON формате, а не на web-интерфейс.

Попробуйте перейти по ссылке Poloniex API. В результате вы должны получить ответ для BTC_ETH, похожий на этот:

{
"asks":[["0.06207911",32.58783525]],
"bids":[["0.06184411",0.69326675]],
"isFrozen":"0",
"seq":466945222
}
  • asks - ордера на продажу;
  • bids - ордера на покупку;

Меня параметр currencyPair, можно получать список ордеров для различных валют.

Замечание: существует пара BTC_ETH, но обратной ETH_BTC нет. Поэтому если вы хотите выполнить покупку ETH_BTC, вам необходимо сделать продажу в BTC_ETH.

Задача

В итоге нам необходимо решить следующие задачи:

  • Выполнить парсинг API криптовалютной биржи Poloniex, а именно метода returnOrderBookи реализация алгоритма поиска арбитражных ситуации;
  • Реализовать архитектуру, при которой один поток парсит API и создает отдельные потоки, которые ищут арбитражные ситуации для разных валют;
  • Решить проблему с отсутствием обратной пары. Например: существует пара BTC_ETH, но обратной ETH_BTC нет;
  • Выводить результат поиска в консоль или в Telegram Bot.

В следующей части мы рассмотрим реализацию данного бота на языке программирования Python.

--

--