使用Binance API下载1s间隔USD-M期货K线时遇无效间隔错误
Binance USD-M期货1s K线下载问题解决
错误原因
Binance USD-M期货API不支持1秒(1s)级别的K线间隔,而现货API支持该间隔,这就是相同代码在期货场景下触发Invalid interval错误的核心原因。期货API支持的K线间隔最小为1分钟。
解决方案
方案1:使用期货支持的最小间隔获取K线
将间隔参数替换为期货API支持的1m(1分钟),代码修改如下:
from binance.client import Client, HistoricalKlinesType symbol = 'ETHUSDT' # 使用期货支持的最小间隔:1分钟 interval = Client.KLINE_INTERVAL_1MINUTE date_from = "19 Aug 2023" date_to = "20 Aug 2023" client = Client() klines = client.get_historical_klines(symbol, interval, date_from, date_to, klines_type=HistoricalKlinesType.FUTURES)
方案2:获取逐笔成交数据合成1s K线
如果必须获取1秒级别的高频数据,可以通过获取期货的逐笔成交记录,再自行聚合生成1s间隔的K线。示例代码如下:
from binance.client import Client symbol = 'ETHUSDT' start_time = Client.parse_time("19 Aug 2023") end_time = Client.parse_time("20 Aug 2023") client = Client() trades = [] last_trade_id = 0 # 分页获取逐笔成交数据(单次请求最多返回1000条) while True: batch_trades = client.futures_trades(symbol=symbol, limit=1000, fromId=last_trade_id) if not batch_trades: break # 筛选时间范围内的成交数据 filtered_trades = [t for t in batch_trades if start_time <= t['time'] <= end_time] trades.extend(filtered_trades) last_trade_id = batch_trades[-1]['id'] # 若当前批次最后一条数据时间超出范围,停止请求 if batch_trades[-1]['time'] > end_time: break # 后续可根据trades中的时间、价格、成交量字段,按1秒间隔聚合生成K线
内容的提问来源于stack exchange,提问作者serbazov
相关产品推荐
相关产品推荐

