globalsy_mvp/get/tick_history.py
belikovme 61b6f03e26 Обновление зависимостей и игнорируемых файлов
- Добавлен yfinance в requirements.txt
- Расширен .gitignore для исключения служебных файлов Python
- Исправлен импорт в currency.py для корректной работы с модулями
2025-03-12 14:49:12 +07:00

101 lines
3.7 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import pandas as pd
import os
import sys
import sqlite3
from datetime import datetime, timedelta
import asyncio
# Добавляем путь к родительской директории
sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), '..')))
from classes.moex_history import MOEXHistoricalData
from config import sector_tickers
class DataLoader:
def __init__(self, db_path: str):
"""
Инициализация загрузчика данных.
Args:
db_path: Путь к файлу базы данных SQLite
"""
self.db_path = db_path
self.moex_data_handler = MOEXHistoricalData()
def _get_connection(self):
"""
Создает и возвращает соединение с базой данных.
Returns:
sqlite3.Connection: Объект соединения с базой данных
"""
return sqlite3.connect(self.db_path)
async def load_sector_data(self, sector: str):
"""
Получение и сохранение исторических данных по сектору.
Args:
sector: Название сектора
"""
end_date = datetime.now()
start_date = end_date - timedelta(days=730) # За последние 2 года
# Получаем данные по официальному секторному индексу
sector_df = await self.moex_data_handler.get_official_sector_index(
sector,
start_date.strftime('%Y-%m-%d'),
end_date.strftime('%Y-%m-%d')
)
# Сохраняем данные в таблицу
with self._get_connection() as conn:
sector_df.to_sql(sector, conn, if_exists='replace', index=False)
print(f"Данные для сектора '{sector}' сохранены в таблице '{sector}'.")
async def load_ticker_data(self, tickers: list):
"""
Получение и сохранение исторических данных по тикерам.
Args:
tickers: Список тикеров
"""
end_date = datetime.now()
start_date = end_date - timedelta(days=730) # За последние 2 года
tasks = []
for ticker in tickers:
task = self.moex_data_handler.get_security_history(
ticker,
start_date.strftime('%Y-%m-%d'),
end_date.strftime('%Y-%m-%d')
)
tasks.append(task)
results = await asyncio.gather(*tasks)
with self._get_connection() as conn:
for ticker, df in zip(tickers, results):
df.to_sql(ticker, conn, if_exists='replace', index=False)
print(f"Данные для тикера '{ticker}' сохранены в таблице '{ticker}'.")
async def load_data(self, sector: str, tickers: list):
"""
Загрузка данных по сектору и тикерам.
Args:
sector: Название сектора
tickers: Список тикеров
"""
await asyncio.gather(
self.load_sector_data(sector),
self.load_ticker_data(tickers)
)
# Пример использования
if __name__ == "__main__":
db_path = 'moex_data.db' # Путь к файлу базы данных SQLite
data_loader = DataLoader(db_path)
for sector in sector_tickers.keys():
asyncio.run(data_loader.load_data(sector, sector_tickers[sector]))