1. 项目概述:为什么我们需要高质量的股市数据集?
做机器学习,尤其是量化交易或者金融预测模型的朋友,肯定都听过一句话:“垃圾进,垃圾出”。你的模型再精巧,算法再前沿,如果喂给它的数据本身质量不行、维度不全或者存在各种“坑”,那最终的结果大概率是自娱自乐,甚至可能让你在实盘中亏得找不着北。所以,寻找一个靠谱的股市数据集,是构建任何金融机器学习模型的第一步,也是最关键、最容易被新手忽视的一步。
我这些年折腾过不少数据源,从免费的雅虎财经到昂贵的彭博终端,踩过的坑不计其数。今天,我就结合自己的实战经验,为你梳理和评测10个在机器学习领域真正好用、各有侧重的股市数据集。我们不光看它“有什么”,更要深挖它“怎么用”、“有什么坑”,以及它最适合解决哪一类问题。无论你是想预测股价走势、分析市场情绪、构建多因子模型,还是进行事件驱动研究,这份清单里总有一款适合你。
2. 核心需求解析:机器学习对股市数据到底要求什么?
在开始罗列具体的数据集之前,我们必须先统一思想:一个适用于机器学习的股市数据集,绝不仅仅是“有开盘价和收盘价”那么简单。它需要满足一系列苛刻的条件,这些条件直接决定了你后续特征工程、模型训练乃至回测的成败。
2.1 数据的完整性与一致性
这是最基本,也最容易出问题的地方。完整性指的是数据在时间序列上不能有缺失。比如,某只股票因为停牌,在交易日没有交易,那么它的价格数据应该是“NaN”或明确的标识,而不是用0或者前一天的收盘价简单填充。不一致性则更隐蔽,例如不同数据源对“调整后价格”的处理方式可能不同(是向后复权还是向前复权?),股息和拆股事件是否已正确反映在历史价格中。如果你的模型使用了多个特征,而这些特征来自不同源头,时间戳的对齐、频率的统一(是Tick数据、分钟线还是日线?)就是个大工程。
注意:很多免费数据源在股票发生拆股(如1拆5)时,只会提供拆分当日的调整因子,而不会自动帮你把历史价格全部调整好。如果你直接用原始价格计算收益率,会在拆分日产生一个巨大的、错误的跳空缺口,导致模型学到完全错误的信息。
2.2 数据的频率与粒度
你要做什么样的模型,决定了你需要什么频率的数据。
- 高频交易/微观结构模型:需要Tick级(逐笔成交)或分钟级数据。这包含了每一笔交易的细节,如成交价、成交量、买卖方向(如果有的话),用于分析订单流、市场冲击成本等。
- 中短期趋势预测/因子模型:日频数据是绝对主力。包含了OHLCV(开盘、最高、最低、收盘、成交量),通常还需要调整后收盘价。
- 宏观/长期资产配置模型:周频或月频数据可能就足够了,有时还需要结合宏观经济指标。
数据的粒度还包括标的的范围。你是只做美股(如标普500成分股)?还是需要全球主要市场的股票?是否包含ETF、指数、期货、期权?这些都需要根据你的策略边界来界定。
2.3 丰富的特征维度
现代机器学习模型,特别是深度学习模型,性能的提升很大程度上依赖于更多、更有效的特征。一个优秀的数据集除了价格和成交量,还应提供:
- 基本面数据:市盈率(P/E)、市净率(P/B)、每股收益(EPS)、营收、资产负债表项目等。这些是价值投资和多因子模型的基石。
- 市场数据:买一卖一价、盘口深度、资金流向、换手率等。
- 另类数据:这是近年来的热点,包括新闻情绪(通过NLP分析新闻、社交媒体)、供应链数据、卫星图像(如停车场车辆数预测零售商业绩)、高管交易记录等。另类数据往往能提供独特的阿尔法来源。
2.4 获取的便利性与成本
对于个人研究者和初创团队,成本是必须考虑的因素。有些顶级数据源(如彭博、路透社Eikon)年费动辄数十万,显然不现实。我们需要在数据质量、覆盖范围和成本之间找到平衡。幸运的是,现在有很多开源、低成本或提供免费层级的优秀数据源。
3. 十大机器学习股市数据集深度评测
接下来,我将基于上述标准,对这十个数据集进行深度剖析。我会按照“免费/开源 -> 低成本 -> 专业级”的大致顺序来介绍,并给出我的“实战推荐指数”和“适合场景”。
3.1 免费与开源数据集:个人研究的起点
3.1.1 Yahoo Finance (viayfinance库)
这可能是全球个人开发者最熟悉、使用最广泛的免费数据源了。通过Python的yfinance库,可以非常方便地获取全球大量股票、ETF、指数的历史日频数据。
- 数据内容:历史OHLCV、调整后收盘价、股息和拆股信息。还能获取基本面摘要、期权链等。
- 优点:
- 完全免费,无请求次数限制(但可能有速率限制)。
- 接口极其简单,几行代码就能拉取数十年数据。
- 覆盖广,不仅美股,很多国际市场的标的也能获取。
- 缺点与坑:
- 数据质量不稳定:雅虎财经的数据源本身并非交易所直连,偶尔会出现错误数据或缺失,尤其在盘前盘后时段。
- 调整价格可能不一致:对于拆股和股息,它提供了调整因子和调整后价格,但最好自己根据因子复核一遍。
- 非实时:有15分钟左右的延迟,不适合做实时交易信号。
- 实战心得:
- 对于历史回测和学术研究,它是快速验证想法的绝佳工具。
- 在用于正式研究前,务必对关键日期(如大型拆股日)的数据进行人工抽查,对比其他数据源(如谷歌财经)进行验证。
- 可以使用
yfinance的download方法,并设置auto_adjust=False来获取原始价格和调整因子,然后自己在本地进行复权计算,这样更可控。
- 适合场景:机器学习入门、策略思想快速原型验证、课程作业、覆盖长周期历史数据的初步研究。
3.1.2 Alpha Vantage (免费层级)
Alpha Vantage提供了通过API获取金融数据的服务,其免费层级非常慷慨。
- 数据内容:非常丰富,包括历史时间序列(日、周、月、日内)、技术指标(SMA, RSI, MACD等直接计算好)、外汇、数字货币,以及部分基本面数据(如季度营收、资产负债表)。
- 优点:
- 功能全面:一个API搞定价格、技术指标甚至部分基本面,省去大量特征计算时间。
- 数据结构化好:返回标准的JSON或CSV格式,清晰易用。
- 免费额度足够个人使用:每天有数百次的API调用限额,对于非高频的研究足够。
- 缺点:
- API调用频率限制:免费版有每分钟/每日的调用次数限制,批量获取大量股票数据时需要精心设计请求队列和缓存。
- 历史数据长度可能有限:对于某些数据类型,免费层可能不提供非常久远的历史。
- 实战心得:
- 非常适合用来构建“价格+技术指标”的复合特征数据集。
- 建议将获取到的数据持久化到本地数据库或文件中,避免重复调用API,也便于进行数据清洗和回溯。
- 适合场景:需要技术指标作为特征的中短期预测模型、多资产类别(股、汇、币)研究。
3.1.3 Quandl
Quandl是一个金融、经济另类数据的聚合平台。它有很多免费数据集,其中最著名的就是“WIKI Prices”数据集(现已归档,但仍有镜像),它提供了美股多家交易所的调整后日频价格数据,质量很高。
- 数据内容:核心是高质量的调整后价格数据。此外,平台上有海量的另类数据集,如商品价格、经济指标等,部分免费,部分收费。
- 优点:
- 数据质量较高:WIKI Prices数据集在社区中口碑很好,清洗得比较干净。
- 另类数据宝库:可以找到很多独特的特征来源,比如不同地区的房地产指数、特定行业的就业数据等。
- 缺点:
- 核心免费数据集已停止更新:WIKI Prices数据集在2018年已停止更新,仅适合做历史研究。
- 接口变化:Quandl被纳斯达克收购后,部分免费政策和使用方式有所调整。
- 实战心得:
- 可以将WIKI Prices作为历史数据的一个可靠基准,与其他数据源进行交叉验证。
- 在寻找与股市相关的宏观经济或行业特征时,可以首先到Quandl上搜索,可能会有惊喜。
- 适合场景:需要干净历史价格数据的研究、寻找宏观经济或行业层面另类数据特征。
3.1.4 Kaggle 金融数据集
Kaggle上有大量用户上传和竞赛发布的金融数据集,例如著名的“S&P 500 stock data”数据集。
- 数据内容:五花八门,有整理好的标普500成分股日线数据、分钟线数据,也有新闻标题与股价关联数据集等。
- 优点:
- 即拿即用:通常已经是清洗好的CSV文件,无需调用API,下载即可导入。
- 场景明确:很多数据集是伴随特定竞赛发布的,带有明确的问题场景(如预测未来N天的收益率),非常适合练手。
- 缺点:
- 质量和时效性无法保证:因为是用户上传,数据可能有过时、错误或不完整的问题。
- 缺乏维护:数据集一旦上传,可能就不再更新。
- 实战心得:
- 最适合用于算法学习和参加Kaggle竞赛。在将某个数据集用于严肃研究前,务必对数据的基本统计特征(如收益率分布、缺失值)进行检查。
- 可以关注Kaggle上由官方机构(如交易所)发布的数据集,质量相对更高。
- 适合场景:机器学习入门练习、参加量化竞赛、获取特定主题的(如新闻情绪)练习数据集。
3.2 低成本与专业入门数据集
3.2.1 IEX Cloud
IEX Cloud是知名交易所IEX(电影《Flash Boys》中提到的那个)旗下的数据平台。它提供真实、干净的交易所数据。
- 数据内容:非常全面,包括实时/历史价格、深度行情、基本面数据(财务报表)、新闻、社交媒体情绪等。其“核心数据”产品覆盖美股。
- 优点:
- 数据质量高:源自交易所,可靠性远超免费爬虫数据。
- 套餐灵活:有按次付费(Pay-as-you-go)和月度订阅计划,对于中小型项目成本可控。
- API设计优秀:文档清晰,响应速度快,支持WebSocket实时数据。
- 缺点:
- 有成本:虽然起步价不高,但一旦数据用量大,费用会显著增加。
- 历史数据深度:对于非常久远的历史数据,可能需要额外购买或使用其他数据源补充。
- 实战心得:
- 如果你的项目需要可靠、干净的数据,且有一定预算,IEX Cloud是免费数据源到彭博/路透社之间的一个完美过渡选择。
- 特别适合需要结合实时行情和基本面数据构建模型的场景。
- 适合场景:初创量化团队、对数据质量有要求的个人实盘交易者、需要结合基本面和市场数据的模型。
3.2.2 Polygon.io
Polygon.io 是另一个非常受开发者欢迎的金融数据API提供商,以其强大的实时和历史数据著称。
- 数据内容:提供美股、外汇、加密货币的实时报价、聚合分钟/小时/日K线、原始逐笔交易(Ticks)、期权数据等。历史数据覆盖深度好。
- 优点:
- 实时数据强大:对于需要构建实时监控或交易系统的项目,Polygon的WebSocket流非常稳定高效。
- 历史Tick数据:这是其一大特色,可以获取到每一笔成交记录,对于高频策略研究至关重要。
- 开发者友好:提供清晰的文档和多种语言的SDK。
- 缺点:
- 成本集中于高频需求:免费层级非常有限,一旦涉及实时数据或大量历史Tick数据,费用上升较快。
- 基本面数据相对较弱:虽然也有,但不如IEX Cloud或专业基本面数据商全面。
- 实战心得:
- 如果你的模型严重依赖于盘口信息、订单流或日内高频模式,Polygon是性价比很高的选择。
- 使用其聚合K线接口(Aggregates)可以高效地获取规整的分钟/小时线,比自己从Tick数据合成要省心得多。
- 适合场景:日内交易策略研究、高频数据回测、需要Tick级数据的市场微观结构分析。
3.2.3 Tiingo
Tiingo 是一个平台,集成了数据、新闻、分析工具和投资组合管理。其数据产品部分非常突出。
- 数据内容:提供股票、ETF、共同基金、外汇的历史日频/分钟频数据、基本面数据(包括详细的财务报表)、新闻数据,甚至提供统一的数据清洗和点调整(Point-in-Time)服务。
- 优点:
- 数据清洗服务:这是Tiingo的核心优势之一。他们会对基本面数据进行“点调整”,确保你在回测时使用的财务数据是当时市场上实际可用的,避免了使用未来数据的“前视偏差”,这对量化研究至关重要。
- 套餐包含基本面数据:其付费套餐中包含了清洗后的基本面数据,对于多因子模型研究者来说非常方便。
- 友好的个人计划:有针对个人开发者和研究者的实惠套餐。
- 缺点:
- 实时数据非核心:虽然也提供,但其强项在于历史和基本面数据。
- 覆盖范围:主要侧重于美股市场。
- 实战心得:
- 强烈推荐给从事基本面量化(Quantamental)或多因子模型的研究者。点调整过的基本面数据能极大提升回测的真实性。
- 可以先从其免费API开始试用,感受其数据质量。
- 适合场景:价值投资策略回测、多因子模型(Alpha模型)开发、学术研究(要求避免前视偏差)。
3.3 专业级与另类数据集
3.3.1 WRDS (Wharton Research Data Services)
WRDS是学术界的黄金标准,由宾夕法尼亚大学沃顿商学院运营。它本质上是一个数据网关,集成了CRSP、Compustat、TAQ等顶级商业数据库。
- 数据内容:无所不包。CRSP(美股价格和回报率)、Compustat(全球公司基本面)、TAQ(纽交所和高频交易数据)、IBES(分析师预测)、以及无数其他专业数据库。
- 优点:
- 数据权威、质量顶级:是金融学术论文最常引用的数据源。
- 历史数据极其完整:很多数据库可追溯到数十年前。
- 数据库经过严格学术清洗:比如CRSP的回报率数据已经过精心调整,处理了分红、拆股等各种公司事件。
- 缺点:
- 访问权限限制:通常只有高校、研究机构或大型金融机构才能订阅,费用昂贵。
- 使用复杂:需要通过SAS、Python或R通过特定接口查询,学习曲线较陡。
- 非实时:主要用于学术和历史研究。
- 实战心得:
- 如果你在高校或能通过机构访问,WRDS是进行严肃学术研究或构建长期历史回测模型的不二之选。
- 使用前需要花时间学习其数据结构和查询语言。
- 适合场景:金融学术研究、博士论文、构建需要超长历史数据(如几十年)的宏观策略。
3.3.2 Bloomberg / Refinitiv Eikon
彭博终端和路透社Eikon是华尔街专业人士的日常工具,是金融数据领域的“航空母舰”。
- 数据内容:全球全资产类别的实时/历史数据、深度基本面、新闻、研究报告、分析工具、沟通功能等。几乎你能想到的任何金融数据,它们都有。
- 优点:
- 数据全覆盖、实时、权威:行业标杆。
- 工具链完整:内置强大的分析、图表、回测和编程(彭博的BQL/Python API,Eikon的API)功能。
- 缺点:
- 极其昂贵:单个终端年费在数万美元级别,非大型机构难以承受。
- 封闭生态系统:数据导出有时受限,高度依赖其终端和API。
- 实战心得:
- 对于绝大多数个人和中小团队,这不是一个可行的选项。通常只有对冲基金、投行、大型资管公司才会配备。
- 如果所在公司有,那么请充分利用其API(如
blpapi)进行数据自动化获取,可以极大提升研究效率。
- 适合场景:大型金融机构的日常投资研究、交易和风险管理。
3.3.3 另类数据供应商 (如 RavenPack, Thinknum, Orbital Insight)
这是一个庞大的类别,专门提供非传统的“另类数据”。
- 数据内容:
- RavenPack:新闻和社交媒体情绪分析,将非结构化文本转化为结构化的情感分数、事件标签。
- Thinknum:从公司网站、APP、社交媒体等公开渠道抓取替代数据,如招聘信息数量、产品价格变化、供应链信息等。
- Orbital Insight:地理空间数据,通过卫星图像分析停车场车流量、储油罐库存、农作物生长等。
- 优点:
- 提供独特的阿尔法视角:这些数据与传统价量、基本面数据相关性低,可能蕴含新的预测能力。
- 已经过一定处理:供应商通常提供清洗、聚合、标准化后的数据产品,而非原始杂乱信息。
- 缺点:
- 非常昂贵:通常是机构级定价。
- 信噪比低:需要很强的数据处理和建模能力才能从中提取有效信号。
- 回测难度大:需要精确的“点时间”对齐,避免前视偏差。
- 实战心得:
- 在考虑采购另类数据前,先用公开的替代品(如财经新闻标题)验证你的想法。例如,可以先用简单的情感词典分析新闻,如果模型有效,再考虑采购专业数据。
- 关注数据供应商是否提供“历史回测文件”,即按日期时间戳排列的数据切片,这对于严谨的回测必不可少。
- 适合场景:寻求差异化阿尔法的大型对冲基金、有能力处理复杂非结构化数据的量化研究团队。
4. 数据集选型与实战工作流指南
面对这么多选择,到底该怎么选?我的建议是遵循一个从简到繁、从免费到付费的迭代过程。
4.1 根据项目阶段选择
- 想法验证/原型阶段:Yahoo Finance (yfinance) + Alpha Vantage。零成本,快速验证策略逻辑是否基本成立。用
yfinance拉价格,用Alpha Vantage补充技术指标,几天就能跑通一个简单的LSTM预测模型。 - 初步回测与优化阶段:IEX Cloud 或 Polygon.io 的入门套餐。此时你需要更干净、更可靠的数据来排除噪音,确保策略失效不是数据错误导致的。花费每月几十到一百美元,获得质量显著提升的数据,是值得的投资。
- 基本面/多因子模型阶段:Tiingo。它的点调整基本面数据是核心竞争力,能帮你把回测的可靠性提升一个等级。
- 高频/微观结构研究阶段:Polygon.io。它的Tick数据和实时流是核心需求。
- 严肃学术研究或长期历史回测:WRDS(如果可访问)。其数据的权威性和长期性是无可替代的。
- 探索另类阿尔法:在公开数据验证想法后,考虑RavenPack等专业供应商。
4.2 构建稳健的数据管道
无论选择哪个数据源,建立一个本地数据仓库都是必要的。这不仅能节省API调用,更能保证数据的一致性和可复现性。
- 获取与存储:使用Python脚本(配合
requests,yfinance, 官方SDK等)定时获取数据。原始数据按日期、数据源分类,以Parquet或Feather格式存储(比CSV读写快得多)。数据库推荐使用TimescaleDB(基于PostgreSQL的时间序列数据库)或DuckDB(轻量级分析型数据库)。 - 清洗与校验:
- 处理缺失值:识别是停牌(应标记为NaN)还是数据错误(需查找替补数据源填充或剔除)。
- 复权计算:对于价格数据,务必使用数据源提供的调整因子,自己统一计算复权价格。一个简单的后复权公式是:
调整后价格_t = 原始价格_t * 累计调整因子_t。 - 异常值检测:检查单日收益率是否超过某个阈值(如50%),并核实是否为真实事件(如并购、破产)导致。
- 特征工程与存储:将清洗后的基础数据,计算成模型需要的特征,如各种技术指标、波动率、滚动相关系数等。将特征与基础数据分开存储,方便不同模型调用。
- 版本控制:使用DVC(Data Version Control)或简单的快照机制对数据集进行版本管理。当数据源更新或你的清洗逻辑改变时,可以生成新的数据版本,确保每次实验的数据环境是可追溯的。
4.3 避免常见的数据陷阱
- 前视偏差:这是回测中最致命的错误之一。确保你在时间
t使用的所有数据,都是在t时刻市场上实际可获得的。Tiingo的点调整数据主要就是解决这个问题。对于自己计算的特征(如过去20日均线),要确保只使用t时刻及之前的数据。 - 幸存者偏差:如果你只用当前存在的股票(如现在的标普500成分股)来回测历史,就会忽略那些已经退市或破产的公司,从而高估历史表现。解决方法是使用“成分股历史列表”,确保在每一个回测时点,只使用当时实际在指数中的股票。CRSP数据库就提供了这样的信息。
- 数据窥探:反复在同一个数据集上测试和修改策略,会导致策略过度拟合历史数据。解决方法是将数据严格分为训练集、验证集和测试集(时间序列上需按时间划分),并且只用测试集做最终的一次性评估。
5. 实战案例:搭建一个简易的A股机器学习数据管道
为了让你更有体感,我以A股市场为例(数据源相对特殊),简述一个可操作的数据管道搭建思路。虽然A股的数据获取不如美股开放,但原理相通。
- 数据源选择:对于国内个人研究者,可以考虑Tushare或AkShare这两个优秀的开源库。它们提供了国内股票、基金、期货、宏观经济等大量数据,通过积分或免费方式获取。这里以Tushare Pro为例(需要注册获取Token)。
- 基础数据获取:
import tushare as ts import pandas as pd # 设置Token ts.set_token('你的Token') pro = ts.pro_api() # 获取沪深300成分股列表(日度) df_constituent = pro.index_weight(index_code='000300.SH', start_date='20230101', end_date='20231231') # 获取一只股票(例如贵州茅台)的日线行情 df_daily = pro.daily(ts_code='600519.SH', start_date='20230101', end_date='20231231') # 获取复权因子 df_adj = pro.adj_factor(ts_code='600519.SH', trade_date='') - 数据清洗与复权:Tushare的日线行情是未复权的。我们需要结合复权因子进行计算。
# 将日线数据与复权因子合并(按交易日期和股票代码) df_merged = pd.merge(df_daily, df_adj, on=['ts_code', 'trade_date'], how='left') # 计算前复权价格(更常用):以最新股价为基准,调整历史价格 # 前复权因子 = 当日复权因子 / 最新日期的复权因子 latest_adj_factor = df_merged['adj_factor'].iloc[0] # 假设DataFrame按日期倒序排列 df_merged['adj_factor_forward'] = df_merged['adj_factor'] / latest_adj_factor df_merged['close_adj'] = df_merged['close'] * df_merged['adj_factor_forward'] # 计算收益率等特征 df_merged['return'] = df_merged['close_adj'].pct_change() - 特征工程:基于清洗后的价格,计算技术指标、波动率等。
# 计算简单移动平均线 df_merged['sma_20'] = df_merged['close_adj'].rolling(window=20).mean() # 计算布林带 df_merged['rolling_std_20'] = df_merged['close_adj'].rolling(window=20).std() df_merged['boll_upper'] = df_merged['sma_20'] + 2 * df_merged['rolling_std_20'] df_merged['boll_lower'] = df_merged['sma_20'] - 2 * df_merged['rolling_std_20'] - 存储:将处理好的
DataFrame存储到本地Parquet文件或数据库中。df_merged.to_parquet('600519_processed.parquet')
这个管道虽然简单,但涵盖了从获取、清洗、复权到特征工程的核心步骤。对于A股,要特别注意停复牌、涨跌停、分红送转等规则对数据的影响,这些在特征设计中都需要考虑进去。
选择合适的数据集是金融机器学习项目成功的基石。没有“最好”的数据集,只有“最适合”你当前阶段、预算和策略类型的数据集。我的建议是,从免费、易用的数据源开始,快速验证想法的可行性;当策略显示出潜力时,毫不犹豫地投资于更高质量、更可靠的数据。记住,在量化世界里,为高质量数据付费,往往比为错误的交易决策买单要划算得多。