yfinance 完全教程:3 行代码抓行情数据,还能自动修复价格错误 📅 发布时间:2026/9/5 18:37:55 👁 浏览次数: yfinance 完全教程3 行代码抓行情数据还能自动修复价格错误【免费下载链接】yfinanceDownload market data from Yahoo! Finances 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(period1mo) print(hist.head())hist是一个带时间索引的 DataFrame包含 Open / High / Low / Close / Volume 等列直接可以画图或算指标。想先看公司层面的信息用msft.info拿一个字典里面有longName公司名、currentPrice现价、marketCap市值等字段。任务拆解三个高频场景的最小写法任务一拉历史行情并算一条均线任务要一只票过去一年的日线并算出 20 日均线。做法Ticker.history()传period和interval然后直接在 DataFrame 上滚动计算hist msft.history(period1y, interval1d) hist[MA20] hist[Close].rolling(window20).mean() print(hist[[Close, MA20]].tail())结果hist每行一个交易日MA20前 19 行为空窗口不足之后逐行输出均线值。任务二一次下载多只股票按票分列任务同时下载 SPY 和 AAPL 做对比不想循环写两次请求。做法用模块级的yf.download()group_byticker让返回结果以票号为一级列名data yf.download([SPY, AAPL], period6mo, group_byticker, progressFalse) print(data[AAPL][Close].tail())结果多级列的 DataFramedata[AAPL]、data[SPY]各自是独立的 OHLCV 表方便做相对强弱之类对比。批量下载默认多线程几十只票也不用等太久。任务三记不全代码先搜票再取数任务只知道公司名或中文/模糊关键词要拿到准确 ticker。做法用yf.Search()先查报价列表quotes yf.Search(apple, max_results10).quotes for q in quotes: print(q[symbol], q.get(shortname))结果打印出候选票符如AAPL和名称确认后再交给yf.Ticker(...)取数避免拿错代码。核心机制深挖repairTrue 是怎么修数据的yfinance 最有差异化的能力是价格修复history()和download()都接受repairTrue参数让库自动检测并修复雅虎返回的价格错误。开启后结果会多一列Repaired?标记哪些行被修过hist yf.Ticker(0316.HK).history(period1y, repairTrue) print(hist[hist[Repaired?] True])它具体处理四类问题分红调整缺失数据里有分红记录但前一日Adj Close和Close相等没调手动按分红比例补调整拆分调整缺失发生拆股但历史价格没跟着缩库会主动应用拆分比例需要日期范围包含拆股日后一天用于校准缺行/缺成交量某天价格数据明显缺失或损坏时用更细粒度如 1 小时的数据重新拼装出缺失的日线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 整体偏大开repairTrue修完核对history_metadata[currency]请求超时网络不稳时批量下载中断yf.download(..., timeout30)批量任务建议传progressFalse降噪走代理默认直连被限流yf.config.network.proxy http://127.0.0.1:7890缓存位置想改时区缓存默认写在系统临时目录yf.set_tz_cache_location(./my_cache)指到项目目录内周线/月线分红调整怪雅虎对多日区间的分红调整算法有缺陷用repairTrue拉多日区间库会先取 1d 数据修复再重采样顺带修正此问题下一步到这里从安装、取数、批量下载到脏数据修复你已经覆盖了 yfinance 日常使用的主干路径。接下来可以往三个方向走用msft.quarterly_income_stmt、msft.balance_sheet把基本面数据拉进同一个工作流用yf.screen()加EquityQuery做条件选股或者研究tests/test_price_repair.py的断言方式学会为修复逻辑写回归测试。完整文档源文件doc/source/核心源码yfinance/修复功能回归用例tests/data/【免费下载链接】yfinanceDownload market data from Yahoo! Finances API项目地址: https://gitcode.com/GitHub_Trending/yf/yfinance创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考