В рамках данного задания необходимо реализовать арбитражного бота криптовалютной биржи Poloniex.
Разберемся с основной терминологией.
Криптовалютная биржа - это элемент инфраструктуры валютного рынка, деятельность которой состоит в предоставлении услуг по организации и проведению торгов, в ходе которых участники заключают сделки с криптовалютой.
Для заключение сделки продажи или покупки необходимо открыть биржевую заявку - ордер.
Ордер может быть описан следующими параметрами: пара, стоимость, объем, тип операции. Например:
Пара | Стоимость | Объем | Тип операции |
---|---|---|---|
BTC_ETH | 1 | 0.5 | Продажа |
Из данной таблицы видно, что вы можете купить 0.5 ETH за 1 BTC.
Пара читается справа налево при совершении операции. Например:
- [BTC_ETH, Продажа] - продаю ETH за BTC,
- [BCH_ETH, Покупка] - покупаю ETH за BCH.
Если вы откроете страницу торгов на бирже Poloniex, то увидите ордера на продажу - SELL ORDERS и ордера на покупку - BUY-ORDERS, которые выставляют трейдеры. Данные таблицы называются биржевым стаканом и отображают информацию о том сколько и за какую цену хотят купить / продать валюту.
Наша задача найти арбитражную ситуацию, используя информацию из биржевого стакана.
Арбитражная ситуация - это ситуация, при которой за счет разницы в оценке актива (в данном случае валюты) трейдер может получить прибыль.
Например на бирже Poloniex есть три пары валют: BTC, BCH, ETH. И представим, что в биржевом стакане были созданы следующие ордера:
Пара | Стоимость | Объем | Тип операции |
---|---|---|---|
BTC_ETH | 0.1 | 10 | Продажа |
BTC_BCH | 0.2 | 8 | Покупка |
BCH_ETH | 0.8 | 10 | Покупка |
Данная таблица демонстрирует арбитражную ситуацию внутри биржи. Если вы выполните ордера, выставленные трейдерами (совершите с ними сделку) :
- 1 BTC => 10 ETH
- 10 ETH => 8 BCH
- 8 BCH => 1.6 BTC
то останетесь в прибыли на 0.6 BTC, так как изначально имели 1 BTC.
На 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
- ордера на покупку;
В данном случае можно сказать:
- Что кто-то: продает ETH по цене 0.06207911 BTC. Всего у него 32.58783525 ETH.
- И кто-то покупает ETH по цене 0.06184411 BTC. Всего он хочет купить 0.69326675 ETH.
Меня параметр currencyPair
, можно получать список ордеров для различных валют.
Замечание: существует пара BTC_ETH, но обратной ETH_BTC нет. Поэтому если вы хотите выполнить покупку ETH_BTC, вам необходимо сделать продажу в BTC_ETH.
Вам необходимо:
- Выполнить парсинг API криптовалютной биржи Poloniex, а именно метода
returnOrderBook
(Возможно уже есть какие-то готовы решения? XCha... or HttpCli...); - Реализовать архитектуру, при которой один поток парсит API и создает отдельные потоки, которые ищут арбитражные ситуации для разных валют;
- Решить проблему с отсутствием обратной пары. Например: существует пара BTC_ETH, но обратной ETH_BTC нет;
- Выводить результат поиска в консоль или в Telegram Bot.
В качестве шпаргалки вы можете посмотреть реализацию на Python по ссылке.
Если у вас есть вопросы, создайте issue в vectree/resources.
В ближайшее время будет созданы отдельные задачи с описанием.