yfinance 完整指南:5 分钟获取股票数据,开始你的量化分析
2026/9/5 22:36:05 网站建设 项目流程

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 yfinance
import 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。

高频问题与排错 ⚠️

  1. 请求失败或返回空数据

    • 现象:download返回空 DataFrame 或抛网络异常。
    • 原因:Yahoo 接口偶发限频、超时,或代码/日期区间非法。
    • 解决:设置yf.config.network.retries开启指数退避重试;确认 ticker 带正确交易所后缀;用yf.config.debug.hide_exceptions = False查看真实报错。
  2. 价格出现异常跳变或缺行

    • 现象:收盘价突然翻倍,或某日整行缺失。
    • 原因:分红、拆股等事件导致的复权数据错误,或数据源本身漏报。
    • 解决:先用Ticker.calendar核对分红和拆股日期,再对照复权前后的价格变化;修复相关功能说明见 doc/source/advanced/price_repair.rst,测试用例在 tests/test_price_repair.py。
  3. 公司名等信息显示为英文

    • 现象:期望显示本地化名称,实际返回英文。
    • 原因:Yahoo 按请求 locale 返回本地化字段,默认是en-US
    • 解决:会话开始时设置yf.config.locale.langregion,且只有原生上市于该地区的股票才会返回翻译值。
  4. 实时行情有延迟

    • 现象: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),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询