Есть множество решений как загрузить исторические данные по криптовалютным парам. Одно из таких решений, которое эффективно использую сейчас - хочу здесь и выложить. Оно быстрое и простое.
Потребуется небольшой код на Python, библиотеки backtrader_binance, backtrader и API ключ полученный с биржи Binance.
Создаем новый проект в вашем любимом редакторе кода и устанавливаем необходимые библиотеки:
1) для интеграции Binance API с Backtrader:
pip install backtrader_binance
2) для тестирования торговых стратегий сам Backtrader:
pip install git+https://github.com/WISEPLAT/backtrader.git
3) + некоторые нужные доп. пакеты:
pip install python-binance pandas matplotlib
Небольшой код для получения исторических данных по крипте, берем по этой ссылке (файл 02 - Symbol data to DF.py), он лежит прямо в проекте библиотеки backtrader_binance.
На всякий случай дублирую сюда код:
import datetime as dt import backtrader as bt import pandas as pd from backtrader_binance import BinanceStore from ConfigBinance.Config import Config # Файл конфигурации # Торговая система class StrategySaveOHLCVToDF(bt.Strategy): """Сохраняет OHLCV в DF""" params = ( # Параметры торговой системы ('coin_target', ''), # ) def __init__(self): self.df = {} self.df_tf = {} def start(self): for data in self.datas: # Пробегаемся по всем запрошенным тикерам ticker = data._name self.df[ticker] = [] self.df_tf[ticker] = self.broker._store.get_interval(data._timeframe, data._compression) def next(self): """Приход нового бара тикера""" for data in self.datas: # Пробегаемся по всем запрошенным тикерам ticker = data._name try: status = data._state # 0 - Live data, 1 - History data, 2 - None _interval = data.interval except Exception as e: if data.resampling == 1: status = 22 _interval = self.broker._store.get_interval(data._timeframe, data._compression) _interval = f"_{_interval}" else: print("Error:", e) if status == 1: _state = "Resampled Data" if status == 1: _state = "False - History data" if status == 0: _state = "True - Live data" self.df[ticker].append([bt.num2date(data.datetime[0]), data.open[0], data.high[0], data.low[0], data.close[0], data.volume[0]]) print('{} / {} [{}] - Open: {}, High: {}, Low: {}, Close: {}, Volume: {} - Live: {}'.format( bt.num2date(data.datetime[0]), data._name, _interval, # таймфрейм тикера data.open[0], data.high[0], data.low[0], data.close[0], data.volume[0], _state, )) # Исторические/новые бары тикера if __name__ == '__main__': # Точка входа при запуске этого скрипта cerebro = bt.Cerebro(quicknotify=True) coin_target = 'USDT' # базовый тикер, в котором будут осуществляться расчеты symbol = 'BTC' + coin_target # тикер, по которому будем получать данные в формате <КодТикераБазовыйТикер> store = BinanceStore( api_key=Config.BINANCE_API_KEY, api_secret=Config.BINANCE_API_SECRET, coin_target=coin_target, testnet=False) # Хранилище Binance broker = store.getbroker() cerebro.setbroker(broker) # 1. Исторические D1 бары за 365 дней + График т.к. оффлайн/ таймфрейм D1 from_date = dt.datetime.utcnow() - dt.timedelta(days=365) # берем данные за 365 дней от текущего времени data = store.getdata(timeframe=bt.TimeFrame.Days, compression=1, dataname=symbol, start_date=from_date, LiveBars=False) cerebro.adddata(data) # Добавляем данные cerebro.addstrategy(StrategySaveOHLCVToDF, coin_target=coin_target) # Добавляем торговую систему results = cerebro.run() # Запуск торговой системы print(results[0].df) df = pd.DataFrame(results[0].df[symbol], columns=["datetime", "open", "high", "low", "close", "volume"]) print(df) tf = results[0].df_tf[symbol] # save to file df.to_csv(f"{symbol}_{tf}.csv", index=False) # save to file df[:-5].to_csv(f"{symbol}_{tf}_minus_5_days.csv", index=False) cerebro.plot() # Рисуем график
Перед запуском загрузки данных по криптовалютам, необходимо получить свой API ключ и Secret ключ, и прописать их в файле ConfigBinance\Config.py:
# content of ConfigBinance\Config.py class Config: BINANCE_API_KEY = "YOUR_API_KEY" BINANCE_API_SECRET = "YOUR_SECRET_KEY"
Получаем токен для Binance API:
Регистрируемся на Binance
Переходим в раздел "Управление API"
Берём "Создать API" и "Сгенерированный системой"
Если хотите еще и торговать, то в "Ограничения API" включите "Включить спотовую и маржинальную торговлю".
Скопируйте и вставьте в файл ConfigBinance\Config.py полученные "Ключ API" и "Секретный ключ"
Теперь можно запустить код.
Вот загруженные автоматом исторические данные по биткоин (Bitcoin|BTC/USDT):

В строке 92 происходит выгрузка в формате pandas.dataframe загруженных исторических данных по выбранной крипте (строка 64-65) в csv файл.
# save to file df.to_csv(f"{symbol}_{tf}.csv", index=False)
Получаем такие данные:
datetime,open,high,low,close,volume ... 2023-03-20,27972.87,28472.0,27124.47,27717.01,477378.23373 2023-03-21,27717.01,28438.55,27303.1,28105.47,420929.7422 2023-03-22,28107.81,28868.05,26601.8,27250.97,224113.41296 2023-03-23,27250.97,28750.0,27105.0,28295.41,128649.60818 2023-03-24,28295.42,28374.3,27000.0,27454.47,86242.06544 2023-03-25,27454.46,27787.33,27156.09,27462.95,50844.08102 2023-03-26,27462.96,28194.4,27417.76,27968.05,49671.70353 2023-03-27,27968.05,28023.86,26508.14,27124.91,88039.46898 2023-03-28,27124.9,27520.0,26631.78,27261.07,78602.44341 2023-03-29,27261.06,28650.0,27240.1,28348.6,89486.16008 2023-03-30,28348.6,29184.68,27686.0,28028.53,98865.43256
Надеюсь этот код вам оказался полезным: +1.
