yfinance 股票数据获取快速上手:3 行代码拿到第一份 K 线
2026/9/16 11:24:05 网站建设 项目流程

yfinance 股票数据获取快速上手:3 行代码拿到第一份 K 线

【免费下载链接】yfinanceDownload market data from Yahoo! Finance's API项目地址: https://gitcode.com/GitHub_Trending/yf/yfinance

yfinance 是一个免费的 Python 库,从 Yahoo! Finance 公开接口抓取股票数据,几行代码拿到历史行情、基本面和批量报价。它适合投资爱好者、数据分析师和量化初学者。边界先说清:它不存储任何数据,每次调用都实时请求 Yahoo,只做个人研究工具,别拿去当生产交易系统的数据源。

先跑起来:2 分钟拿到 AAPL 最近 5 天行情

这一节的目标是用最少的代码跑出一份能用的数据。

pip install yfinance
import yfinance as yf # 下载 AAPL 最近 5 个交易日的日线 df = yf.download("AAPL", period="5d") print(df.tail())

输出是一个 pandas 表格,含 Open、High、Low、Close、Adj Close、Volume 六列,索引是交易日。这就是后续算收益率、做回测的原料。

能力地图:一张表看懂 yfinance 能做什么

这张表把 yfinance 的核心入口列全,你知道每个功能解决什么问题,就不用翻文档找 API。

入口功能解决什么问题
yf.download()批量下载历史行情一次拿多只股票数据,横向对比
yf.Ticker()单只股票详情行情、基本面、财报、分红拆股事件
yf.Search()/yf.Lookup()代码与新闻查找不知道准确代码时按关键词搜
yf.screen()+EquityQuery条件筛选股票按市值、市盈率等批量筛股池
yf.WebSocket实时行情订阅推送式获取报价,不用轮询
yf.config网络与本地化配置代理、重试、缓存位置、locale

直说局限:yfinance 不是数据库,本地不留任何数据,用了就得再请求;没有 SLA,Yahoo 接口不保证长期稳定,还会偶发限频。拿它学习和做研究没问题,直接上生产要自己兜底。

跟着任务学:3 个最常用的场景

拉一整年的 TSLA 周线

做个股中期趋势时,日线太密,周线更看得清方向。

tsla = yf.Ticker("TSLA") # 2024 年以来、每周收盘的周线数据 hist = tsla.history(start="2024-01-01", interval="1wk") print(hist[["Close", "Volume"]].tail(10))

返回的每一行是一周,Close 取该周最后一个交易日。坑点:1h小时级数据只支持最近 730 天,区间拉太长会返回空。

批量下载 4 只股票一次对比

对比一组股票时,把代码写成列表就能一次拉完,不用循环。

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 更抗造。

脚本开头写yf.config.network.retries = 2,瞬断时按指数退避自动重试;再用yf.set_tz_cache_location("my_cache")把时区、cookie 缓存指到自定义目录,减少重复请求。全部配置项见 配置说明。坑点:缓存只存时区和 cookie 这类元数据,不存行情,别指望离线也能出数。

遇到问题先查这里 ⚠️

现象可能原因怎么处理
download返回空 DataFrameYahoo 限频、超时,或代码/区间非法yf.config.network.retries,检查代码是否带交易所后缀
报错被吞掉看不到异常debug.hide_exceptions默认 True设为 False 再看真实报错
收盘价突然翻倍、整行缺失分红/拆股复权错误,或数据源漏报先用Ticker.calendar核对分红拆股日期,再对照复权前后价格
公司名等字段显示英文默认 locale 是 en-US会话开始设yf.config.locale.langregion,且只有该地区原生上市的股票才返回翻译值
实时价比交易所慢Yahoo 数据有分钟级延迟对延迟敏感改用yf.WebSocket订阅,并自行核对延迟范围

跑通之后

接下来值得试三件事:

  1. yf.screen()EquityQuery,按市值、市盈率批量筛股票池;
  2. WebSocket/AsyncWebSocket搭一条实时行情推送管道;
  3. 把行情落到本地数据库,再结合 pandas 做回测。

行情抓取的核心逻辑在 yfinance/scrapers/history.py,缓存机制的完整说明在 doc/source/advanced/caching.rst,想深入时看这两处就够。

现在就打开终端跑一遍上面那 5 行代码,确认输出有六列数据,然后把 "AAPL" 换成你真正关注的代码——跑通这一步,后面全是顺路的事。

【免费下载链接】yfinanceDownload market data from Yahoo! Finance's API项目地址: https://gitcode.com/GitHub_Trending/yf/yfinance

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

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

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

立即咨询