美股数据源怎么选?实时行情、历史回测和AI查询的选型清单
TickDB Research ·
摘要:做美股产品、量化研究或 AI 助手,团队最怕“演示时看着都行,真交付了全得返工”。实时行情得卡准时段,历史回测得弄清复权,AI 查询必须能追溯真实数据。本文结合 Yahoo/yfinance、Alpha Vantage、Massive 和 TickDB 的官方资料与真实跑通样本,给你一套选型顺序,并附上能直接扔给技术同事的“需求卡”、原始结果和测试脚本。
假设你们团队要接入苹果(AAPL)的行情:产品经理要做盘前看板,研究员要拉历史数据跑回测,还有个同事想直接接入 AI,随时问“苹果现在多少钱”。
如果这三份需求,你跟供应商提的都是“我要美股行情”,演示的时候大家都很开心。但一到交付,大概率会演变成三轮扯皮:看板展示了昨天的收盘价、回测因为复权口径不对导致结果全废、AI 给你的答案连个时间戳都没有。
问题出在哪?不是数据源“有没有”数据,而是你拿到的到底是哪个对象、哪个时点、哪个口径。
选数据源,别一上来就比价格。先按用途排除不合适的方案,拿样本跑通,再谈接入。以 TickDB 为例,我们可以用它的快照、历史 K 线和 AI 数据工具,分别检查看板、研究和问答到底能不能落地。本文通过已配置的 TickDB MCP,真实取回了快照、日线、交易日历和时段记录,用实打实的数据带你做第一轮验收。
图1:三条路线代表不同用途,不代表供应商排名。
一分钟看懂:先分清你到底在买什么
| 你要交付什么 | 最先要确认的事 | 什么情况下赶紧跑 |
|---|---|---|
| 实时看板/价格提醒 | 显示哪个时段的价格?多久更新?能接受多旧的数据? | 只给了一个价格,没给数据时间;你要盘前,他只有常规时段。 |
| 历史回测/量化研究 | 要几年的数据?分钟线还是日线?复权方式怎么算? | 只验证了最近几天日线,就敢让你直接买多年分钟历史。 |
| AI 行情查询 | AI 是真调了接口,还是凭记忆瞎编?回答有没有时间? | 回答极其流畅,但找不到调用结果,把昨天的价格说成“现在”。 |
如果是自己盘后复盘,免费日终数据可能就够用;但如果要盘中异动提醒,再便宜的日终数据也解决不了问题。对内部研究够用的东西,放到给客户看的产品里,往往要重新验一遍。
选型的顺序应该是:先定用途 → 再核数据范围与权限 → 拿样本验真 → 最后算费用和维护账。关键条件不满足,直接排除;资料没写清的,标为待确认,别把“未知”当成“支持”。
另外,很多人容易搞混:数据供应商、访问库和 MCP 根本不是一个维度的东西。供应商提供数据;yfinance 是帮你抓数据的库;MCP 则是让 AI 客户端直接调用外部工具。选了哪种连接方式,就得核对它最后递到你手里的是什么。
四个常见入口:什么任务下值得继续看?
我们列出了四个考察入口(Yahoo/yfinance、Alpha Vantage、Massive 核对官方资料;TickDB 另外做了实测)。这不是同条件性能横评,也没有名次总分,你对号入座即可:
| 入口 | 什么任务下可以考察 | 决定要不要继续看的关键问题 |
|---|---|---|
| Yahoo / yfinance | 个人研究、学习、快速写个原型 | 你的实际用途合规吗?目标接口能满足吗? |
| Alpha Vantage | 基础 API 取数,或评估官方 MCP 入口 | 免费额度够吗?你需要的数据,是不是得充值? |
| Massive | 专门查美股成交、报价、聚合 K 线的项目 | 你买的是哪个时效层级(日终、延时还是实时)? |
| TickDB | 想在一个服务里同时验快照、历史 K 线和 AI 取数 | 目标标的和区间能不能取到?要持续更新的话,订阅稳不稳? |
1. Yahoo/yfinance:先看能取到,再看能不能用
yfinance 维护者明确说了,这主要面向研究和教育。开源代码免费,不代表数据你可以随便商用。给客户展示前,先去查查 Yahoo 的条款,把数据使用权当个硬条件。
2. Alpha Vantage:拿了 Key,先查余额和权限
它的 FAQ 里写了,免费版多数数据集每天只有 25 次请求;实时和延时 15 分钟的美股数据得付费买。所以拿到 Key 别急着写代码,先算算历史研究、刷看板、AI 问答的请求量够不够。
3. Massive:产品页写着实时,盯紧你买的具体层级
Massive 把股票数据分了日终、延时和实时层级。搞盘后和搞盘中,选的层级完全不同。采购时一定要把层级写进需求里,别光看首页写了“实时”就以为全都给。
4. TickDB:跑完 MCP 再谈持续推送
TickDB 可以从快照、K 线和 AI 工具入口做任务验证。本文实际用了它的 MCP 查询;如果要持续推送,得去单独测它的 WebSocket 行情。单次查询成功,和看板连续跑一周,完全是两码事。
选错以后,成本通常从这四个地方冒出来
坑一:看板价格没报错,但用户理解的时间错了
用户在盘前打开看板,看到红绿数字,默认这是“现在”的涨跌。如果系统取的是昨天的收盘价又没标时间,用户就被误导了。FINRA 也提醒过,盘前盘后流动性差、波动大,不同交易所价格还不一样。 怎么避坑? 需求写清楚:展示 AAPL 盘前最新成交价,必须带纽约时间;盘前没数据就明确显示“缺失”,绝不能拿昨收顶替。
坑二:都叫“复权”,换源后曲线却变了
遇到拆股、分红,各家调整历史价格的方式不一样。Massive 的 adjusted 只算拆股;Alpha Vantage 算了拆股和现金分红;TickDB 则区分不复权、前复权和后复权,默认是不复权(none)。
如果两份数据都有“收盘价”和“复权”标签,但底层处理的事件不同,直接拼在一起,你的回测结果变了,你都不知道是策略改了还是数据变了。
怎么避坑? 换源前,存好调整规则和查询时间;对比成交量时,核对好单位和调整方式。
坑三:少了一根 K 线,一自动补齐反而造了假
缺一根分钟 K 线,第一反应是接口漏数。但 Massive 官方给过另一种情况:如果没有符合条件的成交,那个时间窗就是不会生成 K 线。 整齐的数据不一定最真实。用上一根价格填满空位,就是把“没有记录”变成了假行情。 怎么避坑? 遇到缺口,先查交易日、时段、查询范围和聚合规则。确实要填,保留填充标记,别让后续研究把假数据当真。
坑四:便宜的请求,带出更贵的维护
套餐费只是冰山一角。历史数据要补吗?几套接口谁来维护?客户查一个价格,你能找出当时的原始记录吗? 这些工作没写进需求,最后往往落到某个倒霉同事头上。 怎么避坑? 比价格时,把数据费、权限、请求量和维护人力放在一起看。统一入口的价值,就是帮你省掉重复接入和核对的工作。
实际跑一组 TickDB 数据,验收到底要落在哪?
2026 年 10 月 20 日北京时间 21:08,我们通过 TickDB MCP 发起四项查询:AAPL 与 TSLA 的行情快照、AAPL 一段日线、美国市场交易日历及交易时段。原始数据和脚本都保存在随文材料中。
1. 同一个响应,两个价格,两个时点
快照请求很简单:
{"symbols":"AAPL.US,TSLA.US"}
AAPL 返回如下(价格单位美元,时间换算为纽约时间):
| 数据对象 | 价格 | 纽约时间 |
|---|---|---|
主价格 last_price | 342.94 | 2026-10-19 16:00:00(前一天收盘) |
盘前对象 pre_market_quote.last_done | 339.18 | 2026-10-20 09:08:30(今天盘前) |
同一个响应,一个昨天的收盘价,一个今天的盘前价。你要做盘前看板,直接拿主字段展示,就是拿昨收冒充盘前。 “最新”这两个字,必须落实到具体的数据对象上。 盘前/盘后对象有没有值,取决于当时的时段,UI 一定要做好缺失状态的准备。 做 AI 问答同理,回答里必须带着“数据对象、价格、数据时间、来源”,MCP 解决了 AI 调用数据的问题,但结果怎么呈现,还得产品来定规矩。
2. 历史样本,先把区间和复权方式锁死
这次拉日线,我们指定了 AAPL.US、1d、adjust="none"、limit=20,区间是 2026-10-13 到 2026-10-19(UTC)。
返回了 5 条日线,收盘价依次是:10 月 13 日 341.27、14 日 342.96、15 日 342.00、16 日 343.46、19 日 342.94。这 5 个日期和交易日历完全对得上。
随文脚本校验了代码、周期、复权、时间范围和重复时间戳。这只能算第一轮跑通,如果要几年的分钟数据,还得拿那些具体需求去测。
提醒一句:TickDB 当前免费版不支持用 start_time 和 end_time 指定区间,最新一根 K 线可能还在形成中。做研究时,记得把查询时间和复权方式一起存下来。
一份需求卡,让产品和技术吵不起来
下面是一份可以直接改写的需求模板(以 AAPL 盘前看板为例):
| 需求项 | 示例填写 |
|---|---|
| 用途与使用者 | 团队内部盘前观察;暂不包含客户展示 |
| 标的与对象 | AAPL.US;盘前最新成交价,必须和主价格分开处理 |
| 时间与更新 | 显示纽约数据时间;更新方式和数据延迟由业务和技术共同定 |
| 缺失处理 | 盘前没数据要明确提示;保留旧价格时必须标出旧价时间 |
| 历史需求 | 如看历史,单列日期、粒度、复权方式,不能用快照代替 |
| 权益与维护 | 确认账号权限和内部用途条件;指定异常核对、补取与留存负责人 |
把这张卡发给候选供应商,按三种状态记录:
- 已满足:有文档、账号或样本证据。
- 待确认:资料不足,写明下一步补什么。
- 不满足:和当前用途冲突,如果是硬条件,直接踢出候选。
比如,这次确实拿到了盘前对象,但“持续更新稳不稳”还得另测。两项分开记,就不会被一张成功截图忽悠了。
下载包里提供了空白需求模板、示例和核对卡。非技术负责人可以先定用途、底线和预算,再把技术验证交给同事。
技术同事可以直接运行什么?
解压随文材料,在根目录运行:
python3 attachments/inspect_us_sample.py evidence --out my_check
它只用 Python 3.10+ 的标准库和系统时区,不联网、不读密钥(my_check 必须是个新目录)。
这次跑出来的结果是 PASS,生成了报价对象、日线和检查报告。但注意,PASS 只代表这次样本没毛病;持续更新、独立价格核对和实际用途权益,还得另外验。
如果重新取数,MCP 的参数都在材料里,自己配好权限复跑就行。
已经用着旧源,怎么安全替换?
换源前,把新旧两边的样本放在同一起跑线上:同证券、同区间、同时段、同复权方式。先确认可以比较,再看返回范围和数值差异。
随文提供了 migration_diff.py 脚本。因为我们没有旧源样本,所以报告是 NOT_COMPARED(没对比),差异值为空:
python3 attachments/migration_diff.py --right evidence/daily.normalized.json --out my_migration_report.json
如果没有旧源,退出码是 2;条件没对齐,返回 NOT_COMPARABLE。这只是提醒你补材料,不是供应商出故障了。对比成交量时,千万别忘了核对单位。
即使最后发现了差异,也先查数据对象、调整规则、聚合机制和更新版本。定位原因后,再决定重取、改处理逻辑,还是缩小迁移范围。
常见问题
免费美股数据源够用吗? 看用途。个人研究查日终,免费可能够;做实时看板,必须查清时效、请求量和展示条件。“库免费”、“有免费 Key”、“提供日终数据”,这是三件事。
历史数据越长,越适合回测吗? 先想清楚你要测什么。多年历史涉及退市样本、公司行动和数据版本,一段解释不清的长数据,只会把问题带进研究。先固定研究条件,再检查历史覆盖和处理规则。
AI 查行情必须用 MCP 吗? 不是。AI 也可以直接调 API。关键不在于通道,而在于 AI 有没有真去拿数据、拿到的是什么对象、回答里有没有带数据时间。
最后:把候选名单变成能落地的选择
选美股数据源,最有用的是那张写明用途、底线和证据的需求卡。
- 搞实时看板:先查价格对象和更新频率。
- 搞历史回测:先查区间和复权规则。
- 搞 AI 查询:先查工具结果能不能追溯。
下一次和技术同事开会,别只说“我们要个美股接口”。直接说:“我们先验收 AAPL 的盘前对象,再分别测更新频率、历史范围和免费权限。” 这样拿到的数据,才真正有得比。
TickDB样本采集于2026年10月20日,官方资料复核于10月21日。本文讨论数据源选择与样本核验,不构成投资建议。
参考资料与随文材料
- [yfinance 维护者仓库与 README]
- [Alpha Vantage FAQ及 [API文档]
- Massive:[股票数据页]、[聚合接口]、[缺少聚合线的解释]
- [FINRA:Extended-Hours Trading—Know the Risks]
- TickDB:行情快照、K线查询、交易日历、交易时段、AI工具入口、WebSocket行情