先搞清楚你要的是什么数据
在动手之前,建议先明确三个参数,否则很容易拿到不合用的数据:
- 交易对:如 BTC/USDT、ETH/USDT,币安不同交易对的数据量差异很大。
- 时间周期:1m、5m、15m、1h、4h、1d 等,周期越短,历史数据量越大。
- 时间范围:是只要最近几百根,还是要追溯几年的完整历史。
明确这三点后,选择获取方式就简单了。日常看盘用网页导出即可;需要自动化、批量拉取,则应该走官方 API。
方式一:网页端手动导出(适合新手、数据量小)
币安网页版K线图自带导出功能,适合临时取几十到几千根K线做分析。
操作步骤
- 登录币安官网,进入“行情”页面,搜索并打开目标交易对。
- 在K线图右上角找到导出/下载图标(部分版本在图表工具栏内)。
- 选择时间周期与时间范围,确认后下载 CSV 文件。
优点是零门槛、不用写代码;缺点是每次导出数量有限、无法自动化,且频繁操作效率很低。如果你只是偶尔需要一小段数据,这是最省事的方式。
方式二:官方 REST API(最推荐,稳定可控)
币安提供公开的行情接口,获取K线数据不需要 API Key,直接发 HTTP 请求即可。核心接口是 /api/v3/klines,返回数组格式的K线:开盘时间、开高低收、成交量、收盘时间、成交额等。
关键参数说明
- symbol:交易对,如 BTCUSDT。
- interval:周期,取值 1m、5m、1h、1d 等。
- limit:单次返回条数,默认 500,最大 1000。
- startTime / endTime:毫秒级时间戳,用于指定区间。
Python 示例
下面这段代码可以直接运行,把最近 1000 根 1 小时K线存成 CSV:
- 用 requests 请求接口,传入 symbol、interval、limit 参数;
- 把返回的 JSON 转成 DataFrame,重命名列;
- 用 to_csv 保存到本地。
需要提醒的是:单次最多 1000 条,若要拉取长历史,必须用 startTime 循环分页,每次请求之间加短暂延时,避免触发频率限制。此外,接口有请求权重限制,短时间高频调用会被限流甚至临时封禁,务必控制节奏。
WebSocket 实时推送
如果你需要的是实时行情而非历史数据,应使用 WebSocket 的 kline 流,订阅后服务端会持续推送K线更新。历史数据用 REST,实时更新用 WebSocket,这是获取币安交易所K线数据最常见的组合方案。
方式三:第三方库与数据平台
不想自己处理分页和限流,可以借助封装好的工具:
- ccxt:支持币安在内的多家交易所,统一接口,一行代码取K线,适合多交易所对比。
- python-binance:币安官方生态的 Python 封装,接口覆盖较全。
- 数据聚合平台:部分第三方站点提供历史数据打包下载,适合需要多年分钟级数据的回测场景,但要注意数据来源与更新时效。
使用第三方库时,建议先小批量验证返回字段与时间戳单位(币安为毫秒),避免回测时出现时间错位。
几个容易踩的坑
- 时间戳单位:币安返回的是毫秒,转 datetime 时别忘了除以 1000。
- 最后一根K线未收盘:实时拉取时最后一根往往还在变化,回测应剔除或标记。
- 交易对命名:API 里是 BTCUSDT,不是 BTC/USDT,写错会直接报错。
- 限流:批量拉取务必加分页与延时,别用多线程猛冲。
- 数据校验:拿到后抽查几根K线与网页端对比,确认无缺失和重复。
怎么选:一句话建议
偶尔取一小段,用网页导出;要做策略回测或自动化,优先官方 REST API 配合分页;需要实时行情,加 WebSocket;想少写代码、多交易所通用,用 ccxt。掌握以上几种方式,获取币安交易所K线数据就不再是门槛,剩下的精力可以放在策略和分析本身。