""" fetcher.py - 从 data_provider HTTP API 拉取 K 线数据。 """ import requests import pandas as pd import logging logger = logging.getLogger(__name__) SYMBOL = "BTC/USDT:USDT" TIMEFRAME = "1m" PROVIDER_URL = "http://103.179.242.166" FETCH_LIMIT = 1000 def fetch_ohlcv() -> pd.DataFrame: """从 data_provider API 拉取最近 FETCH_LIMIT 根 1m K 线。""" url = f"{PROVIDER_URL}/api/candles" params = { "symbol": SYMBOL, "tf": TIMEFRAME, "limit": FETCH_LIMIT, } resp = requests.get(url, params=params, timeout=30) resp.raise_for_status() data = resp.json() if not data: logger.warning("API 返回空数据") return pd.DataFrame() df = pd.DataFrame(data) df["timestamp"] = pd.to_datetime(df["timestamp"], unit="ms", utc=True) df["date"] = df["timestamp"] df = df.drop_duplicates(subset="timestamp").sort_values("timestamp").reset_index(drop=True) logger.info(f"拉取 {len(df)} 根 {TIMEFRAME} K 线 from {PROVIDER_URL}") return df