如何使用Python读取股票图表及查询特定时间点的比特币价格?
Python读取股票/加密货币图表数据的可行方案及Bitstamp BTC/EUR查询实现
Hey there! Let's tackle your two questions one by one:
1. 是否存在用Python读取股票图表的可行方法?
Absolutely! 而且直接通过API获取底层数据比解析可视化图表要可靠得多——毕竟图表是给人类看的,解析网页图表容易受页面结构变化、反爬机制影响,而API提供的是结构化的原始数据,更适合程序处理。
Python生态里有大量工具可以实现:
- 针对股票/加密货币交易所的官方API(比如Bitstamp、Binance的官方API)
- 第三方数据库(比如
yfinance用于美股数据) - 网页爬虫(仅在没有API可用时考虑,比如用
BeautifulSoup、selenium解析页面,但不推荐)
2. 实现Bitstamp BTC/EUR特定时间点价格查询的Python程序
Bitstamp提供了官方REST API,我们可以用它获取BTC/EUR的历史K线(OHLC)数据,再根据指定时间点匹配对应价格。下面是具体实现步骤:
第一步:安装依赖
首先安装requests库用于发送API请求:
pip install requests
第二步:编写查询代码
下面的代码会从Bitstamp获取历史数据,将指定时间转换为UTC时间戳,然后匹配对应的价格:
import requests from datetime import datetime import time def get_btceur_price_at_time(target_time_str, time_format="%Y-%m-%d %H:%M:%S"): # 1. 将目标时间转换为UTC时间戳(Bitstamp API使用UTC时间) target_dt = datetime.strptime(target_time_str, time_format) target_timestamp = int(time.mktime(target_dt.timetuple())) # 2. 调用Bitstamp OHLC API获取历史数据 url = "https://www.bitstamp.net/api/v2/ohlc/btceur/" params = { "step": 60, # 时间间隔,单位秒,60=1分钟,3600=1小时,根据需求调整 "limit": 1000, # 返回的数据条数,最多1000条 "start": target_timestamp - 3600, # 取目标时间前1小时的数据,确保覆盖目标点 "end": target_timestamp + 3600 # 取目标时间后1小时的数据 } response = requests.get(url, params=params) response.raise_for_status() # 捕获请求错误 ohlc_data = response.json()["data"]["ohlc"] # 3. 遍历数据,找到最接近目标时间的价格 closest_price = None min_time_diff = float("inf") for entry in ohlc_data: entry_timestamp = int(entry["timestamp"]) time_diff = abs(entry_timestamp - target_timestamp) if time_diff < min_time_diff: min_time_diff = time_diff # 这里可以选择开盘价、收盘价、最高价、最低价,根据需求调整 closest_price = float(entry["close"]) return closest_price # 示例:查询2024年5月20日14:00:00 UTC的BTC/EUR价格 if __name__ == "__main__": target_time = "2024-05-20 14:00:00" price = get_btceur_price_at_time(target_time) if price: print(f"在{target_time} UTC时刻,BTC/EUR的价格约为: {price} EUR") else: print("未找到对应时间点的数据")
代码说明:
- 时间处理:Bitstamp API返回的是UTC时间,所以需要将你的目标时间转换为UTC时区再查询,避免时区误差
- step参数:决定了数据的时间粒度,比如设置为60就是每分钟一条数据,设置为3600就是每小时一条,粒度越细,查询结果越精确
- 价格选择:代码中用了收盘价,你可以根据需求换成
open(开盘价)、high(最高价)或low(最低价)
注意事项:
- Bitstamp API有请求频率限制,不要短时间内大量发送请求
- 如果需要查询更早的历史数据,可以分批调整
start和end参数,逐步获取更多数据
内容的提问来源于stack exchange,提问作者Julian




