
yfinance 版本演进全史从 0.0.1 到 1.6.0 的功能全景与源码级解读【免费下载链接】yfinanceDownload market data from Yahoo! Finances API项目地址: https://gitcode.com/GitHub_Trending/yf/yfinanceyfinance 是一个通过 Yahoo! Finance 公开 API 下载市场数据的 Python 库从 0.0.1 的 alpha 版本起步到当前仓库中的 1.6.0见 yfinance/version.py其能力早已超出下载股价的范畴。本文以仓库根目录的 CHANGELOG.rst共 1021 行覆盖 0.0.1 至 1.6.0 全部版本记录为骨架结合 price repair 专项文档 与核心模块源码为你还原这条演进主线数据获取 → 数据清洗 → 数据修复 → 市场全景查询并逐版本解读关键特性背后的实现。为什么值得读这份 Changelog一份 changelog 不只是改了什么的记录它还是一个开源项目技术决策与架构演进的编年史。通过它你可以回答三类问题当前能力边界最新版能做什么日历、搜索、Screener、WebSocket 实时行情、价格修复、登录态等依赖与兼容性为什么强制curl_cffi0.15、为什么升级到 Pandas 3.0、为什么引入可选依赖踩坑经验price repair的几十次迭代、cookie/crumb 认证策略的反复修补、时区缓存的多次重写都直接对应真实世界的 Yahoo 数据质量问题。项目模块全景截至 1.6.0从 yfinance 包结构 与 README 的 Main components 可以看出项目已经形成完整的模块矩阵模块源码位置核心职责Ticker/Tickersyfinance/ticker.py、yfinance/tickers.py单/多标的的历史、基本面、持有人、期权、新闻downloadyfinance/multi.py多标的高并发批量下载Marketyfinance/market.py市场状态与摘要Search/lookupyfinance/search.py、yfinance/lookup.py搜索与 Ticker 解析含 ISIN 识别Screeneryfinance/screener/screener.py结构化筛选查询Equity/ETF/FundQuerySector/Industryyfinance/domain/行业与板块信息WebSocketyfinance/live.py实时行情流基于 Yahoo protobuf见 pricing.protoCalendaryfinance/calendars.py财报、IPO、经济事件、拆股日历configyfinance/config.py全局配置代理、重试、localeAuthyfinance/data.py登录 Yahoo 以获取完整数据权限1.6.0最新版本特性解读CHANGELOG 中 1.6.0 是篇幅最大的一个版本可分为四组1.6.0 特性与修复资产负债表补全新增FixedMaturityInvestments、EquityInvestments等键PR #2879对应 fundamentals.py 中财务表构建逻辑Screener 字段修复补充dividendyield与dividendpershare.lasttwelvemonths#2888错误信息改进不再在 Yahoo 已解释缺数据原因时误报 possibly delisted#2903修正 30m 请求却显示内部 15m interval 的错误提示#2900多种崩溃修复只读Adj Close数组在股息调整修复中的崩溃#2897、Lookup 错误处理中self.ticker应为self.query的 AttributeError#2896、Yahoo API 返回 None 时_fetch_info的处理#2906、多日 interval 的 TypeError 以及 numpy2.5 的 Timedelta 警告#2915。1.6.0 的价格修复改进价格修复是 1.6.0 的重头戏修复了repairTrue不应把 GBp/ZAc/ILA 等报价永久转换为主要货币的问题#2907两次 price repair 的合并改进#2908、#2943。1.6.0 工程与文档打包方式全面迁移到 pyproject.toml#2920、#2849配合 ruff.toml 固定 lint 规则集保证 CI 确定性文档明确download()返回索引的时区契约#2936无需requests_cache也能重新启用test_no_expensive_calls_introduced测试#2911。1.5.x网络层与登录态的现代化1.5.x 系列主要围绕网络请求的健壮性1.5.2修复与curl_cffi0.16的兼容性问题——这是对 1.4.0 引入curl_cffi 可选、回退 requests策略的持续跟进1.5.1引入多项重要改动基本面单 URL 抓取超时时回退到分块请求#2811用 timeseries API 取代估值指标的 HTML 爬取#2851通过 subscriptions API 判定登录与订阅等级#2845在 cookie 策略切换时保留用户登录 cookie#2850规范化用户配置的代理字符串#2853价格修复方面修复单位切换被应用两次#2842、处理盘前恶意报价造成的错误股息误判#2843、NaN 成交量触发的错误#2859、Adj Close趋于无穷的股息修复问题#2860。这些改动说明yfinance 与 Yahoo 接口之间存在着持续的猫鼠游戏cookie/crumb 与请求特征需要不断适配。1.4.x登录能力与地区作用域新增Auth类用于登录#2761通过 yfinance/data.py 中的check_login()、subscription_tier()、user()等接口判断登录态与订阅等级登录后可请求更多数据权限Sector / Industry 支持 region 作用域#2803对应 domain/sector.py 与 domain/industry.pycurl_cffi变为可选#2802未安装时回退到requests对应 _http.py 中的会话创建逻辑yf.download()变为可重入移除共享模块级全局变量#2805配合互斥锁保证线程安全Ticker支持 lang / region 作用域#2804修复get_history_metadata()缺repair参数#2777、1mo区间判断忽略年份#2780、本地化盘中download()总是返回 UTC#2825等问题。1.0稳定化里程碑CHANGELOG 中写道yfinance been stable a long time now, time to grow up——1.0 没有破坏性变更但伴随弃用警告。核心新增全局配置类yf.config#2524即 yfinance/config.py 中的ConfigMgr单例默认提供network.proxy、network.retries、debug.hide_exceptions、debug.logging、locale.lang默认 en-US、locale.region默认 US等配置项日历功能#2615Earnings Calendar 等落地为 yfinance/calendars.py 中的get_earnings_calendar()、get_ipo_info_calendar()、get_economic_events_calendar()、get_splits_calendar()可选网络重试机制#2627针对瞬时网络错误修复 NSE/早开市市场 30m 区间对齐#2642、Screener 行业映射#2648、股息修复丢弃 NaN 行#2651等问题。专题price repair —— 项目最具特色的能力价格修复在 CHANGELOG 中反复出现0.2.0rc1、0.2.10、0.2.37、0.2.42、0.2.44、0.2.45、0.2.49、0.2.50、0.2.55、0.2.64、0.2.65、1.1.0、1.5.1、1.6.0 等均有记录其权威文档在 doc/source/advanced/price_repair.rst实现代码在 yfinance/scrapers/history.py测试在 tests/test_price_repair.py。使用方式与输出在history()或download()中传入repairTrue即会尝试修复 Yahoo 返回的多种价格错误。返回表中会新增一列Repaired?标记哪些行被修复过。注意货币混合问题修复后应以Ticker.history_metadata[currency]为准判断真实币种而不是Ticker.info。import yfinance as yf df yf.Ticker(8TRA.DE, sessionNone).history(period1mo, repairTrue) print(df[[Close, Adj Close, Repaired?]])从 multi.py 的 download 签名 可以看到repairFalse是默认值且repair参数同时存在于Tickers.history()、Ticker.history()history.py与download()三层 API 中。价格修复的几类场景缺失股息调整数据中存在股息但前一日Adj Close等于Close则手动对Adj Close施加股息调整此类修复不改Close因此Repaired?不会置 True。下图即文档中的示例8TRA.DE缺失拆股调整数据中有拆股记录但价格未调整则手动施加拆股因子要求日期范围覆盖拆股日之后至少 1 天用于校准MOB.ST 案例。缺失数据重建明显缺失或损坏的价格行用小周期如用 1h 修复 1d重建。算法会分组抓取以减少请求量并感知数据限制如 1h 无法取到 2 年以前。即使 Yahoo 日后修复了原始数据重建值与真实值也仅有微小差异。100x 错误Yahoo 偶尔把货币单位搞混$/cents、£/pence导致部分价格偏差 100 倍。随机散布的 100x 错误借助scipy检测成块出现的则是因为 Yahoo 在某天永久切换了币种AET.L 案例股息修复的六大检测项调整缺失或与股息偏差 100x7 天内重复股息去重股息相对除息日价格跌幅偏大/偏小 100x除息日记录错误价格跌幅滞后数日/数周资本利得被重复计算1.1.0 新增#2667常见于 DODFX 等基金标的调整在除息日前一天被施加了两次。文档 price_repair.rst 为每种场景给出了原始/修复后对照数据表如 1398.HK、ALC.SW、LTI.L、BVT.L、2020.OL、TETY.ST 等。修复逻辑的核心实现在 history.py 的_fix_bad_div_adjust()、_fix_bad_stock_splits()、_repair_capital_gains()、_fix_unit_switch()、_fix_zeroes()、_fix_unit_mixups()等方法中配套cluster_dividends()、denoise_volume()、map_signals_to_ranges()等辅助函数。误报风险与规避由于股息偏大/偏小依赖价格行为判断存在误报FP可能。FP 率随周期拉长而上升因此仅修复 1d 数据对周线等跨日区间请求修复时会先抓取 1d 修复后再重采样——这顺带解决了 Yahoo 对多日区间股息调整的缺陷test_resampling 测试 专门验证了 1wk/1mo/3mo 与 1d 修复重采样后行数与成交量的吻合度。对极小股息如 0.5%可拉取 6–12 个月、含至少 2 次股息的数据做交叉分析以剔除误报。0.2.x 系列功能爆发期0.2.x 是功能增长最快的阶段以下是按功能线梳理的演进Screener0.2.45 → 0.2.52 → 1.0 → 1.3.0 → 1.6.0从初版到EquityQuery/FundQuery/ETFQuery结构化查询yfinance/screener/query.py并持续修复预定义 screen 的 offset/size/countSearch 与 Lookup0.2.52 → 0.2.56 → 1.0Search支持 quotes/news/lists/research/nav 及模糊查询yfinance/search.pyTicker.lookups提供按类型股票/ETF/指数/货币/加密货币等检索yfinance/lookup.pyWebSocket 实时行情0.2.59 → 0.2.60 → 0.2.61live price data配套AsyncWebSocket与pricing.proto的 protobuf 解码yfinance/live.py财务数据重构0.2.42 → 0.2.45 → 0.2.50 → 0.2.52 → 0.2.55 → 1.0SEC 文件sec_filings、分析数据analysis、TTM 财务报表、估值指标表valuation_measures、get_shares_full()0.2.0rc4 引入get_income_stmt(legacyTrue)访问旧版财务表并将财务抓取提速 2 倍缓存与线程安全0.2.20 → 0.2.29 → 0.2.30从 sqlite3 迁移到 peewee 保证 100% 线程安全用 platformdirs 取代已死的 appdirs0.2.400.2.4 起用数据库锁修复多线程下载的锁冲突认证与反爬0.2.32 → 0.2.33 → 0.2.62 → 1.4.0cookie crumb 注入、CSRF cookie 备份策略、DNS 阻断 fc.yahoo.com 的处理、限流检测YfRateLimitError、curl_cffi 逐步取代 requests时区与索引0.2.20 → 0.2.56 → 0.2.64 → 1.4.1时区缓存多次重写提速、download()保持原有时区语义、multi_level_index参数0.2.47/48异常体系0.2.42 → 0.2.52专门化的异常类与raise_errorsTrue可选抛出见 yfinance/exceptions.py。0.1.x 与 0.0.x奠定数据能力的地基0.1.x 的关键里程碑ISIN 支持0.1.53 → 0.1.65get_isin()、get_all_by_isin()等工具且Ticker/Tickers/download可自动识别并转换 ISINyfinance/utils.py财务数据体系0.1.39 → 0.1.46 → 0.1.65 → 0.2.2financials/balance_sheet/cashflow、季度数据、分析师推荐、财报日历并保留financials作为income_stmt的映射持有人与内部交易0.1.51 → 0.2.34major_holders、institutional_holders、insider 交易/名册yfinance/scrapers/holders.py期权链0.1.41 → 0.2.28option_chain()返回含底层数据的期权链性能与修复用正则而非 HTML 解析加速 JSON0.1.51/52、fast_info加速版info0.2.5 → 0.2.7 → 0.2.10、30m 数据被 Yahoo 返回为 60m/15m 时的重采样修复0.1.26/30。0.0.x 时期则奠定了架构基调0.0.1 起依赖 Selenium/Chrome Driver0.0.5 改用requests彻底移除浏览器依赖0.0.8 引入进度条与失败重试0.0.9 引入多线程0.1.0 对接 v8 API 并完整重写、引入Ticker模块。关键依赖与兼容性时间线从 CHANGELOG 可以梳理出明确的依赖策略版本依赖决策0.1.68移除 Python 3.5 支持0.2.10允许 sqlite3 3.8.21.0封锁 curl_cffi 0.14#26531.2.1强制 curl_cffi0.15CVE #27431.4.0curl_cffi 可选回退 requests#28021.5.2修复与 curl_cffi0.16 的兼容1.1.0升级到 Pandas 3.0#2683此外pyproject.toml 定义了可选依赖如用于 100x 错误检测的 scipy、实时行情的 websockets 等pip install yfinance[optional]方式安装。演进趋势总结通读 CHANGELOG.rst 可以提炼出 yfinance 的三条演进主线从能下载到下载得对早期版本专注于抓取成功率cookie、重试、进度条后期重心转移到数据正确性——price repair 从 0.2.0rc1 诞生后历经二十余次迭代覆盖股息、拆股、单位、缺行、资本利得等 Yahoo 数据的系统性缺陷从单一入口到生态矩阵由Ticker单一对象扩展出Tickers、download、Search、Screener、Market、Sector/Industry、Calendar、WebSocket的完整数据生态从硬编码到可配置可登录1.0 引入yf.config全局配置、1.4.0 引入Auth登录能力让库在面对 Yahoo 接口变化时具备更强的适配弹性。对于使用者而言这份 changelog 最直接的实战价值在于当你需要更正确的历史数据时记得开启repairTrue当你需要批量下载时参考 multi.py 的并发与线程安全设计当 Yahoo 接口再次变化导致异常时exceptions.py 与 data.py 的 cookie 策略切换机制是排查的第一落点。所有特性均可结合仓库源码与 tests/ 下的测试用例逐一验证。【免费下载链接】yfinanceDownload market data from Yahoo! Finances API项目地址: https://gitcode.com/GitHub_Trending/yf/yfinance创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考