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()
Статья была написана при поддержке - ссылка