开源

histdata:历史数据下载工具

从 histdata.com 下载历史市场数据,将 M1 数据转换为压缩 Apache Parquet 文件。从 34 个交易品种中选择所需数据,用于本地研究。

Python 3.10+Apache ParquetzstdMIT 许可证34 个交易品种
在 GitHub 上查看
命令行示例
$ pip install git+https://github.com/StratCraftsAI/histdata.git
$ histdata --pairs EURUSD GBPUSD --year-start 2020 --year-end 2025
输出示例:每个交易品种生成一个 Parquet 文件
output/EURUSD_M1.parquet
output/GBPUSD_M1.parquet

功能

构建本地市场数据集,并在量化分析前检查其覆盖范围。

34 个交易品种

23 个外汇货币对、2 个商品(WTI 和布伦特原油)及 9 个指数,包括标普 500、日经指数和 DAX。

Apache Parquet 输出

采用 zstd 压缩的 Parquet 文件,可用 pandas、Polars、DuckDB 及其他兼容 Arrow 的工具读取。

命令行工具

使用 pip 安装,通过 histdata 命令选择交易品种和年份。

历史数据归档选择

M1 下载会根据请求的日期范围选择可用的年度或月度归档,并复用已验证的本地归档。

明确的数据类型

OHLCV 列使用 timestamp[ms] 和 float64 类型。分析前请检查源数据时区和所选的命令行工作流程。

Python 依赖

依赖 requests、beautifulsoup4、pyarrow 和 filelock。需要 Python 3.10 或更高版本。

处理流程

下载归档、解析 M1 数据,并写入具有明确数据类型的 Parquet 文件。

1
提取令牌
→
2
下载 ZIP
→
3
解析 M1 CSV
→
4
写入 Parquet
histdata.com → ZIP (CSV) → list[OHLCVRow] → Parquet (zstd)

支持的交易品种

涵盖外汇、商品和全球指数,共 34 个交易品种。可用历史数据范围因品种而异。

外汇 23

主要货币对

EURUSDGBPUSDUSDJPYUSDCHFUSDCADAUDUSDNZDUSD

交叉货币对

EURAUDEURCADEURCHFEURGBPEURNZDGBPAUDGBPCADGBPCHFGBPNZDAUDNZD

日元交叉货币对

AUDJPYCADJPYCHFJPYEURJPYGBPJPYNZDJPY

商品 2

BCOUSDBrent Crude Oil
WTIUSDWTI Crude Oil

指数 9

AUXAUDASX 200
FRXEURCAC 40
GRXEURDAX 30
HKXHKDHang Seng
JPXJPYNikkei 225
NSXUSDNASDAQ 100
SPXUSDS&P 500
UDXUSDUS Dollar Index
UKXGBPFTSE 100

输出数据结构

Parquet 列具有明确的数据类型。合并数据集前,请验证时间戳和数据质量。

列名类型说明
timestamptimestamp[ms]K 线时间;常规 M1 下载使用 UTC,--skip-download 保留源数据的 EST 时间
openfloat64开盘价
highfloat64最高价
lowfloat64最低价
closefloat64收盘价
volumefloat64源数据成交量字段
数据源histdata.com — 通用 ASCII CSV,以分号分隔;无需 API 密钥
源数据时区EST (UTC-5, 不进行夏令时调整)
格式Apache Parquet + zstd

快速开始

从 GitHub 安装,并选择所需的交易品种和日期范围。

安装
pip install git+https://github.com/StratCraftsAI/histdata.git
命令行用法
# Download EURUSD 2020-2025 and convert to Parquet
histdata --pairs EURUSD --year-start 2020 --year-end 2025

# Multiple pairs
histdata --pairs EURUSD GBPUSD USDJPY --year-start 2015 --year-end 2025

# All 34 instruments
histdata --pairs all --year-start 2020 --year-end 2025
使用 pandas 读取
import pandas as pd

df = pd.read_parquet("output/EURUSD_M1.parquet")
print(df.head())
#              timestamp     open     high      low    close  volume
# 0 2023-01-02 17:00:00  1.07045  1.07048  1.07045  1.07048     0.0

命令行选项

选项默认值说明
--pairs外汇 (23)要下载的交易品种。使用 "all" 选择全部 34 个品种。
--year-start2020下载的起始年份。
--year-end2025下载的结束年份。
--timeframeM1M1 转换一分钟 K 线。tick 选项可以下载归档,但没有 tick 解析器,也不输出 Parquet。
--output-dir./outputParquet 输出文件目录。
--zip-dir./downloads下载的 ZIP 归档目录。
--skip-downloadoff仅转换现有的 M1 ZIP 文件;保留源数据的 EST 时间戳。
-v, --verboseoff启用调试日志。

常见问题

需要 API 密钥吗?

无需 API 密钥。下载工具会在下载前从 histdata.com 获取归档令牌。

下载需要多长时间?

耗时取决于可用归档的数量和大小、网络状况及本地处理速度。下载工具会限制请求频率,不保证完成时间。

可以将输出用于量化研究吗?

M1 Parquet 文件可通过 pandas 或其他兼容 Parquet 的工具读取。导入研究平台前,请检查数据覆盖范围、质量、列映射和时区要求。

时间戳使用哪个时区?

源 CSV 使用固定 EST(UTC-5),不进行夏令时调整。常规 M1 下载会转换为 UTC。--skip-download 流程保留解析后的源数据 EST 值。Parquet 的 timestamp[ms] 不含时区元数据。

支持 tick 数据吗?

--timeframe tick 选项可以下载 tick 归档,但尚未实现 tick 解析和 Parquet 转换。要获取文档所述的 OHLCV 输出,请使用 M1。

开始使用

采用 MIT 许可证的开源软件。扩大使用范围前,请阅读源码并验证一个小型数据集。