如何批量下载雅虎财经的行情数据?yfinance 使用指南
晚上九点,你想复盘 MSFT 最近一个月的日线走势。在 Yahoo Finance 网页上只能一页页翻看,而用 yfinance 几行 Python 就能把数据拉进 pandas 的 DataFrame,直接画图、回测、统计。这是一款开源的免费 Python 库,它对接 Yahoo! Finance 的公开 API,帮你批量获取股票、ETF、基金的行情与财务数据。
⚡ 安装步骤
前置条件:本机装好 Python 3(官方标注支持 3.6+)。安装只需一条命令:
pip install yfinance
装完导入即可用,无需注册账号,也不用配置密钥。最短跑通路径:
import yfinance as yf
df = yf.Ticker("MSFT").history(period="1mo")
df 就是 Open、High、Low、Close、Volume 的日线表,可直接喂给 pandas 或 matplotlib。
功能拆解:常用模块怎么用
- 单只股票 Ticker:
yf.Ticker("MSFT")之后,.info拿公司概况,.history(period='1mo')拿行情,.quarterly_income_stmt拿季度利润表,.option_chain(...)拿期权链。 - 多只股票 download:
yf.download(['MSFT','AAPL','GOOG'], period='1mo')一次拉多只。返回的是多级列名 DataFrame,第一层是代码,第二层是 OHLC 字段,multi_level_columns 页面讲怎么把这种结构读回和存 CSV。 - 实时行情 WebSocket:
WebSocket/AsyncWebSocket支持同步与异步流式推送,示例见 live_sync.py。 - 搜索与筛选:
Search查报价和新闻;Sector/Industry看板块;Screener加EquityQuery按条件筛标的,示例见 sector_industry_ticker.py。 - 基金数据:
yf.Ticker('SPY').funds_data可拿.description和.top_holdings(前十大持仓)。
适合谁用
- 如果你在写策略回测,需要多只标的、多区间的日线或分钟线,
download帮你跳过手工翻页。 - 如果你在跟踪基金或 ETF,
funds_data能拿到持仓和净值,比在网页上翻基金页面省事。 - 如果你在做多市场对比,
Screener与Sector让你按板块、行业批量取数,再叠加Ticker.info拿基本面字段。
进阶:价格修复与实用配置
Yahoo 的公开数据在美国市场之外偶尔出现分红调整缺失、拆股未还原、数据行丢失、货币被当成"分"处理导致 100 倍偏差等情况。history() 与 download() 提供 repair=True 参数尝试自动修复这几类错误,返回表多一列 Repaired? 标记哪些行被改过。
其他实用配置:
- 代理与重试:
yf.config.network.proxy = "PROXY_SERVER"、yf.config.network.retries = 2(指数退避 1s/2s/4s)。 - 调试日志:
yf.config.debug.logging = True打开详细日志。 - 本地化字段:
yf.config.locale.lang/region切换后,Ticker.info的公司名等本地化字段会跟随(仅对该 locale 原生上市标的生效)。 - 缓存位置:默认在本地缓存时区与 cookies,可用
yf.set_tz_cache_location(...)改路径。
| 平台 | 默认缓存路径 |
|---|---|
| Windows | C:/Users/<USER>/AppData/Local/py-yfinance |
| Linux | /home/<USER>/.cache/py-yfinance |
| MacOS | /Users/<USER>/Library/Caches/py-yfinance |
数据流向与参与方式
yfinance 运行时需要联网向 Yahoo! Finance 的公开 API 发请求,数据拉下来后存在你自己的机器内存里,怎么存(DataFrame、CSV、数据库)由你决定。本地只额外缓存时区和 cookies,不上传你的任何数据。注意:yfinance 是社区开源项目,未获 Yahoo 官方背书,商标归 Yahoo 所有;数据本身的使用请遵守 Yahoo 的服务条款,官方定位是个人研究与教育用途。
yfinance 把"从 Yahoo Finance 批量拿行情"压缩成了几行代码,免费开源,采用 Apache 2.0 许可。想参与:clone 仓库到本地,看 CONTRIBUTING.md 了解提 Issue 与 PR 的方式,或直接阅读 文档源码 熟悉 API。
git clone https://gitcode.com/GitHub_Trending/yf/yfinance
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考




