yfinance 金融数据采集指南:从拉行情到基本面筛选的完整教程

发布时间:2026/9/5 18:47:23
yfinance 金融数据采集指南:从拉行情到基本面筛选的完整教程 yfinance 金融数据采集指南从拉行情到基本面筛选的完整教程【免费下载链接】yfinanceDownload market data from Yahoo! Finances API项目地址: https://gitcode.com/GitHub_Trending/yf/yfinance做金融数据采集时多数人的第一个问题是从哪拿免费且能落地的行情数据。yfinance 就是答案它是雅虎财经Yahoo! FinanceAPI 的非官方 Python 客户端免费、无需注册账号覆盖股票、指数、加密货币、基金和外汇。选型与适用边界yfinance 能做什么yfinance 的定位很明确用 Python 的 pandas 生态把雅虎财经的公开接口包装成Ticker、download()这类简洁 API让你几行代码拿到 OHLCV 行情和.info基本面字段。它适合研究、回测、教学和个人量化项目不适合拿去做生产级的交易信号源。各资产类型的支持程度速查资产类型支持程度数据示例股票★★★★★AAPL、MSFT指数★★★★☆^GSPC、^DJI加密货币★★★★☆BTC-USD、ETH-USD基金/ETF★★★★☆VOO、SPY外汇★★★☆☆EURUSDX需要说清的边界分钟线数据雅虎最多回溯 60 天拿不到 tick 级高频数据它是非官方接口数据质量取决于雅虎侧也不适合合规审计场景——那类需求应采购专业数据供应商。安装与最小可运行验证跑通第一份日线安装后第一步环境验证装库并确认能拉到数据只需三条命令pip install yfinancepython -c import yfinance as yf; print(yf.__version__)运行下面的最小片段这段代码取 AAPL 最近 5 个交易日日线打印列名和 shapeimport yfinance as yf ticker yf.Ticker(AAPL) hist ticker.history(period5d, interval1d) print(hist.columns.tolist()) # [Open, High, Low, Close, Dividends, Stock Splits, Volume] print(hist.shape) # (5, 7)你会看到 7 列 OHLCV 数据默认auto_adjustTrue时 OHLC 已按分红拆股调整只剩Close列。若打印出(5, 7)说明环境已就绪。三个最常用参数的取值速查参数常见取值含义period1d、5d、1mo、3mo、1y、5y、ytd、max拉取时间跨度与 start/end 二选一interval1m、5m、15m、1h、1d、1wk、1moK 线粒度分钟线只能查最近 60 天内auto_adjustTrue默认、False是否自动按分红/拆股复权 OHLCFalse 时额外给出独立的 Adj Close 列三个典型场景实战动量、筛选与板块对比场景 A批量收盘价与 20 日动量排序一句话一次拉多只标的按 20 日涨幅排名。下面这个函数批量下载、算动量并返回降序序列import yfinance as yf import pandas as pd def momentum_rank(tickers: list[str], period: str 3mo) - pd.Series: 批量拉取收盘价并计算 20 日动量。 参数: tickers: 标的代码列表 period: 拉取的时间跨度 返回: 按 20 日动量降序排列的 Seriesindex 为标的代码 close yf.download(tickers, periodperiod, progressFalse)[Close] momentum close.pct_change(20).iloc[-1] return momentum.dropna().sort_values(ascendingFalse) print(momentum_rank([AAPL, MSFT, GOOGL, AMZN, NVDA]))你会看到 5 只股票的排名index 是代码、值是近 20 个交易日涨幅最强标的排在最上。场景 B用 info 字段做基本面筛选一句话读.info里的股息率和市值做规则化初筛。这段函数保留股息率 ≥ 阈值且市值超下限的标的import yfinance as yf def filter_by_info(tickers: list[str], min_yield: float, min_cap: float) - list[dict]: 按股息率与市值筛选标的。 参数: tickers: 标的代码列表 min_yield: 股息率下限小数如 0.03 表示 3% min_cap: 市值下限美元 返回: 通过筛选的字典列表含 symbol、dividend_yield、market_cap result [] for symbol in tickers: info yf.Ticker(symbol).info if info.get(dividendYield, 0) min_yield and info.get(marketCap, 0) min_cap: result.append({symbol: symbol, dividend_yield: round(info[dividendYield], 4), market_cap: info[marketCap]}) return result print(filter_by_info([KO, PFE, AAPL, VZ, MCD], min_yield0.03, min_cap1e10))你会得到一行行通过筛选的标的及其股息率、市值。 逐个请求.info会触发限流批量筛选时循环里time.sleep(1)。场景 C行业 ETF 相对强弱对比一句话用行业 ETF 归一化后画折线一眼看出谁跑赢。代码逻辑yf.Ticker(etf).history(period...)[Close]取各 ETF 收盘价拼成 DataFrame 后除以首日值乘以 100 归一化用 matplotlib 逐列plot出折线最后算(df.iloc[-1] - 100) / 100得到区间涨跌幅。你会看到一张起始日 100的归一化折线图线越陡代表板块越强图例标出各 ETF 名称。高频故障排查与批量下载提速常见故障现象、原因、处理现象原因处理返回空 DataFrame代码不存在/写错或区间无数据先用yf.Search(关键词).quotes核对代码改用period替代 start/end 试拉请求被限流429短时间请求过密调大yf.config.network.retries批次间 sleep必要时配代理yf.config.network.proxy个别日期缺失值雅虎侧数据缺口keepnaTrue查看缺口位置日线级别可加repairTrue让库自动用小时线重建价格突然跳变拆股、分红除权导致未复权跳空看Stock Splits/Dividends列确认坚持用Adj Close或auto_adjustTrue必要时开repairTrue上图为repairTrue修复缺失拆股调整前后的对比。 跳变先查actionsTrue返回的 Dividends 列别把分红当崩盘。带重试的批量下载封装这段函数把限流重试收进下载逻辑遇到 429 按秒退避后重拉最多 3 次。import time import yfinance as yf def batch_download(tickers: list[str], start: str, max_retries: int 3): 带重试的批量下载遇 429 限流时退避重试。 参数: tickers: 标的代码列表 start: 开始日期YYYY-MM-DD max_retries: 最大重试次数 返回: 收盘价 DataFrameindex 为日期columns 为标的代码 for attempt in range(max_retries): try: data yf.download(tickers, startstart, progressFalse) if not data.empty: return data[Close] raise ValueError(空数据) except Exception as err: if 429 in str(err) or attempt max_retries - 1: raise time.sleep(2 ** attempt) return None你会拿到一张多标的收盘价宽表可直接喂给动量或回测代码。本地缓存与降频思路yfinance 本身会把时区表和 cookies 缓存在~/.cache/py-yfinanceLinux可用yf.set_tz_cache_location指到自定义目录。降频的通用思路是把重复数据落到本地首次download()后to_parquet或to_csv存档之后只增量拉取新日期既减少请求又加快回测启动速度。延伸与配套生态工具类型推荐库用途数据处理pandas、polars清洗、拼接、加速大表技术指标pandas-ta均线、MACD、RSI 等回测框架backtrader、vectorbt策略回测可视化matplotlib、plotly静态/交互式图表学习路径建议读源码从yfinance/multi.py的download()和yfinance/ticker.py入手看它怎么拼请求、怎么处理时区仓库的 贡献指南 也解释了如何本地跑起项目。自定义清洗把缺失值填补、异常检测、复权修复写成可复用函数沉淀成自己的数据层。接回测数据层稳定后接 backtrader 或 vectorbt先日线后分钟线逐步缩短回测粒度。上图为 yfinance 的分支协作模型功能在 feature 分支开发、经 dev 测试后合入 main 发布紧急修复走 hotfix 直通。把行情、基本面、板块对比、限速重试这四件事跑通你手里就有一套能落地的金融数据采集底座剩下的就是往回测里填策略了。【免费下载链接】yfinanceDownload market data from Yahoo! Finances API项目地址: https://gitcode.com/GitHub_Trending/yf/yfinance创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考