# -*- coding: utf-8 -*-
"""
Created on April 8, 2026

@author: cting
!pip install yfinance --upgrade --no-cache-dir
"""
import yfinance as yf
import pandas as pd

success_count = 0
failed = []
verbose = True
retry_attempts = 3
sleep_base = 1.5

period = 'max'
interval = '1d'
start = None
end = None


ticker = '^NDX'

if verbose:
    print(f"{ticker:12s} … ", end="", flush=True)

for attempt in range(1, retry_attempts + 1):
    try:
        t = yf.Ticker(ticker)
        df = t.history(
            period=period,
            interval=interval,
            start=start,
            end=end,
            auto_adjust=False,
            repair=True,
            timeout=15)

        if verbose:
            print(f"OK ({len(df)} bars)")
            
        iso_dates = pd.to_datetime(df.index).strftime('%Y-%m-%d').tolist()
        df.index = iso_dates
        df = df.reset_index()
        df = df.rename(columns={'index': 'Date'})

        filename = ticker + '.xlsx'
        df.to_excel(filename, index=False)

    except Exception as e:
        if attempt == retry_attempts:
            if verbose:
                print(f"FAILED after {retry_attempts} \
                      tries → {str(e)[:80]}")
            failed.append((ticker, str(e)))
        else:
            if verbose:
                print(f"retry {attempt}/{retry_attempts} … ", end="", 
                      flush=True)
            
            