SPB Git forge

spb/wp8_uqo

Public
3commits 1branches 1releases
4.2 MBsize
maindefault branch
2 h agolast push
Python 56.2% TeX 43.7%
1.9 KB · 60 lines python
Raw Blame History
1"""Yahoo Finance client for market benchmark data."""23from __future__ import annotations45import pandas as pd6import yfinance as yf78from src.config import DATA_RAW_YAHOO, YAHOO_END, YAHOO_START, YAHOO_TICKERS9from src.utils import setup_logging1011logger = setup_logging("yahoo")121314def fetch_yahoo_data(15    tickers: list[str] | None = None,16    start: str | None = None,17    end: str | None = None,18) -> pd.DataFrame:19    """Fetch daily OHLCV data for all configured tickers. Save to CSV."""20    tickers = tickers or YAHOO_TICKERS21    start = start or YAHOO_START22    end = end or YAHOO_END2324    DATA_RAW_YAHOO.mkdir(parents=True, exist_ok=True)2526    all_frames: list[pd.DataFrame] = []2728    for ticker in tickers:29        try:30            logger.info("Fetching %s from Yahoo Finance", ticker)31            tk = yf.Ticker(ticker)32            df = tk.history(start=start, end=end, auto_adjust=True)33            if df.empty:34                logger.warning("No data returned for %s", ticker)35                continue36            df.index.name = "date"37            # Clean ticker name for filename (replace ^ and others)38            safe_name = ticker.replace("^", "").replace("-", "_")39            path = DATA_RAW_YAHOO / f"{safe_name}.csv"40            df.to_csv(path)41            logger.info("Saved %s (%d rows) to %s", ticker, len(df), path)42            all_frames.append(df.assign(ticker=ticker))43        except Exception as exc:44            logger.error("Failed to fetch %s: %s", ticker, exc)4546    if all_frames:47        combined = pd.concat(all_frames)48        combined.to_csv(DATA_RAW_YAHOO / "all_tickers.csv")49        logger.info("Saved combined dataset (%d rows)", len(combined))50        return combined5152    return pd.DataFrame()535455def fetch_all_yahoo_data() -> None:56    """Fetch all Yahoo data and save to data/raw/yahoo/."""57    logger.info("=== Starting Yahoo Finance data acquisition ===")58    fetch_yahoo_data()59    logger.info("=== Yahoo Finance data acquisition complete ===")60