如何下载比特币历史价格数据(分步指南)
比特币拥有悠久而丰富的交易历史,使其成为全球分析最多的资产之一。历史价格数据不仅仅是图表上的数字,更是回测策略、洞察市场周期、理解投资者行为,甚至驱动应用程序或研究工具的基础。可靠的数据有助于交易者验证决策,研究人员检验理论,开发者构建用户信赖的功能。
在本指南中,我们将介绍使用 CoinGecko 资源下载比特币历史价格数据的两种实用方法:
- 直接从 CoinGecko 上的比特币页面导出(无需代码)。
- 使用CoinGecko API在电子表格或代码中实现自动访问。
最后,您将能够检索比特币的过去价格,无论您是需要快速的 CSV 文件进行分析还是需要为您的项目提供自动数据馈送。
如何以 Excel 或 CSV 格式下载比特币历史数据?
下载比特币历史数据的最快方法是直接从 CoinGecko比特币历史数据页面下载。此方法非常适合需要 CSV 或 Excel 电子表格格式的数据进行快速一次性分析的用户,因为无需注册或登录账户。
如果您需要更细粒度的数据,CoinGecko API 提供了/coins/{id}/market_chart和/coins/{id}/ohlc等端点,用于获取历史价格和 OHLC 数据。
如何从 CoinGecko 网站下载比特币历史数据
按照这些简单的步骤,只需单击几下即可下载数据。
步骤 1:导航到 CoinGecko 上的比特币硬币页面,然后单击“历史数据”选项卡。
第 2 步:从可用选项中选择所需的时间范围(例如,过去 7 天、30 天、1 年或自定义日期)。
步骤 3:在数据表的右上角,单击下载图标,然后选择将数据下载为CSV或XLS文件,如下所示:
下载后,该文件可在任何电子表格软件(例如 Excel 或 Google Sheets)中打开。数据已预先格式化,并带有清晰的列标题(日期、市值、交易量、价格),方便您创建图表、运行计算或导入其他工具。
以下是 Microsoft Excel 中导出数据的示例:
如何使用 CoinGecko API 下载比特币历史数据?
对于可重复的工作流程、精确的时间窗口或可按需刷新的数据,CoinGecko API是理想的解决方案。它允许您将比特币的历史价格直接提取到电子表格或项目中,用于分析、仪表板或回测交易策略。
使用 API 的主要方式有两种:
- 无代码:将数据直接导入 Google 表格或 Excel。
- 使用代码:使用 Python、JavaScript、PHP 等语言以编程方式获取数据。
两种方法都需要 CoinGecko API 密钥。如果您没有,请按照本指南获取免费的演示 API 密钥。在本指南中,比特币的 API 币种 ID 很简单bitcoin
。
在 Google 表格或 Excel 中下载比特币历史数据(无需代码)
如果您更喜欢无代码方法,可以使用 CoinGecko API 将比特币的历史价格数据直接提取到 Google 表格或 Excel 中。这样,您无需任何编程即可分析、绘制图表和共享数据。
Google 表格
您可以使用免费的 API 连接器扩展来提取数据。
安装 API 连接器:从 Google Workspace Marketplace 添加“Mixed Analytics 的 API 连接器”扩展。
创建新请求:在扩展中,创建一个新请求并输入历史数据的 CoinGecko API 请求 URL:
演示 API:
https://api.coingecko.com/api/v3/coins/bitcoin/market_chart?vs_currency=usd&days=30&interval=daily&precision=full?x_cg_demo_api_key=YOUR_API_KEY
专业 API:
https://pro-api.coingecko.com/api/v3/coins/bitcoin/market_chart?vs_currency=usd&days=30&interval=daily&precision=full?x_cg_pro_api_key=YOUR_API_KEY
运行请求:执行请求将数据拉入当前工作表并以所需的格式下载数据。
要获得带有屏幕截图的详细演练,请阅读有关如何 将加密货币价格导入 Google 表格的完整指南。
Microsoft Excel:
Excel 内置的 Power Query 工具可以直接从 API 获取数据。
打开 Power Query:在 Excel 中,转到“数据”选项卡并选择“来自 Web”。
输入API URL:在对话框中输入API请求URL:
演示 API:
https://api.coingecko.com/api/v3/coins/bitcoin/market_chart?vs_currency=usd&days=30&interval=daily&precision=full?x_cg_demo_api_key=YOUR_API_KEY
专业 API:
https://api.coingecko.com/api/v3/coins/bitcoin/market_chart?vs_currency=usd&days=30&interval=daily&precision=full?x_cg_demo_api_key=YOUR_API_KEY
转换和加载: Power Query 编辑器将打开,允许您将 JSON 响应转换为表格,然后将其加载到工作表中以供下载和导出。
要获得带有屏幕截图的详细演练,请阅读有关如何 将加密货币价格导入 Excel 的完整指南。
使用 Python 下载比特币历史数据
对于更高级或自动化的用例,您可以通过编程方式获取数据。CoinGecko API 兼容任何支持 HTTP 请求的语言,但本指南使用 Python,因为它在数据分析领域非常流行。
API 端点和 URL
Demo 和 Pro API 的基本 URL 为:
- 演示 API:
https://api.coingecko.com/api/v3
- 专业 API:
https://pro-api.coingecko.com/api/v3
对于历史价格数据,我们将使用/coins/{id}/market_chart端点。此端点返回指定天数的价格、市值和 24 小时交易量。
在本节中,我们将介绍如何使用 Python 获取比特币的历史价格数据。
步骤 1:先决条件
1、安装 Python
从 python.org 下载。
建议使用3.7或以上版本。
通过在终端或命令提示符上运行以下命令来确认安装:
python --version
2、创建虚拟环境
这样可以使依赖项保持清晰且特定于项目。首先,在终端或命令提示符中运行以下命令来创建环境:
python -m venv coingecko_env
接下来,使用适合您的操作系统的命令激活它:
- Windows: coingecko_env\Scripts\activate
- macOS/Linux: source coingecko_env/bin/activate
3、安装所需的软件包
在您的环境中,安装以下软件包:
- 请求:允许您的程序进行 API 调用(通过网络发送和接收数据)。
- Pandas:一个强大的库,用于处理和组织表格数据。我们将用它来整理 API 输出。
- Openpxyl:一个允许 Pandas 写入 Excel 工作簿的库。
- Pathlib:一个方便的标准库工具,用于检查文件是否已经存在。
pip install requests pandas openpxyl pathlib
4、检查软件包是否正确安装
您可以通过运行以下命令来确认软件包是否已安装:
pip show requests pandas
第 2 步:管理您的 API 密钥
为了保证您的 API 密钥安全并且与您的代码分开,请将其存储在外部 JSON 文件中。
创建一个名为 api_keys.json 的文件并添加您的密钥,如下所示:
{ "x-cg-demo-api-key": "YOUR_DEMO_API_KEY", "x-cg-pro-api-key": "YOUR_PRO_API_KEY" }
步骤 3:设置密钥检索和 API 调用
安装先决条件并将 API 密钥安全地存储在适当的位置后,下一步是设置辅助函数 以确保:
- 您的 API 密钥正在 正确加载。
- 该程序可以成功与 CoinGecko API 通信。
首先,我们将设置辅助函数来加载 API 密钥并向 CoinGecko API 发出请求。get_Response ()函数将处理 API 调用,并将端点、标头和参数作为参数。这种模块化方法使代码保持简洁且可重用。
import json from pathlib import Path import requests as rq import pandas as pd import openpyxl # required by pandas' ExcelWriter (engine="openpyxl") PUB_DEMO_URL = "https://api.coingecko.com/api/v3" PUB_PRO_URL = "https://pro-api.coingecko.com/api/v3" def get_demo_key(): # CHANGE the path if your file is elsewhere with open(r"YOUR_KEYS_FILE_PATH", "r", encoding="utf-8") as f: key_dict = json.load(f) return key_dict.get("x-cg-demo-api-key") def get_pro_key(): with open(r"YOUR_KEYS_FILE_PATH", "r", encoding="utf-8") as f: key_dict = json.load(f) return key_dict.get("x-cg-pro-api-key") def get_response(endpoint, headers=None, params=None, base_url=None): if not base_url: raise ValueError("base_url is required (use PUB_DEMO_URL or PUB_PRO_URL).") url = f"{base_url}{endpoint}" resp = rq.get(url, headers=headers, params=params, timeout=30) resp.raise_for_status() return resp.json()
专业提示:可在任何 API 请求中 重复使用get_Response()辅助函数。只需为每次调用提供特定的端点 (endpoint)、带有 Demo 或 Pro 键的标头 (headers )、 params和base_url作为参数即可。
步骤 4:测试 API 连接
在获取完整数据集之前,最好先测试一下你的设置。/ping端点是确认 API 密钥正常工作的简单方法。以下脚本会加载你的密钥,ping API,然后进行一次小型测试调用,以获取比特币的前两个数据点。
# 0) Load key and show last 4 chars so we know it loaded key = get_Demo_key() print("Loaded demo key (last 4):", (key or "")[-4:]) headers = {"accept": "application/json", "x-cg-demo-api-key": key} base_url = PUB_DEMO_URL # 1) Ping to Authenticate ping = get_Response("/ping", headers=headers, base_url=base_url) print("PING:", ping) # 2) A small real call params = {"vs_currency": "usd", "days": "7", "interval": "daily"} mc = get_Response("/coins/bitcoin/market_chart", headers=headers, params=params, base_url=base_url) print("First 2 prices:", mc.get("prices", [])[:2])
如果一切正常,您应该会看到如下所示的响应:
步骤5:获取比特币历史价格数据
现在,让我们使用/coins/{id}/market_chart端点来获取过去 7 天的历史数据。
其作用:
- 通过 get_Response()调用按 ID 端点的硬币历史图表数据。
- 将 JSON 响应存储在 mc 中。
- 确保定义key、headers、endpoint和params。
key = get_Demo_key() headers = {"accept": "application/json", "x-cg-demo-api-key": key} base_url = PUB_DEMO_URL params = {"vs_currency": "usd", "days": "7", "interval": "daily"} #parameters to query upon, BTC daily data for the past 7 days mc = get_Response("/coins/bitcoin/market_chart", headers=headers, params=params, base_url=base_url )
步骤 6:处理数据并将其下载到 Excel
API 响应会以单独的列表形式返回价格、市值和交易量。以下代码会处理这些原始 JSON 数据,将其组合成干净的 Pandas DataFrame,并将其保存到 Excel 工作簿中的工作表中。如果该文件已存在,它将替换该工作表,以便轻松重新运行脚本。
#Shape the data def series_to_df(series, value_col): df = pd.DataFrame(series, columns=["ts_ms", value_col]) df["date"] = pd.to_datetime(df["ts_ms"], unit="ms") return df[["date", value_col]] df_price = series_to_df(mc.get("prices", []), "price_usd") df_mcap = series_to_df(mc.get("market_caps", []), "market_cap_usd") df_volume = series_to_df(mc.get("total_volumes", []), "volume_24h_usd") df = ( df_price.merge(df_mcap, on="date", how="left") .merge(df_volume, on="date", how="left") .sort_values("date") .reset_index(drop=True) )[["date", "price_usd", "market_cap_usd", "volume_24h_usd"]] # 3) Append to an existing workbook as a NEW sheet (or create if missing) from pathlib import Path out_path = "crypto_market_data.xlsx" # your master workbook sheet_name = "btc_7d_usd" # name the sheet for clarity if Path(out_path).exists(): # Append; if the sheet already exists, REPLACE it (safer for reruns) with pd.ExcelWriter(out_path, engine="openpyxl", mode="a", if_sheet_exists="replace") as xw: df.to_excel(xw, index=False, sheet_name=sheet_name) else: # Create the workbook and write the first sheet with pd.ExcelWriter(out_path, engine="openpyxl") as xw: df.to_excel(xw, index=False, sheet_name=sheet_name) print(f"Saved sheet '{sheet_name}' in {out_path}")def series_to_df(series, value_col): df = pd.DataFrame(series, columns=["ts_ms", value_col]) df["date"] = pd.to_datetime(df["ts_ms"], unit="ms") return df[["date", value_col]] df_price = series_to_df(mc.get("prices", []), "price_usd") df_mcap = series_to_df(mc.get("market_caps", []), "market_cap_usd") df_volume = series_to_df(mc.get("total_volumes", []), "volume_24h_usd") df = ( df_price.merge(df_mcap, on="date", how="left") .merge(df_volume, on="date", how="left") .sort_values("date") .reset_index(drop=True) )[["date", "price_usd", "market_cap_usd", "volume_24h_usd"]] out_path = "crypto_market_data.xlsx" # your master workbook sheet_name = "btc_7d_usd" # rename as you like mode = "a" if Path(out_path).exists() else "w" with pd.ExcelWriter(out_path, engine="openpyxl", mode=mode, if_sheet_exists="replace") as xw: df.to_excel(xw, index=False, sheet_name=sheet_name) print(f"Saved sheet '{sheet_name}' in {out_path}")
示例输出:
您可以通过更改以下变量来自定义输出:
- value_col:重命名列(例如,“price_in_usd”)。
- sheet_name:设置 Excel 工作表的显示方式(例如“btc_30d_eur”)。
- out_path:选择用于保存 Excel 工作簿的文件名或文件夹。
专业提示:在开发过程中,运行脚本时最好保持 Excel 文件关闭,以避免写入错误。
如何下载其他加密货币的历史数据
虽然本指南以比特币为例,但同样的方法也适用于 CoinGecko 上数千种其他加密货币。要获取其他加密货币的数据,只需在 API 调用中替换货币 ID(例如,将“比特币”更改为“以太坊”或“solana”)。
您可以在CoinGecko 网站的任何单个硬币页面上找到 API ID 。
专业提示:币种 ID 区分大小写,多个币种可能使用相似的代码。为避免错误,请务必直接从 CoinGecko 网站或我们的 API 文档获取并使用正确的 ID 。
未来发展
通过访问历史数据,您可以构建各种强大的工具。对于想要进一步探索的读者,以下是一些相关指南:
- 回测策略:使用历史数据通过我们的加密回测指南测试交易策略的性能。
- 纸质交易机器人:通过构建加密纸质交易机器人在无风险环境中模拟交易。
- 价格预测模型:应用机器学习技术来预测未来价格,并遵循我们关于构建比特币价格预测模型的指南。
结论
在本指南中,我们演示了两种从 CoinGecko 下载比特币历史数据的有效方法。从网站直接导出非常适合快速手动将数据提取到 CSV 或 Excel 文件中;而 CoinGecko API 则为使用 Google Sheets、Excel 或 Python 等工具的开发者和分析师提供了强大的编程解决方案。按照概述的步骤,您可以访问丰富的历史数据,以支持您的分析、回测策略以及构建 DeFi 应用程序。
虽然本文中使用的端点可以通过免费的 Demo API 密钥访问,但它仅提供最多 365 天的历史数据。如果您需要访问自 2013 年以来更精细的数据,并享受更高的速率限制以及专属端点的访问权限,请考虑订阅套餐。
以上就是如何下载比特币历史价格数据(分步指南)的详细内容,更多关于比特币历史价格数据下载指南的资料请关注脚本之家其它相关文章!
本站提醒:投资有风险,入市须谨慎,本内容不作为投资理财建议。