from tvDatafeed import TvDatafeed, Interval import pandas as pd from datetime import datetime, timedelta # Optional: use your TradingView login credentials (recommended for more data access) tv = TvDatafeed(username='', password='') # Settings symbol = 'XAUUSD' exchange = 'OANDA' interval = Interval.in_1_minute start_date = datetime(2024, 7, 1) end_date = datetime(2025, 3, 31) chunk_size = 10000 # 10k bars (~1 week of 1-minute data) # Container for all data all_data = pd.DataFrame() # Backward download loop (TradingView API fetches data backwards in time) current_end = end_date while current_end > start_date: print(f"Fetching data up to {current_end.strftime('%Y-%m-%d %H:%M:%S')}...") try: df = tv.get_hist(symbol=symbol, exchange=exchange, interval=interval, n_bars=chunk_size, to_date=current_end) if df is None or df.empty: print("No data returned, stopping early.") break all_data = pd.concat([df, all_data]) earliest_time = df.index.min() current_end = earliest_time - timedelta(minutes=1) # Move back in time except Exception as e: print(f"Error fetching data: {e}") break # Clean & export all_data = all_data[~all_data.index.duplicated()] all_data = all_data.sort_index() all_data.to_csv('XAUUSD_1min_Jul2024_to_Mar2025.csv') print("✅ Data saved to 'XAUUSD_1min_Jul2024_to_Mar2025.csv'")