Exchange Data Downloader
exchange-data-downloader — простая библиотека для скачивания и распаковки исторических данных с криптовалютных бирж (Binance и Bybit). Она автоматически создаёт структуру папок, кэширует уже загруженные файлы и умеет работать с разными типами данных (klines, trades, funding и др.). Отлично подходит для бэктестов, аналитических пайплайнов и подготовки датасетов.
Установка
pip install exchange-data-downloader
или
uv add exchange-data-downloader
или
poetry add exchange-data-downloader
Быстрый старт
from exdata.binance import Downloader
downloader = Downloader(data_folder_path="data/binance")
csv_path = downloader.download(
symbol="BTCUSDT",
year=2024,
month=4,
timeframe="1h",
market_type="futures/um",
period_type="monthly",
data_type="klines",
unzip=True,
)
print(f"Файл сохранён по пути: {csv_path}")
year,month,dayпередаются числами — библиотека сама добавит ведущие нули.- Если файл уже скачан и распакован, повторный вызов просто вернёт путь из кэша.
- Параметр
unzipпо умолчанию равенFalse— библиотека вернёт путь к ZIP. Передайтеunzip=True, если нужен путь к распакованному CSV.
Дополнительные примеры
Загрузка дневных trades
csv_path = downloader.download(
symbol="TRXUSDT",
year=2025,
month=3,
day=15,
data_type="trades",
period_type="daily",
market_type="spot",
)
Обход диапазона дат
from exdata.utils import generate_intervals
intervals = generate_intervals(
start_year=2024,
start_month=12,
start_day=1,
end_year=2025,
end_month=1,
end_day=5,
)
for current in intervals:
downloader.download(
symbol="ETHUSDT",
year=current.year,
month=current.month,
day=current.day,
data_type="aggTrades",
period_type="daily",
market_type="futures/um",
timeframe=None,
)
Функция generate_intervals возвращает кортеж объектов date, что упрощает обход диапазонов.
Bybit
Данные берутся с public.bybit.com. Доступны только сделки (trades):
market_type |
period_type |
Что внутри |
|---|---|---|
futures |
daily |
USDT, USDC (...PERP), инверсные (BTCUSD) и срочные (BTC-26DEC25) контракты |
spot |
daily, monthly |
Спотовые пары |
from exdata import BybitDownloader
downloader = BybitDownloader(data_folder_path="data/bybit")
# Сделки по фьючерсу за день
csv_path = downloader.download(
symbol="BTCUSDT",
year=2025,
month=3,
day=15,
market_type="futures",
period_type="daily",
unzip=True,
)
# Сделки по споту за месяц
gz_path = downloader.download(
symbol="ETHUSDT",
year=2025,
month=3,
market_type="spot",
period_type="monthly",
)
- Архивы Bybit имеют формат
.csv.gz. Приunzip=Falseвозвращается путь к.csv.gz, приunzip=True— к распакованному.csv. - Время в файлах: у фьючерсов — секунды (float), у спота — миллисекунды.
- Файл
monthlyдля спота появляется только после окончания месяца. - Для
market_type="futures"доступен толькоperiod_type="daily", иначе будетInvalidParamsError. - Параметра
timeframeнет: свечи Bybit (kline_for_metatrader4) библиотека не поддерживает.
Полезные замечания
- Для kline-подобных типов (
klines,markPriceKlines,indexPriceKlinesи т.д.) параметрtimeframeобязателен. - Для
period_type="daily"необходимо указать день (day), дляmonthly— наоборот,dayне используется. - Библиотека выбрасывает
InvalidParamsError, если параметры указаны некорректно, иNotFoundError, если источник не вернул данные.
Используйте exchange-data-downloader, чтобы не тратить время на ручные скачивания и сосредоточиться на аналитике. Удачных тестов!
Metadata
Release files for exchange-data-downloader 0.3.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| exchange_data_downloader-0.3.0.tar.gz | 10.6 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| exchange_data_downloader-0.3.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 25.3 kB
Release files / exchange_data_downloader-0.3.0.tar.gz
| Download URL | exchange_data_downloader-0.3.0.tar.gz |
|---|---|
| Size | 10.6 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
76ae38c20aa3ae2a692a20ff38ea156b3c7825aa2781f3fe5758301f6d585b5a
|
|
BLAKE2b-256 checksum How to use checksums |
902fe9f7abb85cea5d82d8cacab8e9de1e4e24a6be748c9f7d201a54cdc62c89
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.13.7
|
Release files / exchange_data_downloader-0.3.0-py3-none-any.whl
| Download URL | exchange_data_downloader-0.3.0-py3-none-any.whl |
|---|---|
| Size | 14.7 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
0da317ba38781ca8a22ef7ec7bb45416b9952c63ea787cfc37058bbc888d82ed
|
|
BLAKE2b-256 checksum How to use checksums |
6e9004fdb44d10a56ce7755e3045c59d05c9aee6a46bcc895fbaeebe8bae4104
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.13.7
|