yfinance快速上手:如何从Yahoo Finance批量下载股票、加密与基金数据
2026/9/15 3:22:28 网站建设 项目流程

yfinance快速上手:如何从Yahoo Finance批量下载股票、加密与基金数据

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

写量化策略时最耗时的往往不是模型,而是把干净的市场数据拿到手。yfinance 是一个非官方的 Yahoo Finance API 客户端:一行pip install装好,几行 Python 就能拉取股票、ETF、指数和加密货币的日线/分钟线、财报、期权链与实时行情。读完这篇,你能完成安装、跑通第一次数据下载,并避开多股下载、外盘数据不准等几个高频坑。

一、认识yfinance:它解决什么问题

Yahoo Finance 的网页数据没有官方开放 API,yfinance 做的事情就是替你调用它的内部接口,把返回结果整理成 pandas DataFrame——你可以直接当表格算指标、画图、入库。它不承诺稳定性(Yahoo 改接口它就可能跟着变),所以定位是"个人研究和教育用途",商用前请确认数据使用条款。

当前版本 1.6.0,支持 Python 3.8–3.13,核心入口如下:

入口用途
yf.Ticker("AAPL")单只标的:历史价、财报、期权、实时价
yf.download(["AAPL","MSFT"])批量下载多只标的的价格数据
yf.Search("nvidia")搜索代码、新闻、研报
yf.screen(...)按条件筛选股票(如市值、行业)
yf.WebSocket/AsyncWebSocket实时行情推送

二、yfinance安装与配置步骤:从安装到第一次运行

这一节解决"装好之后能不能跑起来"的问题。

  1. 确认 Python 版本。项目要求 3.8 及以上:
python --version
  1. 安装依赖。日常使用只需这一条:
pip install yfinance

后续想用repair=True修复价格错误时,再补装:

pip install "yfinance[repair]"
  1. 跑最小示例,验证网络和库都没问题:
import yfinance as yf t = yf.Ticker("AAPL") df = t.history(period="5d") print(df[["Close", "Volume"]].tail())

能打印出最近 5 个交易日的收盘价和成交量,就说明环境通了。再快速看一眼基本面:

print(t.info["marketCap"], t.fast_info["lastPrice"])
  1. 两个建议提前做的全局配置:开启失败重试(用指数退避 1s、2s、4s 自动重发请求),以及把时区缓存目录指到你的项目下,避免重复请求:
yf.config.network.retries = 2 yf.set_tz_cache_location("./cache")

三、真实场景实战

场景1:拉单只股票历史价并算移动平均

目标:拿到足够长的日线,算 20/50 日均线,判断趋势。注意period可写"1mo""6mo""max",也可用start/end精确卡日期。

import yfinance as yf df = yf.Ticker("BTC-USD").history(period="1y") # 加密货币加 -USD 后缀 df["MA20"] = df["Close"].rolling(20).mean() df["MA50"] = df["Close"].rolling(50).mean() print(df[["Close", "MA20", "MA50"]].tail(3))

你会得到一个带时间索引的表格,Close之后直接接 pandas 的rollingewm就能扩展出 RSI、MACD 等任意指标。

场景2:一次下载多只股票,正确处理列结构

目标:对比一组股票的收盘价走势。新手最容易在这里翻车:download对多只标的返回的是"价格在前、代码在后"的两级列(MultiIndex),直接df["AAPL"]会报 KeyError。两种解法:

import yfinance as yf # 写法一:按代码分组,变成"代码在前",取用更直观 df = yf.download(["AAPL", "MSFT", "NVDA"], period="1mo", group_by="ticker") print(df["MSFT"]["Close"].tail(3)) # 写法二:只要某一类价格,指定 level 直接抽 df2 = yf.download(["AAPL", "MSFT", "NVDA"], period="1mo") print(df2["Close"].tail(3))

批量任务建议同时传progress=False关掉进度条,避免日志刷屏。

场景3:不确定代码时先搜索,再按条件筛选

目标:用户说"我想看英伟达",你未必确定要NVDA还是某个 ADR。先用Search确认,再用screen按条件圈定范围:

import yfinance as yf print(yf.Search("nvidia", max_results=5).quotes) # 返回代码/名称列表

yf.screen()支持EquityQueryETFQuery等条件构造,比如筛出某行业市值前 20 的股票,拿到代码列表后直接丢给yf.download即可。

四、常见坑与解法

1. 现象history()返回空表,或抛YFPricesMissingError原因:代码写错(如美股代码忘了交易所后缀)、标的已退市,或 Yahoo 临时限流。解法:先用yf.Search核对代码;开启yf.config.network.retries = 2;仍失败就打开调试看真实报错:yf.config.debug.hide_exceptions = False

2. 现象:多股下载后df["AAPL"]抛 KeyError。原因:默认列结构是(Close, AAPL)而非(AAPL, Close)解法:加group_by="ticker",或df["Close"]取出某类价格后按列筛选。

3. 现象:非美股(港股、德股等)的Adj Close明显不对,或汇率币种显示错误。原因:Yahoo 对外盘的除权除息、拆股调整经常漏。解法:加repair=True,返回表会多一列Repaired?标记被修正的行;核对币种用t.history_metadata["currency"],而不是t.info

4. 现象t.info里某些字段是 None。原因:Yahoo 的 info 字段随接口版本波动,部分小盘股本身就没有数据。解法:价格类字段优先用更稳定的t.fast_infoinfo缺失属正常,不要拿它做断言。

五、进阶与选型

yfinance 与 pandas-datareader 怎么选:两者都能拉历史行情,差异在于覆盖面和容错。

维度yfinancepandas-datareader
数据源Yahoo Finance 内部接口多源(含 Yahoo、Stooq 等)
基本面/期权/实时完整(财报、期权链、WebSocket)基本只有行情
数据修复内置repair=True
批量下载单次多代码,多线程逐个循环为主
接口稳定性依赖 Yahoo 私有接口,偶发变动依赖各数据源稳定性
上手成本

经验:个人研究、需要基本面和期权的场景直接用 yfinance;只拉交易所日线且担心 Yahoo 变动,可以两者互为备份。

工程化建议:

  • 大批量拉取时按 10–20 只一批、批间time.sleep(1~2)控速,比一次塞几百个代码更不容易被限流;
  • yf.set_tz_cache_location固定缓存目录(Linux 默认在~/.cache/py-yfinance),重复运行时省掉时区等元数据的重复请求;
  • 需要鉴权或稳定访问时,参考仓库内 doc/source/reference/examples/auth.py 与 doc/source/reference/examples/proxy.py,通过yf.Authyf.config.network.proxy配置,比在业务代码里手写重试可靠。

六、下一步

  • 想看完整 API 清单(财报、日历、行业板块等),从 doc/source/reference/index.rst 入手;
  • 实时行情推送的同步/异步写法,见 doc/source/reference/examples/live_sync.py 与 doc/source/reference/examples/live_async.py;
  • 准备参与贡献的话,先读 doc/source/development/index.rst,分支协作流程如图所示。

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

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

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

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

立即咨询