You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何使用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可用时考虑,比如用BeautifulSoupselenium解析页面,但不推荐)

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有请求频率限制,不要短时间内大量发送请求
  • 如果需要查询更早的历史数据,可以分批调整startend参数,逐步获取更多数据

内容的提问来源于stack exchange,提问作者Julian

火山引擎 最新活动