news 2026/9/5 18:37:41

yfinance 完全教程:3 行代码抓行情数据,还能自动修复价格错误

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
yfinance 完全教程:3 行代码抓行情数据,还能自动修复价格错误

yfinance 完全教程:3 行代码抓行情数据,还能自动修复价格错误

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

抓股票数据时,你有没有遇到过这种糟心事:拉出来的历史价格中间"断档"一天、某段时间价格突然翻了一百倍、或者分红日之后调整价(Adj Close)压根没变?这些不是你的 bug,是数据源的问题。yfinance 不仅能从 Yahoo! Finance 免费拉取行情和基本面数据,还内置了一套价格修复机制,能把这些脏数据自动修干净。

一句话定位:yfinance 是什么

yfinance 是一个 Python 库,封装了 Yahoo! Finance 的公开 API,让你用几行代码拿到 K 线、成交量、分红拆分、财务报表、分析师目标价等数据,结果直接是 pandas DataFrame,接进任何分析流程都不用转换。它值得用的原因有两个:零 API Key、零费用,且对雅虎返回的脏数据做了兜底修复,拿到的数更可信。

最小上手路径:安装后 3 分钟看到输出

一条命令装好(依赖 pandas、numpy 会自动带上):

pip install yfinance

跑通第一个例子,拿到微软最近 1 个月的日线数据:

import yfinance as yf msft = yf.Ticker("MSFT") hist = msft.history(period="1mo") print(hist.head())

hist是一个带时间索引的 DataFrame,包含 Open / High / Low / Close / Volume 等列,直接可以画图或算指标。想先看公司层面的信息,用msft.info拿一个字典,里面有longName(公司名)、currentPrice(现价)、marketCap(市值)等字段。

任务拆解:三个高频场景的最小写法

任务一:拉历史行情并算一条均线

任务:要一只票过去一年的日线,并算出 20 日均线。做法Ticker.history()periodinterval,然后直接在 DataFrame 上滚动计算:

hist = msft.history(period="1y", interval="1d") hist["MA20"] = hist["Close"].rolling(window=20).mean() print(hist[["Close", "MA20"]].tail())

结果hist每行一个交易日,MA20前 19 行为空(窗口不足),之后逐行输出均线值。

任务二:一次下载多只股票,按票分列

任务:同时下载 SPY 和 AAPL 做对比,不想循环写两次请求。做法:用模块级的yf.download()group_by="ticker"让返回结果以票号为一级列名:

data = yf.download(["SPY", "AAPL"], period="6mo", group_by="ticker", progress=False) print(data["AAPL"]["Close"].tail())

结果:多级列的 DataFrame,data["AAPL"]data["SPY"]各自是独立的 OHLCV 表,方便做相对强弱之类对比。批量下载默认多线程,几十只票也不用等太久。

任务三:记不全代码?先搜票再取数

任务:只知道公司名或中文/模糊关键词,要拿到准确 ticker。做法:用yf.Search()先查报价列表:

quotes = yf.Search("apple", max_results=10).quotes for q in quotes: print(q["symbol"], q.get("shortname"))

结果:打印出候选票符(如AAPL)和名称,确认后再交给yf.Ticker(...)取数,避免拿错代码。

核心机制深挖:repair=True 是怎么修数据的

yfinance 最有差异化的能力是价格修复:history()download()都接受repair=True参数,让库自动检测并修复雅虎返回的价格错误。开启后结果会多一列Repaired?,标记哪些行被修过:

hist = yf.Ticker("0316.HK").history(period="1y", repair=True) print(hist[hist["Repaired?"] == True])

它具体处理四类问题:

  1. 分红调整缺失:数据里有分红记录,但前一日Adj CloseClose相等(没调),手动按分红比例补调整;
  2. 拆分调整缺失:发生拆股但历史价格没跟着缩,库会主动应用拆分比例(需要日期范围包含拆股日后一天用于校准);
  3. 缺行/缺成交量:某天价格数据明显缺失或损坏时,用更细粒度(如 1 小时)的数据重新拼装出缺失的日线;
  4. 100 倍货币错位:雅虎偶尔把美元/美分、英镑/便士搞混,导致一段价格恰好差 100 倍,散点式的偏差用 scipy 检测,整段错位的则整体换算。

为什么这个设计好用:修复全部发生在本地,不依赖雅虎改数据;被标记的行可审计,不用信任也没成本;货币错位修完后真实币种要看Ticker.history_metadata['currency'],而不是info里的字段。完整规则和修复案例(含修正前后对照数据)见文档 doc/source/advanced/price_repair.rst,修复逻辑主体在 yfinance/utils.py,想验证行为可以看 tests/data/ 里几十组"坏数据 vs 修复后"的真实对照 CSV。

避坑与配置要点

场景现象处理方式
返回空表代码写错、市场休市或代码不存在先用yf.Search()核对 ticker;确认start/end有交易日
日内数据只覆盖最近 60 天1m~1h数据发现历史部分为空雅虎的限制,非 yfinance 的 bug;更长的历史只能用1d及以上
价格突然放大 100 倍某段时间 OHLC 整体偏大repair=True;修完核对history_metadata['currency']
请求超时网络不稳时批量下载中断yf.download(..., timeout=30);批量任务建议传progress=False降噪
走代理默认直连被限流yf.config.network.proxy = "http://127.0.0.1:7890"
缓存位置想改时区缓存默认写在系统临时目录yf.set_tz_cache_location("./my_cache")指到项目目录内
周线/月线分红调整怪雅虎对多日区间的分红调整算法有缺陷repair=True拉多日区间:库会先取 1d 数据修复再重采样,顺带修正此问题

下一步

到这里,从安装、取数、批量下载到脏数据修复,你已经覆盖了 yfinance 日常使用的主干路径。接下来可以往三个方向走:用msft.quarterly_income_stmtmsft.balance_sheet把基本面数据拉进同一个工作流;用yf.screen()EquityQuery做条件选股;或者研究tests/test_price_repair.py的断言方式,学会为修复逻辑写回归测试。

  • 完整文档源文件:doc/source/
  • 核心源码:yfinance/
  • 修复功能回归用例:tests/data/

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

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

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/5 18:36:54

如何 5 分钟装好霞鹜文楷:安装、字重选择与 VS Code 配置实践

如何 5 分钟装好霞鹜文楷:安装、字重选择与 VS Code 配置实践 【免费下载链接】LxgwWenKai An open-source Chinese font derived from Fontworks Klee One. 一款开源中文字体,基于 FONTWORKS 出品字体 Klee One 衍生。 项目地址: https://gitcode.co…

作者头像 李华
网站建设 2026/9/5 18:34:37

构建大分辨率水下海鲜检测数据集:YOLOv5格式实践与调优指南

简介:本资源是面向计算机视觉初学者与目标检测实践者的高质量水下生物目标检测数据集,专为YOLOv5模型训练与验证设计,解决水下低对比度、高散射场景中海鲜动植物识别难的问题,适用于科研实验、课程设计及竞赛基线模型构建。压缩包…

作者头像 李华
网站建设 2026/9/5 18:32:16

Apktool 如何把 APK 拆成可编辑文件

Apktool 如何把 APK 拆成可编辑文件 【免费下载链接】Apktool A tool for reverse engineering Android apk files 项目地址: https://gitcode.com/GitHub_Trending/ap/Apktool Apktool 是一个安卓 APK 逆向工具,一行命令把安装包拆成资源文件和 Smali 代码&…

作者头像 李华