如何通过Coinbase API获取BTC-USD的午夜时点价格?
解决Coinbase获取BTC-USD午夜时点价格的问题
问题原因分析
- 你用的Spot API带
date参数,返回的是该日期内任意时点的价格(并非固定午夜时刻),所以每次调用结果会波动。 - 第二个方法的时间戳格式错误:
'%H:%M:%S:%Y'不符合strptime的格式规则,且缺少月日信息,导致生成的时间戳对应错误日期,价格自然偏离实际值。
可行解决方案
方案1:直接调用Coinbase官方OHLCV API
利用Coinbase的蜡烛图API,指定1分钟粒度查询午夜时刻的精准数据:
import requests from datetime import datetime, timezone CRYPTO_PAIR = "BTC-USD" # 目标午夜时间(可替换为指定日期,比如datetime(2024,5,7,0,0,0)) target_midnight = datetime.now().replace(hour=0, minute=0, second=0, microsecond=0) # 转换为Coinbase API使用的UTC时间 target_utc = target_midnight.astimezone(timezone.utc) # 构造API参数:1分钟粒度,查询午夜前后1分钟的蜡烛数据 url = f"https://api.coinbase.com/v2/products/{CRYPTO_PAIR}/candles" params = { "granularity": 60, # 60秒=1分钟粒度 "start": target_utc.isoformat(), "end": (target_utc.replace(minute=1)).isoformat() } response = requests.get(url, params=params) candles = response.json() # 蜡烛数据格式:[timestamp, low, high, open, close, volume] if candles: midnight_price = candles[0][3] # 开盘价即为午夜时点价格 print(f"UTC午夜价格: {midnight_price}") else: print("未找到对应时点的数据")
方案2:修复CCXT库调用逻辑
如果用CCXT库,需修正时间戳的构造方式,确保对应正确的UTC午夜时间:
import ccxt from datetime import datetime, timezone exchange = ccxt.coinbasepro() # 注意Coinbase在CCXT中的标识是coinbasepro CRYPTO_PAIR = "BTC/USD" # 指定目标日期的UTC午夜时间 target_date = datetime(2024, 5, 7, 0, 0, 0, tzinfo=timezone.utc) midnight_timestamp = int(target_date.timestamp() * 1000) # 转换为毫秒时间戳 # 获取1天粒度的OHLCV数据 ohlcv = exchange.fetch_ohlcv(CRYPTO_PAIR, '1d', since=midnight_timestamp) if ohlcv: midnight_price = ohlcv[0][1] # 1天蜡烛的开盘价即为UTC午夜价格 print(f"UTC午夜价格: {midnight_price}") else: print("未找到对应日期的数据")
注意事项
- Coinbase API统一使用UTC时间,若需获取本地时间的午夜,需先将本地时间转换为对应的UTC时间点
- CCXT库中
coinbase和coinbasepro是不同的交易所标识,需根据实际使用的平台选择
内容的提问来源于stack exchange,提问作者kobis
相关产品推荐
相关产品推荐

