[Python] Python code for yahoo finance not fetching data

Discussão em 'Python' iniciado por Stack, Agosto 19, 2025.

  1. Stack

    Stack Membro Participativo

    My code:

    # Stock data Yahoo Finance

    import pandas as pd
    from datetime import datetime, timezone
    import json
    import yfinance as yf

    # ---------------- Settings ----------------
    # Match your original ticker set
    tickers = ["MSFT","AAPL","NVDA","GOOG","AMZN","META","TSLA","CRM","AMD","INTC","BABA","PYPL","CBOE","BLK"]

    # Keep the same ms-epoch inputs you were using
    start_date = int(datetime(2025, 6, 20, tzinfo=timezone.utc).timestamp() * 1000)
    end_date = int(datetime(2025, 8, 18, tzinfo=timezone.utc).timestamp() * 1000)

    # Interval options: "1m","2m","5m","15m","30m","60m","90m","1h","1d","5d","1wk","1mo","3mo"
    interval = "30m"

    # ---------------- Fetch ----------------
    stock_data_dict = {}

    start_ts = pd.to_datetime(start_date, unit="ms", utc=True)
    end_ts = pd.to_datetime(end_date, unit="ms", utc=True)

    print("Fetching Yahoo Finance candles...\n")

    for t in tickers:
    print(f"--> {t}: {interval} {start_ts.date()} to {end_ts.date()}")
    try:
    # Download OHLCV
    df = yf.download(
    t,
    start=start_ts.tz_convert(None),
    end=end_ts.tz_convert(None),
    interval=interval,
    auto_adjust=False,
    progress=False,
    group_by="ticker",
    threads=True,
    )

    if df is None or df.empty:
    print(f" (no data returned)")
    stock_data_dict[t] = {"candles": []}
    continue

    # Ensure the index is datetime and build epoch-ms column from it
    idx = pd.to_datetime(df.index, utc=True)
    df["datetime"] = (idx.astype("int64") // 10**6) # ns → ms

    # Normalize column names
    rename_map = {
    "Open": "open", "High": "high", "Low": "low", "Close": "close",
    "Adj Close": "adjclose", "Volume": "volume"
    }
    df = df.rename(columns=rename_map)

    # Some intraday frames don’t have Adj Close; use Close if missing
    if "adjclose" not in df.columns and "close" in df.columns:
    df["adjclose"] = df["close"]

    # Some symbols/intervals may lack volume; create if missing
    if "volume" not in df.columns:
    df["volume"] = pd.NA

    keep_cols = ["datetime", "open", "high", "low", "close", "adjclose", "volume"]
    records = df.reindex(columns=keep_cols).dropna(subset=["datetime"]).to_dict("records")

    stock_data_dict[t] = {"candles": records}
    print(f" fetched {len(records)} rows")

    except Exception as e:
    print(f" Error fetching data for {t}: {e}")

    # ---------------- Quick summary ----------------
    print("\nSummary:")
    for t, payload in stock_data_dict.items():
    n = len(payload.get("candles", []))
    print(f"{t}: {n} rows")

    # ---------------- Persist: JSON + CSV ----------------
    # Write JSON (similar to your 'AAAA_stock_data_NEW.json')
    with open("yahoo_stock_data.json", "w") as f:
    json.dump(stock_data_dict, f, indent=4)

    # Flatten to one CSV like your pipeline expects
    all_rows = []
    for t, payload in stock_data_dict.items():
    rows = payload.get("candles", [])
    for r in rows:
    r2 = dict(r)
    r2["ticker"] = t
    all_rows.append(r2)

    all_df = pd.DataFrame(all_rows, columns=["ticker","datetime","open","high","low","close","adjclose","volume"])
    # Convert ms → readable timestamp column (optional)
    all_df["date"] = pd.to_datetime(all_df["datetime"], unit="ms", utc=True).dt.tz_convert("UTC")
    all_df.to_csv("yahoo_stock_data_all.csv", index=False)

    print("\nSaved:")
    print(" - yahoo_stock_data.json")
    print(" - yahoo_stock_data_all.csv")


    Is outputting blank rows:

    Fetching Yahoo Finance candles...

    --> MSFT: 30m 2025-06-20 to 2025-08-18
    fetched 0 rows
    --> AAPL: 30m 2025-06-20 to 2025-08-18
    fetched 0 rows
    --> NVDA: 30m 2025-06-20 to 2025-08-18
    fetched 0 rows
    --> GOOG: 30m 2025-06-20 to 2025-08-18
    fetched 0 rows
    --> AMZN: 30m 2025-06-20 to 2025-08-18
    fetched 0 rows
    --> META: 30m 2025-06-20 to 2025-08-18
    fetched 0 rows
    --> TSLA: 30m 2025-06-20 to 2025-08-18
    fetched 0 rows
    --> CRM: 30m 2025-06-20 to 2025-08-18
    fetched 0 rows
    --> AMD: 30m 2025-06-20 to 2025-08-18
    fetched 0 rows
    --> INTC: 30m 2025-06-20 to 2025-08-18
    fetched 0 rows
    --> BABA: 30m 2025-06-20 to 2025-08-18
    fetched 0 rows
    --> PYPL: 30m 2025-06-20 to 2025-08-18
    fetched 0 rows
    --> CBOE: 30m 2025-06-20 to 2025-08-18
    fetched 0 rows
    --> BLK: 30m 2025-06-20 to 2025-08-18
    fetched 0 rows


    Can someone figure out why?

    Continue reading...

Compartilhe esta Página