Биржевой бот на Python — часть 1
Пишем простого бота для поиска арбитражных ситуаций
В одно время активно пилил букмекерских ботов и недавно заинтересовался очень похожей областью — криптовалютными биржами. В качестве первого проекта, который позволил бы мне разобраться с необъятным миром ордеров, спредов, шортов стал арбитражный бот, работающий внутри одной биржи — Poloniex.
Задача является простой и по сути как такого профита получить с такого бота нельзя, так как время жизни одной арбитражной ситуации в рамках конторы очень мала (около секунды). Но опять же, этого достаточно для входа в предметную область.
Терминология
Попробую описать необходимые для нас термины.
Криптовалютная биржа
Криптовалютная биржа — это элемент инфраструктуры валютного рынка, деятельность которой состоит в предоставлении услуг по организации и проведению торгов, в ходе которых участники заключают сделки с криптовалютой.
Ордер
Для заключение сделки продажи или покупки необходимо открыть биржевую заявку — ордер.
Ордер может быть описан следующими параметрами: пара, стоймость, объем, тип операции. Например:
Из данной таблицы видно, что вы можете купить 0.5 ETH за 1 BTC.
Пара читается справа налево при совершении операции. Например:
- [BTC_ETH, Продажа] — продаю ETH за BTC,
- [BCH_ETH, Покупка] — покупаю ETH за BCH.
Биржевой стакан
Если вы откроете страницу торгов на бирже Poloniex, то увидите ордера на продажу — SELL ORDERS и ордера на покупку — BUY ORDERS, которые выставляют трейдеры. Данные таблицы называются биржевым стаканом и отображают информацию о том сколько и за какую цену хотят купить / продать валюту.
Наша задача найти арбитражную ситуацию, используя информацию из биржевого стакана.
Арбитражная ситуация
Арбитражная ситуация — это ситуация, при которой за счет разницы в оценке актива (в данном случае валюты) трейдер может получить прибыль.
Например на бирже 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.