Files

53 lines
1.7 KiB
Python

"""
Fetch real XAUUSD H1 data from Yahoo Finance (GC=F gold futures).
Saves to CSV for training pipeline.
"""
import argparse
from datetime import datetime, timezone
from pathlib import Path
import pandas as pd
import yfinance as yf
ROOT = Path(__file__).resolve().parent.parent
DATA_DIR = ROOT / "data"
DATA_DIR.mkdir(exist_ok=True)
OUT_CSV = DATA_DIR / "xauusd_h1.csv"
def fetch_xauusd(period: str = "2y", interval: str = "1h") -> pd.DataFrame:
ticker = yf.Ticker("GC=F")
df = ticker.history(period=period, interval=interval, auto_adjust=True)
if df.empty:
raise RuntimeError("No data returned from Yahoo Finance for GC=F")
df.index = df.index.tz_convert("UTC").tz_localize(None)
df.index.name = "datetime"
df.reset_index(inplace=True)
df.rename(columns={
"Open": "open", "High": "high", "Low": "low",
"Close": "close", "Volume": "volume"
}, inplace=True)
df = df[["datetime", "open", "high", "low", "close", "volume"]].copy()
df.dropna(subset=["open", "high", "low", "close"], inplace=True)
df["volume"] = df["volume"].fillna(0)
return df
def main():
parser = argparse.ArgumentParser()
parser.add_argument("--period", default="2y", help="yfinance period (1y, 2y, max)")
parser.add_argument("--interval", default="1h", help="yfinance interval (1h, 4h, 1d)")
parser.add_argument("--out", default=str(OUT_CSV))
args = parser.parse_args()
print(f"Fetching XAUUSD (GC=F) {args.interval} for {args.period}...")
df = fetch_xauusd(args.period, args.interval)
df.to_csv(args.out, index=False)
print(f"Saved {len(df)} rows -> {args.out}")
print(df.tail(3).to_string(index=False))
if __name__ == "__main__":
main()