Биржа Binance — одна из крупнейших площадок для торговли криптовалютами. Статистические данные с этой площадки одни из наиболее полных для ML. Поcмотрим какие данные имеются, в каком формате они представлены и как их получить оптимальным образом.
Данные с Binance доступны в запакованном ZIP файле. Например, для получения спотовых RAW Trades для биткойна ссылка будет следующая: https://data.binance.vision/?prefix=data/spot/monthly/trades/BTCUSDT/
Собственно, корневая ссылка для получения заархивированных данных: https://data.binance.vision/
Описание данных доступно здесь: https://github.com/binance/binance-public-data/
Разберем поподробнее формат для Trades и AggTrades.
Trades в Binance
Формат таблицы trades от Binance выглядит следующим образом:
trade Id | price | qty | quoteQty | time | isBuyerMaker | isBestMatch |
---|---|---|---|---|---|---|
51175358 | 17.80180000 | 5.69000000 | 101.29224200 | 1583709433583 | True | True |
Получить результаты в JSON можно, набрав в браузере: https://api.binance.com/api/v1/trades?symbol=BTCUSDT.
Принимает параметры:
- Обязательные:
- symbol — пара
- Необязательные:
- limit — кол-во возвращаемых записей (максимум 500, по умолчанию 500).
Пример результата выдачи raw trades:
{ "id": 959699953, "price": "31504.61000000", "qty": "0.12039400", "quoteQty": "3792.96601634", "time": 1626627195399, "isBuyerMaker": false, "isBestMatch": true }
- id — идентификатор сделки,
- price — цена по которой состоялась сделка.
- qty — количество в сделке,
- quoteQty — сумма сделки, произведение price * qty.
- time — время сделки в формате Unix TimeStamp.
- isBuyerMaker — сделка по покупке или продаже,
- isBestMatch — была ли встречная сделка. Этот параметр всегда true и его можно игнорировать
Флаг isBuyerMaker определяет строка в записи trade была продажа или покупка. Детальное объяснение есть здесь и здесь, но вообще:
- isBuyerMaker = true -> SELL
- isBuyerMaker = false -> BUY
AggTrades в Binance
Формат таблицы AggTrades выглядит следующим образом:
Aggregate tradeId | Price | Quantity | First tradeId | Last tradeId | Timestamp | Was the buyer the maker | Was the trade the best price match |
---|---|---|---|---|---|---|---|
0 | 0.20000000 | 50.00000000 | 0 | 0 | 1608872400000 | False | True |
Получить в JSON можно, вызывав API: https://api.binance.com/api/v1/aggTrades?symbol=BTCUSDT.
Принимает параметры:
- Обязательные:
- symbol — пара
- Необязательные:
- fromID — показывать начиная со сделки № (включительно)
- startTime — начиная с какого времени (включительно)
- endTime — заканчивая каким временем (включительно)
- limit — Кол-во записей (максимум 500, по умолчанию 500)
Результат выполнения запроса получения aggTrades:
{ "a": 848706820, // tradeId строки "p": "31628.13000000", // Цена "q": "0.19791500", // Количество "f": 959751237, // Первая tradeId "l": 959751237, // Последняя tradeId "T": 1626635052261, // Время сделки в формате Unix TimeStamp. "m": true, // Was the buyer the maker? "M": true // Was the trade the best price match? }
Ежедневные raw trades есть только за текущий месяц на каждый день, например, https://data.binance.vision/?prefix=data/spot/daily/aggTrades/BTCTUSD/.
По завершению месяца данные перемещаются в месячные, но там нет текущего (не закрытого) месяца. Например, https://data.binance.vision/?prefix=data/spot/monthly/aggTrades/BTCUSDT/.
Разница между Trades и AggTrades в Binance
Binance лимитирует не только количество запросов к API но и «вес» запросов. Собственно, поэтому не нужно грузить Binance историческими запросами, а нужно забирать их в виде zip файла отсюда.
api/v3/trades — запрос с весом 1 и используется для получения недавних raw trades. Максимальное количество = 1000. Отрабатывает очень быстро.
api/v3/historicalTrades — запрос с весом 5 для получения raw trades на любой временной интервал с момента, когда символ начал торговаться. Этот вызов может обращаться к очень старым данным, поэтому работает не быстро.
api/v3/aggTrades — запрос с весом 1 для получения aggregate trades по любому интервалу времени с момента начала торгов по символу. Этот вызов может обращаться к очень старым данным, поэтому работает не быстро.
Каждая запись в raw trade — это сделка между 1 покупателем (taker) и 1 продавцом (maker) по продаже некоторого количества по определенной цене.
Каждая запись в aggregate trade — это сделка между 1 покупателем и n продавцами, торгующими суммарным количеством индивидуальных raw trade-ов по некоторой цене.
Например, один пользователь размещает order на покупку 10 BNB по цене $16.50. Этот пользователь торгуется с 3-мя разными продавцами, предлагающими 2 шт., 5 шт. и 1 шт. BNB по цене $16.50 и ещё одним, предлагающим 2 шт. BNB по цене $16.51. Записи в raw trades по этой сделке будут следующими:
- 2 шт. BNB по цене $16.50
- 5 шт. BNB по цене $16.50
- 1 шт. BNB по цене $16.50
- 2 шт. BNB по цене $16.51
При этом aggregate trade будет:
- 8 шт. BNB по цене $16.50
- 2 шт. BNB по цене $16.51
Aggregate trades отображают ту-же информацию, что и raw trade в «сжатом» виде, что уменьшает объемы данных пересылаемых по сети и занимает меньше места в UI.
Полезные ссылки
- https://www.binance.com/en/landing/data
- https://github.com/binance/binance-public-data/
- https://readthedocs.org/projects/python-binance/downloads/pdf/latest/
- https://bablofil.com/binance-api/
- https://python-binance.readthedocs.io/en/latest/
- https://github.com/binance-us/binance-official-api-docs/blob/master/rest-api.md
- BitDataset — API для получения исторических данных по торгам криптовалютой.
- Исторические данные в gz по торговле криптовалютой на Bitmex. (ссылка отсюда).
- Исторические данные по торговле криптовалютами от Kaiko. Стоит не дешево, около 899 фунтов за символ.
- CryptoDataDownload — ещё один сервис предоставления исторических данных по криптовалютам.
- Tardis.Dev — исторические данные по крипте. Дорого.
- Визуальный анализ криптовают.
- CCXT — https://github.com/ccxt/ccxt/wiki/Manual#order-book
- https://coinograph.io/binance-historical-data/