download_history.py

download_history.py


# -*- coding: utf-8 -*-

import ccxt

import pandas as pd

from datetime import datetime


# --- НАСТРОЙКИ ЗАГРУЗЧИКА ---

SYMBOL = 'AVAX/USDT'

TIMEFRAME = '1m' # Будем качать минутные свечи

START_DATE = '2024-09-01' # Дата начала загрузки (можно поставить раньше, если нужно)

FILENAME = 'avax_ohlcv_full.csv'

# ------------------------------------


def download_historical_data():

  """

  Скрипт для скачивания полной истории минутных свечей с Bybit.

  """

  print(f"--- Запуск скачивания исторических данных для {SYMBOL} ---")

   

  # Подключаемся к Bybit (API ключи для публичных данных не нужны)

  exchange = ccxt.bybit()

   

  # Преобразуем начальную дату в формат, понятный бирже (миллисекунды)

  since = exchange.parse8601(START_DATE + 'T00:00:00Z')

   

  all_ohlcv = []

   

  print(f"Начинаю загрузку данных с {START_DATE}. Это может занять несколько минут...")

   

  while True:

    try:

      # Загружаем порцию данных (биржа отдает по 1000 свечей за раз)

      ohlcv = exchange.fetch_ohlcv(SYMBOL, TIMEFRAME, since, limit=1000)

       

      if len(ohlcv):

        # Добавляем полученные данные в общий список

        all_ohlcv.extend(ohlcv)

        # Сдвигаем точку начала для следующего запроса

        since = ohlcv[-1][0] + 1 

         

        # Выводим прогресс

        last_date = datetime.fromtimestamp(ohlcv[-1][0] / 1000).strftime('%Y-%m-%d')

        print(f" ... загружено {len(all_ohlcv)} свечей, дошли до даты {last_date}")

      else:

        # Если биржа вернула пустой список, значит, мы скачали все данные

        break


    except Exception as e:

      print(f"Произошла ошибка, пробую снова... {e}")

      time.sleep(5) # Ждем 5 секунд перед повторной попыткой


  print(f"\n✅ Загрузка завершена! Всего получено {len(all_ohlcv)} минутных свечей.")

   

  # --- Сохранение в CSV ---

  print(f"Сохраняю данные в файл: {FILENAME}...")

  df = pd.DataFrame(all_ohlcv, columns=['timestamp', 'open', 'high', 'low', 'close', 'volume'])

  # Конвертируем timestamp в читаемый формат

  df['timestamp'] = pd.to_datetime(df['timestamp'], unit='ms')

   

  # Добавляем столбец 'turnover', чтобы формат совпадал с вашим исходным файлом

  df['turnover'] = df['close'] * df['volume']

   

  df.to_csv(FILENAME, index=False)

  print(f"✅ Файл {FILENAME} успешно сохранен!")



if __name__ == "__main__":

  download_historical_data()
Статья была написана при поддержке - ссылка

Report Page