yfinance 完整指南:5 分钟获取股票数据,开始你的量化分析
【免费下载链接】yfinanceDownload market data from Yahoo! Finance's API项目地址: https://gitcode.com/GitHub_Trending/yf/yfinance
yfinance 是一个免费的 Python 库,从 Yahoo! Finance 公开 API 抓取股票数据,覆盖历史行情、基本面信息、批量多标的下载和实时行情流。如果你需要用几行代码完成股票数据采集,它适合投资爱好者、数据分析师和量化初学者。
yfinance 项目定位与能力边界
yfinance 封装了雅虎财经的公开接口,将返回结果整理成 pandas 可直接使用的 DataFrame 或字典,省去了自己拼接请求参数、解析 JSON 的环节。它本身不存储数据,每次调用都实时请求 Yahoo 的服务器。
核心能力一览:
| 入口 | 用途 |
|---|---|
yf.download() | 批量下载多只股票的历史行情 |
yf.Ticker() | 获取单只股票的行情、基本面、财报 |
yf.Search()/yf.Lookup() | 按关键词查找股票代码和新闻 |
yf.screen() | 按条件筛选股票(EquityQuery) |
yf.WebSocket | 订阅实时行情推送 |
需要说明的是:yfinance 定位是个人研究与学习工具,不提供 SLA、不保证接口长期稳定,不适合直接用于生产级交易系统的实时数据源。
最小可运行示例:跑通第一条股票行情
安装依赖后,用yf.download拉取一只股票最近 5 个交易日的数据:
pip install yfinanceimport yfinance as yf # 下载 AAPL 最近 5 个交易日的日线 df = yf.download("AAPL", period="5d") print(df.tail())运行后会输出一个表格,包含 Open、High、Low、Close、Adj Close、Volume 六列,时间索引为交易日,这就是后续做收益率计算、回测的基础数据。
场景拆解:三个常用用法
拉取单只股票的完整历史行情
做个股分析时,通常要指定时间区间和 K 线粒度,用Ticker.history更直接:
import yfinance as yf tsla = yf.Ticker("TSLA") # 2024 年以来、每周收盘的日线数据 hist = tsla.history(start="2024-01-01", interval="1wk") print(hist[["Close", "Volume"]].tail(10))注意interval支持1d(日线)、1wk(周线)、1h(小时线)等取值,小时级数据只支持最近 730 天内的区间,请求过长范围会返回空结果。
批量下载多只股票数据
对比一组股票时,把多个代码放进列表,download会一次性返回分层列的 DataFrame:
import yfinance as yf # 同时拉取 4 只科技股 2024 年数据,按股票分组列 data = yf.download( ["MSFT", "GOOGL", "AMZN", "AAPL"], start="2024-01-01", end="2024-12-31", group_by="ticker" ) print(data["MSFT"]["Close"].head())设置group_by="ticker"后,列结构是"股票代码 → 字段",取数时用data["MSFT"]["Close"]即可;非美股代码要带交易所后缀,如1810.HK(港交所)、7203.T(东京)。
配置缓存位置与网络重试
yfinance 会把时区、cookie 等数据缓存在用户目录下,减少重复请求;网络不稳定时建议开启自动重试:
import yfinance as yf # 把缓存目录指向自定义路径 yf.set_tz_cache_location("my_stock_cache") # 网络瞬断时按 1s、2s、4s 间隔自动重试 yf.config.network.retries = 2 # 走代理访问 yf.config.network.proxy = "http://proxy-server:8080"提示:配置项在 doc/source/advanced/config.rst 中有完整列表,缓存机制说明见 doc/source/advanced/caching.rst。
高频问题与排错 ⚠️
请求失败或返回空数据
- 现象:
download返回空 DataFrame 或抛网络异常。 - 原因:Yahoo 接口偶发限频、超时,或代码/日期区间非法。
- 解决:设置
yf.config.network.retries开启指数退避重试;确认 ticker 带正确交易所后缀;用yf.config.debug.hide_exceptions = False查看真实报错。
- 现象:
价格出现异常跳变或缺行
- 现象:收盘价突然翻倍,或某日整行缺失。
- 原因:分红、拆股等事件导致的复权数据错误,或数据源本身漏报。
- 解决:先用
Ticker.calendar核对分红和拆股日期,再对照复权前后的价格变化;修复相关功能说明见 doc/source/advanced/price_repair.rst,测试用例在 tests/test_price_repair.py。
公司名等信息显示为英文
- 现象:期望显示本地化名称,实际返回英文。
- 原因:Yahoo 按请求 locale 返回本地化字段,默认是
en-US。 - 解决:会话开始时设置
yf.config.locale.lang和region,且只有原生上市于该地区的股票才会返回翻译值。
实时行情有延迟
- 现象:
Ticker拿到的价格与交易所实时价格不符。 - 原因:Yahoo 数据存在分钟级延迟,且部分市场不提供逐笔推送。
- 解决:对延迟敏感的场景改用
yf.WebSocket订阅,并自行核对延迟范围。
- 现象:
进阶方向与生态链接
行情抓取跑通后,可以进一步尝试三件事:用yf.screen()配合EquityQuery按市值、市盈率批量筛选股票;用WebSocket/AsyncWebSocket搭建实时行情订阅管道;把数据落地到本地数据库再结合 pandas 做回测。行情抓取逻辑在 yfinance/scrapers/history.py,API 参考文档入口在 doc/source/reference/index.rst。
项目采用 main / dev / 功能分支的协作模式,跟进版本更新时可以参考其分支策略:
先把最小示例跑通,再把 ticker 换成你自己关注的代码、调整时间区间,验证数据完整后再展开批量下载,是最省事的起步路径。
【免费下载链接】yfinanceDownload market data from Yahoo! Finance's API项目地址: https://gitcode.com/GitHub_Trending/yf/yfinance
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考