yfinance 使用指南:3 步获取 Yahoo Finance 股票行情数据
yfinance 是一个从 Yahoo! Finance 公开接口获取市场数据的开源 Python 库,当前版本 1.6.0(见 yfinance/version.py)。一行代码即可拿到股票的历史行情、财务报表和期权链,还支持批量下载、条件选股和实时行情推送,适合做股票数据分析、量化回测的 Python 新手和普通用户。
功能速览:yfinance 能帮你做什么
| 功能 | 解决什么问题 | 什么时候用 |
|---|---|---|
Ticker / Tickers | 获取单只或批量股票的行情、财报、期权数据 | 对个股做深度分析 |
download | 批量下载多只股票的历史行情 | 回测、数据入库 |
screen + EquityQuery | 按条件筛选股票 | 从全市场找候选标的 |
WebSocket / AsyncWebSocket | 实时行情数据流 | 盘中监控 |
repair=True 参数 | 自动修复非美市场的数据错误 | 拉取港股、欧洲股票等 |
这些组件都列在 README.md 的 "Main components" 一节,上表是其中最常用的五项。
快速上手:3 行代码拿到股票历史数据
安装只需一条命令(支持 Python 3.6+,见 pyproject.toml 的版本声明):
pip install yfinance
然后获取单只股票近一个月的历史行情:
import yfinance as yf
t = yf.Ticker("MSFT")
hist = t.history(period="1mo")
返回的 hist 是 pandas DataFrame,包含开盘/最高/最低/收盘价、成交量和复权收盘价。这组调用与官方快速上手示例一致(见 doc/source/index.rst)。
如果你需要跑测试或改源码,可以克隆仓库:
git clone https://gitcode.com/GitHub_Trending/yf/yfinance
功能深潜:从行情到选股
单只与多只股票的历史行情
- 单只股票:
yf.Ticker("MSFT")创建对象后,history(period=...)取行情,.info取基本信息,.quarterly_income_stmt取季度利润表,.option_chain(...)取期权链。 - 多只股票:
yf.download(["MSFT", "AAPL", "GOOG"], period="1mo")一次拉取多只,返回以「代码 + 字段」为多级列名的表格。
两者的分工:Ticker 适合「深挖一只股票」,download 适合「批量拉行情」,可以配合使用。
修复非美市场数据:repair=True
作者在文档中直接点出:美国市场的数据基本没问题,但其他市场存在多种错误——漏掉分红调整、漏掉拆股调整、整行缺失、价格差 100 倍(美元/美分混淆)等。给 download() 或 history() 传入 repair=True 后会自动尝试修复,返回的表格会多一列 Repaired? 标记被修复的行。
错误类型的完整清单和修复前后对照在 doc/source/advanced/price_repair.rst,例如 AET.L 的 100 倍价格错误(图来自同一文档):
用法一行:
df = yf.download("1398.HK", period="6mo", repair=True)
用 search 和 screen 找股票
yf.Search:按关键词搜索股票与新闻。EquityQuery:链式组合条件构造选股查询,yf.screen执行查询;库还内置了现成的查询模板PREDEFINED_SCREENER_QUERIES。
这些接口在 yfinance/init.py 中统一导出,选股模块源码在 yfinance/screener/。
选型建议:按场景选接口
| 你的场景 | 建议做法 | 依据 |
|---|---|---|
| 单只股票快速看历史行情 | Ticker.history(period=...) | 官方快速上手示例 |
| 多只股票批量拉行情 | yf.download([...]) | 官方快速上手示例 |
| 分析个股财报、期权 | Ticker 对象属性 | 官方快速上手示例 |
| 盘中实时推送 | WebSocket / AsyncWebSocket | README Main components |
| 拉港股、欧洲股票等非美数据 | 加 repair=True | price_repair.rst |
⚠️ 避坑清单:4 条注意事项
- 仅限个人使用。 README.md 明确说明 Yahoo! Finance API 供个人用途,yfinance 面向研究与教育,且与 Yahoo 无官方关联。数据若用于商业用途,请先查 Yahoo 的使用条款。
- 盘中数据有跨度限制。 修复时用小时级数据重建日线,而 1h 数据无法取 2 年以上的区间(price_repair.rst 有明确说明),拉长区间盘中数据时留意这一点。
- 实际币种以
history_metadata为准。 Yahoo 偶发美元/美分等单位混淆,修复后建议用Ticker.history_metadata['currency']确认币种,而不是Ticker.info(同上文档)。 - 网络不稳定时加自动重试。 设置
yf.config.network.retries = 2会以指数退避(1s、2s、4s...)自动重试,配置说明见 doc/source/advanced/config.rst。
下一步
更多进阶能力(代理、缓存、多级列名、本地化)见 doc/source/advanced/index.rst,完整 API 参考在 doc/source/reference/index.rst。
想读源码弄清实现,可以从 yfinance/multi.py(download 的实现)和 yfinance/scrapers/history.py(行情抓取逻辑)入手。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考




