如何使用python-binance获取多个加密货币的历史数据
Binance API多币种历史数据批量获取方案
现有代码每次循环会覆盖klines变量,最终仅保留最后一个币种的数据,可通过以下方案实现多币种数据批量获取:
方案1:合并为统一DataFrame(适合百级币种、中等时间跨度场景)
该方案会将所有币种数据整合到同一个表中,通过新增的币种标识字段区分不同标的,适合后续批量分析:
import pandas as pd import time from binance.client import Client # 替换为你自己的API密钥 client = Client(api_key="YOUR_API_KEY", api_secret="YOUR_API_SECRET") binance_symbols = ['BTCUSDT', 'ETHUSDT', 'XRPUSDT', 'SOLUSDT'] all_kline_data = [] for symbol in binance_symbols: # 获取单个币种K线数据 raw_klines = client.get_historical_klines( symbol, Client.KLINE_INTERVAL_1HOUR, "1 Aug, 2021", "24 Sep, 2021" ) klines_df = pd.DataFrame(raw_klines) # 新增币种标识列 klines_df["symbol"] = symbol # 标准化列名(Binance K线返回字段顺序固定) klines_df.columns = [ "open_time", "open", "high", "low", "close", "volume", "close_time", "quote_volume", "trade_count", "taker_buy_base", "taker_buy_quote", "ignore", "symbol" ] all_kline_data.append(klines_df) # 增加延迟避免触发API频率限制 time.sleep(0.5) # 合并所有数据 final_df = pd.concat(all_kline_data, ignore_index=True)
方案2:分币种独立存储(适合大量币种、长时间跨度场景)
如果请求的时间跨度超过1年、币种数量超过200个,合并为单个文件会占用过高内存,可每个币种单独存储为本地文件:
for symbol in binance_symbols: raw_klines = client.get_historical_klines( symbol, Client.KLINE_INTERVAL_1HOUR, "1 Aug, 2021", "24 Sep, 2021" ) klines_df = pd.DataFrame(raw_klines) klines_df.columns = [ "open_time", "open", "high", "low", "close", "volume", "close_time", "quote_volume", "trade_count", "taker_buy_base", "taker_buy_quote", "ignore" ] # 单独保存为csv文件 klines_df.to_csv(f"{symbol}_1h_202108_202109.csv", index=False) time.sleep(0.5)
优化建议
- 无需手动维护币种列表,可通过接口自动获取当前所有可交易的USDT本位交易对:
exchange_info = client.get_exchange_info() binance_symbols = [ item["symbol"] for item in exchange_info["symbols"] if item["quoteAsset"] == "USDT" and item["status"] == "TRADING" ]
- 批量请求前可先读取本地已下载的文件列表,跳过已完成的币种,避免重复消耗API请求额度。
内容的提问来源于stack exchange,提问作者nostalgia
相关产品推荐
相关产品推荐

