
yfinance Ticker 股票数据方法完全指南从行情历史到 ISIN、分红、拆股与新闻【免费下载链接】yfinanceDownload market data from Yahoo! Finances API项目地址: https://gitcode.com/GitHub_Trending/yf/yfinance本篇技术指南围绕 yfinance 项目中Ticker对象在“股票数据stock场景”下提供的全部公开接口展开聚焦 yfinance.stock.rst 所收录的方法——get_isin/isin、history、get_history_metadata、get_dividends/dividends、get_splits/splits、get_actions/actions、get_capital_gains/capital_gains、get_shares_full、get_info/info、get_fast_info/fast_info、get_news/news。读完本文你将掌握每个方法的调用方式、返回结构、参数语义以及它们在 ticker.py、base.py 与 scrapers/history.py 中的底层实现原理可以直接在量化分析、数据清洗与自动化监控任务中落地使用。1. 方法总览与约定1.1 方法 vs 属性yfinance.Ticker为同一份数据提供两种访问形式二者等价属性实现为方法调用的封装方法形式属性形式返回类型get_isin()isinstrhistory(...)—pd.DataFrameget_history_metadata()history_metadatadictget_dividends(period)dividendspd.Seriesget_splits(period)splitspd.Seriesget_actions(period)actionspd.DataFrameget_capital_gains(period)capital_gainspd.Seriesget_shares_full(start, end)—pd.Seriesget_info()infodictget_fast_info()fast_infoFastInfoget_news(count, tab)newslist从 ticker.py 的源码结构可以看到属性全部是对get_*方法的薄封装例如isin返回self.get_isin()、dividends返回self.get_dividends()、news返回self.get_news()。因此本文统一以get_*方法为讲解主线属性形式仅在使用时提及。1.2 依赖的数据来源Ticker内部并非单点实现而是按功能拆分到多个 scraper 模块见 base.py 的初始化代码行情与历史事件OHLC、分红、拆股、资本利得、历史元数据→PriceHistoryscrapers/history.py快照报价与估值 →Quote、FastInfoscrapers/quote.py基本面与股本 →Fundamentalsscrapers/fundamentals.py此外Ticker还支持以元组(OR, XPAR)形式传入“代码 市场标识符MIC”底层会通过_MIC_TO_YAHOO_SUFFIX映射为 Yahoo 后缀如OR.PA详见 base.py。同时它也接受 ISIN 作为 ticker 输入源码中会调用utils.is_isin判断并通过缓存反查代码这与下文get_isin()的查询能力形成闭环。2. 历史行情history()与get_history_metadata()2.1history()完整参数history()是Ticker最核心的方法定义于 base.py实际委托给PriceHistory.history()scrapers/history.py。其参数与语义如下参数默认值说明period1mo有效区间1d,5d,1mo,3mo,6mo,1y,2y,5y,10y,ytd,max可与start/end组合如end start periodinterval1d有效周期1m,2m,5m,15m,30m,60m,90m,1h,1d,5d,1wk,1mo,3mo分钟/小时级日内数据不能超过最近 60 天start99 年前开始日期含接受YYYY-MM-DD字符串或_datetimeend现在结束日期不含如end2023-01-01则最后一条数据为2022-12-31prepostFalse是否包含盘前/盘后数据auto_adjustTrue是否自动复权所有 OHLCback_adjustFalse是否使用后向复权模拟真实历史价格repairFalse是否修复 Yahoo 数据中的价格错误100x、缺失、错误分红调整详见 price_repairkeepnaFalse是否保留 Yahoo 返回的 NaN 行roundingFalse是否四舍五入到 2 位小数timeout10请求超时秒数raise_errorsFalse是否将错误以异常抛出已被yf.config.debug.hide_exceptions取代调用时会发出 DeprecationWarning2.2 底层请求构造与行为细节从 scrapers/history.py 可以看出几个值得注意的实现事实30m 数据的 Yahoo bug 规避源码注释明确说明 Yahoo 对30m返回 60m 数据因此请求时先以15m拉取再在本地重采样为 30m见 history.py 与 L340-L351。多日区间的 repair 特例当repairTrue且interval为5d/1wk/1mo/3mo时源码会改为拉取1d数据、执行修复后再本地重采样L102-L128其中5d直接被判定为 nonsense 并抛出ValueError。事件参数请求恒带params[events] div,splits,capitalGainsL202即一次请求同时取回分红、拆股与资本利得事件。缓存策略当请求时间范围完全落在过去结束时间早于当前时间 30 分钟以上时会改用cache_get走缓存L216-L221。时区处理返回 DataFrame 的索引会被本地化到交易所时区exchangeTimezoneName并调用fix_Yahoo_dst_issue处理 DST 问题L358-L359未请求prepost的日内数据还会剔除 Yahoo 多返回的盘前盘后行L361-L363。返回列包含Open/High/Low/Close/Adj Close/Volume以及合并进的事件列Dividends、Stock SplitsETF/共同基金还会出现Capital GainsL439-L458开启repair时可能附带Repaired?标记列。2.3get_history_metadata()历史元数据get_history_metadata()base.py返回行情请求附带或单独拉取的元数据字典典型字段包括currency、exchangeTimezoneName、instrumentType用于判断是否为 ETF/共同基金firstTradeDate、regularMarketTime、regularMarketPrice等validRanges校验用户传入的period是否合法tradingPeriods交易时段表、lastTrade最近成交价与时间currentTradingPeriod含开盘/收盘时间戳YF repair?是否对数据执行过价格修复其实现要点history.py是如果元数据尚未缓存会主动请求一次5d/1h的日内数据因为 Yahoo 只在日内响应中返回tradingPeriods等字段随后用utils.format_history_metadatautils.py把firstTradeDate、regularMarketTime、currentTradingPeriod等 UNIX 时间戳转换为带交易所时区的 pandas 时间戳。repair参数的默认值取_SENTINEL_哨兵含义是“跟随上一次history()调用是否启用了价格修复”测试 test_ticker.py 专门验证了这一点。3. 公司事件分红、拆股、资本利得与 actions3.1 三个get_*方法与实现divs ticker.get_dividends(periodmax) # pd.Series索引为除息日 splits ticker.get_splits(periodmax) # pd.Series索引为拆股生效日 cg ticker.get_capital_gains(periodmax) # pd.Series仅 ETF/共同基金有数据三者定义于 base.py内部统一走PriceHistory的缓存路径_get_history_cache(interval1d, ...)见 history.py也就是说它们总是基于1d 日线请求获取事件数据再分别取出dividends、splits、capital gains字段get_dividends返回纯分红序列值为每股派息金额get_splits返回拆股比率序列get_capital_gains返回资本利得分配只有instrumentType为MUTUALFUND或ETF时才解析见 history.py 与 L374-L375。三者的共同period参数默认max全量历史也可以传入history()支持的区间值。3.2get_actions()合并后的公司行为表get_actions(periodmax)history.py返回一个合并了所有事件的pd.DataFrame列可能包含Dividends、Dividends FX、Stock Splits、Capital Gains。其内部逻辑是从历史缓存取价格与分红数据若分红带currency列常见于越南市场或以外币派息的公司则合并为Dividends FX列只保留事件值不全为 0 的行(actions[cols_numeric]!0).any(axis1)若某事件列全为 0则直接删除该列。注意get_actions()返回类型为pd.Series方法签名标注如此但源码实际返回合并后的pd.DataFrameTicker.actions属性同样如此测试 test_ticker.py 断言其为pd.DataFrame。使用时以 DataFrame 处理即可。由于get_dividends/splits/capital_gains/actions全部共享历史缓存首次调用某个方法会触发一次 1d 历史请求后续调用直接命中缓存——测试test_chained_history_callstest_ticker.py验证了“先调history()再取dividends”不会重复请求。4. 股本数据get_shares_full()get_shares_full(startNone, endNone)base.py返回一个pd.Series索引为带交易所时区的日期时间值为该日期的流通股数。实现细节日期处理默认结束时间为当前时刻默认起始时间为“结束时间往前推 548 天约 18 个月”start/end会被解析到交易所时区并做floor/ceil对齐若start end会记录错误并返回None。数据源请求https://query2.finance.yahoo.com/ws/fundamentals-timeseries/v1/finance/timeseries/{ticker}的shares_out字段失败时JSON 解析失败、请求异常、Yahoo 返回Bad Request默认记录日志并返回None除非关闭YfConfig.debug.hide_exceptions。缓存走self._data.cache_get。这个接口适合需要跟踪股本随时间变化的场景如加权平均股本、回购对股本的影响而get_shares()未在本文档的 API 列表内只提供当前的快照股本。5. 公司概况get_info()与get_fast_info()5.1get_info()完整快照get_info()base.py返回一个包含公司全面信息的dict由Quote.info提供scrapers/quote.py涵盖公司简介、市值、市盈率、每股收益、52 周高低、行业板块、分析师目标价等大量字段。Ticker.info属性与其等价。5.2get_fast_info()轻量惰性字典get_fast_info()base.py返回FastInfo对象scrapers/quote.py它的设计目标是“比info更快地拿到常用字段”实现要点quote.py模仿 dict 行为支持keys()、items()、values()、get()、in、[]取值且同时支持 snake_case 与 camelCase 两种键名如market_cap与marketCap。通过_get_1y_prices()调用history(period1y, auto_adjustFalse)与get_history_metadata()惰性加载数据因此首次访问某字段才会触发请求后续访问命中实例缓存。公开键集合keys()包括currency、quote_type、exchange、timezone、shares、market_cap、last_price、previous_close、open、day_high、day_low、regular_market_previous_close、last_volume、fifty_day_average、two_hundred_day_average、ten_day_average_volume、three_month_average_volume、year_high、year_low、year_change等。测试test_fast_infotest_ticker.py通过遍历for k in f的方式验证了其 dict 行为。当需要快速获取“现价、市值、52 周高低”等少量指标时优先使用fast_info而不是完整的info。6. 新闻get_news()get_news(count10, tabnews)base.py返回与该股票相关的新闻列表count请求的新闻条数snippetCounttab可选news最新新闻、all全部、press releases新闻稿非法值会抛出ValueError返回list每个元素是一篇新闻文章 dict源码会过滤掉ad广告条目L630结果缓存在self._news首次调用后再次调用直接返回缓存若 Yahoo 返回Will be right back或请求失败会抛出YFDataException提示 Yahoo Finance 暂时不可用。注意get_news走的是_ROOT_URL_/xhr/ncp的 POST 接口ncp_fin服务与history使用的/v8/finance/chart不同。7. ISIN 识别get_isin()get_isin()base.py用于查询股票的国际证券识别码ISIN标注为experimental结果缓存在self._isin同一Ticker实例只查询一次若 ticker 含-或^如指数^GSPC、部分衍生品直接返回-查询逻辑先用Quote.info取shortName然后请求 businessinsider 的搜索建议接口按{ticker}|模式解析 ISIN解析失败返回-或None反向支持Ticker构造函数本身接受 ISIN 作为输入base.py会通过cache.get_isin_cache()与utils.get_ticker_by_isin反查 Yahoo 代码测试test_isin、test_isin_infotest_ticker.py覆盖了这两种场景。8. 组合使用示例把上述 API 组合起来可以构建一个典型的“单只股票数据速览”脚本参考 reference/examples/ticker.pyimport yfinance as yf ticker yf.Ticker(MSFT) # 1) 历史行情默认 1mo / 1d hist ticker.history(period1y, interval1d, auto_adjustTrue, repairTrue) print(hist.tail()) # 2) 历史元数据时区、货币、首次上市日 md ticker.get_history_metadata() print(md[currency], md[exchangeTimezoneName], md[firstTradeDate]) # 3) 分红、拆股、资本利得、合并 actions divs ticker.get_dividends() # pd.Series splits ticker.get_splits() # pd.Series actions ticker.get_actions() # pd.DataFrame可能含 Dividends/Stock Splits/Capital Gains # 4) 历史股本默认约 18 个月窗口 shares ticker.get_shares_full() # 5) 公司概况轻量快照 vs 完整信息 f ticker.get_fast_info() print(f[market_cap], f[last_price], f[year_high]) info ticker.get_info() # 完整 dict # 6) 新闻与 ISIN news ticker.get_news(count5, tabnews) isin ticker.get_isin() print(isin)运行环境要求安装本项目pip install -e .或按 pyproject.toml 依赖安装依赖 pandas、numpy、requests、beautifulsoup4 等并保持网络可访问 Yahoo Finance 接口。所有示例均基于当前仓库源码的行为编写可通过 tests/test_ticker.py 中的对应测试进一步验证。9. 常见问题与注意事项返回类型差异get_dividends/splits/capital_gains返回pd.Seriesget_actions实际返回pd.DataFrame方法签名标注pd.Series以源码实现与测试为准。raise_errors已弃用改用yf.config.debug.hide_exceptions False见 history.py。日内数据时效限制分钟/小时级数据只覆盖最近约 60 天1m 更短跨月历史请使用日线以上周期。repairTrue与多日区间5d区间不受支持1wk/1mo/3mo会先拉日线修复再重采样耗时更长但更准确完整原理见 price_repair。缓存机制Ticker内部使用请求级缓存YfData.cache_get与实例级缓存如_news、_isin、_history_cache同一进程内重复调用不会重复请求跨进程持久化缓存可参考 caching。ISIN 为实验性功能查询依赖第三方站点接口失败时返回-或None建议在业务代码中做容错。数据来源稳定性history依赖/v8/finance/chartget_news依赖/xhr/ncpget_earnings_dates等依赖 HTML 爬取见 base.py这些端点若变更接口行为可能随之调整升级依赖版本前建议先阅读 CHANGELOG.md。10. 小结yfinance.Ticker的 stock 方法族覆盖了股票数据场景下最常用的数据维度历史行情含元数据与价格修复、分红/拆股/资本利得事件、历史股本、公司概况完整与轻量两种粒度、新闻与 ISIN。理解其“属性方法封装”“scraper 分工”“惰性加载与多级缓存”三个设计特点可以更高效地构建稳定、可复现的金融数据管道。进一步的 API 细节可在 reference/index.rst 找到各模块的 autosummary 文档。【免费下载链接】yfinanceDownload market data from Yahoo! Finances API项目地址: https://gitcode.com/GitHub_Trending/yf/yfinance创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考