Coinbase API v2实战:多日期历史价格轻松批量抓取指南

·

关键词:Coinbase API v2、历史价格、批量获取、加密数据、candles、granularity、Python 代码示例、加密分析


为什么选择 Coinbase API 抓取历史价格?

加密货币的价格波动往往呈现出周期性趋势。无论是做回测研究还是训练机器学习模型,都需要覆盖长周期的历史价格作为底稿。Coinbase API v2 提供的官方接口不仅免费,而且稳定可靠,非常适合中小团队和个人开发者。

👉 用 15 分钟学会 Coinbase API v2 升级你的策略信号,点击即可查看完整示例代码和背后的核心逻辑


开始前的三个必备条件

  1. 拥有一个有效的 Coinbase 账户并完成邮箱验证。
  2. 在「API 设置」里新建一个 API Key,勾选「读取」权限即可,无需资金操作权限
  3. 理解 curl 或 Python 基础语法,特别是 requests 库的 GET 请求流程。

拆解两条必懂接口

场景端点名称核心功能重要限制频率保护
/v2/prices/XXX-XXX/historic资产-法币价直接返回开高低收最多 300 条10 次/秒/IP
/products/XXX-XXX/candles交易产品返回 OHLCV 数组每组 300 条10 次/秒/IP
核心关键词巧植入:granularity 参数决定每根蜡烛条的粒度,60 秒到 86400 秒共 6 档可选。

用「candles」一口气拉 30 天日线

请求骨架示例

GET https://api.pro.coinbase.com/products/BTC-USD/candles
    ?start=2024-01-01T00:00:00Z
    &end=2024-01-31T00:00:00Z
    &granularity=86400

返回格式速读

单条纪录按顺序打包成数组:

[ time, low, high, open, close, volume ]

完整 Python 3 代码(无第三方依赖)

import requests, time, json, datetime as dt

def candles_batch(granularity=86400, pages=3):
    """
    逐段拉取避免一次超限
    """
    end   = int(dt.datetime.utcnow().timestamp())
    start = end - granularity * 300 * pages  # 回退 N 页
    url = "https://api.pro.coinbase.com/products/BTC-USD/candles"
    params = {
        "start": dt.datetime.utcfromtimestamp(start).isoformat() + "Z",
        "end":   dt.datetime.utcfromtimestamp(end).isoformat()   + "Z",
        "granularity": granularity
    }
    resp = requests.get(url, params=params)
    resp.raise_for_status()
    return sorted(resp.json(), key=lambda x: x[0])  # 按时间升序

if __name__ == "__main__":
    data = candles_batch()
    json.dump(data, open("btc_ohlc.json", "w", encoding="utf-8"))

常见问题解答(FAQ)

Q1:免费额度够用吗?
A:官方每 IP 每端点 10 次/秒,普通人跑日线一天轮询一次毫无压力。

Q2:为什么会出现「429 Too Many Requests」?
A:多数发生在并发爬虫,解决方法是 HTTP 429 后暂停 1 秒并使用指数退避重试。

Q3:granularity=60 却没有 60 秒一条的数据?
A:Coinbase 只在有实际成交的秒点推送记录,出现空档是常态,可后处理做补空。

Q4:如何获取 ETH-EUR 等其他交易对?
A:把 URL 中的 BTC-USD 替换成有效的 产品ID 即可;完整列表可用 /products 端点拉取。

Q5:有没有现成 Python 封装?
A:Historic-Crypto 虽便捷,但作者已数月未更新;若求稳定,建议上面示例或自研 SDK。

Q6:Linux 定时脚本跑不动怎么办?
A:检查系统时间是否跟 UTC 同步,时间偏差大于 30 秒会被拒:

sudo ntpdate -u pool.ntp.org

把数据喂进可视化

有了 OHLCV,下一步很容易延伸到:

👉 如果你想同步整合「现货」与「永续合约」的深度图,看看如何一分钟搭建 WebSocket 数据流。


小结与行动清单

  1. 立即注册 Coinbase,生成只读 API Key
  2. 用本节示例脚本跑 3 个月日线,验证无误后进入 1 小时线。
  3. granularitystart~end 区间封装为环境变量,适配生产化调度。

掌握 “Coinbase API v2、历史价格、candles 端点” 这套组合拳,Crypto 分析再也无需高价订阅平台数据,真正做到「用开源换成本」。祝编码愉快,下一波行情来临前先囤好历史数据!