Как загрузить исторические данные по криптовалютам

—

от автора

Есть множество решений как загрузить исторические данные по криптовалютным парам. Одно из таких решений, которое эффективно использую сейчас — хочу здесь и выложить. Оно быстрое и простое.

Потребуется небольшой код на 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:

  1. Регистрируемся на Binance

  2. Переходим в раздел «Управление API»

  3. Берём «Создать API» и «Сгенерированный системой»

  4. Если хотите еще и торговать, то в «Ограничения API» включите «Включить спотовую и маржинальную торговлю».

  5. Скопируйте и вставьте в файл ConfigBinance\Config.py полученные «Ключ API» и «Секретный ключ»

Теперь можно запустить код.

Вот загруженные автоматом исторические данные по биткоин (Bitcoin|BTC/USDT):

загруженные исторические данные по Bitcoin

загруженные исторические данные по Bitcoin

В строке 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.


ссылка на оригинал статьи https://habr.com/ru/articles/732126/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *