尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

yfinance Ticker 与 Tickers 使用指南:以 Pythonic 方式获取个股、批量行情与基金数据

yfinance Ticker 与 Tickers 使用指南:以 Pythonic 方式获取个股、批量行情与基金数据 yfinance Ticker 与 Tickers 使用指南以 Pythonic 方式获取个股、批量行情与基金数据【免费下载链接】yfinanceDownload market data from Yahoo! Finances API项目地址: https://gitcode.com/GitHub_Trending/yf/yfinanceTicker与Tickers是 yfinance 面向开发者提供的一对核心门面类分别用于以面向对象的方式访问单只证券的全量数据行情、期权、财务报表、日历、分析师观点等以及批量初始化并管理多只证券。本篇指南以 yfinance.ticker_tickers.rst 为骨架结合仓库源码ticker.py、tickers.py、base.py深入讲解其用法、参数与底层实现读完即可上手完成个股数据获取、批量下载、ETF/共同基金持仓分析以及代理服务器配置。Ticker单只证券的 Pythonic 数据入口Ticker类将 Yahoo Finance 的底层 HTTP API 封装为直观的 Python 对象。官方文档对其定位是allows you to access ticker data in a Pythonic way——你只需yf.Ticker(MSFT)构造一个对象即可通过统一的属性与方法访问该证券的几乎所有数据维度无需关心背后的接口拼接与解析。从源码结构看Ticker继承自TickerBase见 ticker.py并在初始化时额外维护两份状态_expirations缓存期权到期日字典YYYY-MM-DD - 时间戳由_download_options()填充_underlying缓存期权链对应的标的正股行情quote信息。构造函数签名如下def __init__(self, ticker, sessionNone):其中session是可选的requests.Session对象用于复用连接、统一代理或自定义请求头见 base.py 中YfData(sessionsession)的传递。其__repr__返回yfinance.Ticker object TICKER便于交互式调试ticker.py。官方示例代码逐行解析文档给出的 ticker.py 示例 覆盖了Ticker最常用的几类数据import yfinance as yf dat yf.Ticker(MSFT) # get historical market data dat.history(period1mo) # options dat.option_chain(dat.options[0]).calls # get financials dat.balance_sheet dat.quarterly_income_stmt # dates dat.calendar # general info dat.info # analysis dat.analyst_price_targets # websocket dat.live()各调用含义如下调用返回类型说明dat.history(period1mo)pd.DataFrame近 1 个月历史行情OHLCV。内部经TickerBase.history懒加载PriceHistory后转发base.pydat.option_chain(dat.options[0]).callspd.DataFrame取第一个到期日的看涨期权链。dat.options返回所有到期日字符串元组option_chain返回Options命名元组calls/puts/underlying见 ticker.pydat.balance_sheet/dat.quarterly_income_stmtpd.DataFrame财务报表prettyTrue自动将行名由驼峰式转为可读标题dat.calendardict事件日历财报、分红等字典见 ticker.pydat.infodict标的概要信息市值、市盈率、行业等内部调用get_info()-self._quote.infobase.pydat.analyst_price_targetsdict分析师目标价current/low/high/mean/median等键见 ticker.pydat.live()—启动 WebSocket 实时订阅需保持进程运行以持续接收推送属性property与 get_ 方法两条等价的访问通道Ticker上绝大多数数据成员都有两种访问方式直接属性如dat.info、dat.dividends、dat.major_holders与显式方法如dat.get_info()、dat.get_dividends()。从 ticker.py 可以看到属性只是对方法的薄包装例如property def dividends(self) - pd.Series: return self.get_dividends()方法形式通常额外支持参数。以get_dividends为例它接受periodmax参数并透传给价格历史模块base.pydef get_dividends(self, periodmax) - pd.Series: return self._lazy_load_price_history().get_dividends(periodperiod)同样的参数化能力也体现在财务报表上get_income_stmt(prettyFalse, freqyearly)可组合freq取值为yearly/quarterly/trailing配合prettyTrue得到格式化行名get_balance_sheet/get_cash_flow的freq支持yearly/quarterlybase.py。对应地Ticker暴露了三组频率属性年度income_stmt、季度quarterly_income_stmt与滚动十二个月ttm_income_stmt并保留financials、balancesheet、cashflow等历史别名以兼容旧代码ticker.py。期权链的底层实现option_chain是Ticker独有的高级能力。其实现路径ticker.py可归纳为首次调用_download_options()请求{_BASE_URL_}/v7/finance/options/{ticker}解析响应中的expirationDates并缓存到_expirations同时提取quote存入_underlying若指定了date参数会先校验该日期是否存在于_expirations不存在则抛出ValueError并列出可用到期日_options2df()将原始期权数据规整为 DataFrame固定列序为contractSymbol, lastTradeDate, strike, lastPrice, bid, ask, change, percentChange, volume, openInterest, impliedVolatility, inTheMoney, contractSize, currency并把lastTradeDate时间戳转换为带时区的时间ticker.py最终返回namedtuple(Options, [calls, puts, underlying])无数据时三个字段均为None。因此option_chain(dateNone, tzNone)的tz参数可控制lastTradeDate的时区转换结果。Tickers批量管理多只证券当需要同时处理多只股票时文档建议使用Tickers模块To initialize multipleTickerobjects, useTickersmodule。它接受一个由空格或逗号分隔的字符串或一个字符串列表并自动将符号统一为大写import yfinance as yf tickers yf.Tickers(msft aapl goog) # access each ticker using (example) tickers.tickers[MSFT].info tickers.tickers[AAPL].history(period1mo) tickers.tickers[GOOG].actions # websocket tickers.live()Tickers.__init__的实现tickers.py做了三件事解析输入tickers若是字符串则先replace(,, ).split()再逐个upper()为每个符号创建独立的Ticker实例存入self.tickers字典键为证券代码共享同一个YfData数据层实例self._data统一管理会话与请求。__repr__输出yfinance.Tickers object MSFT,AAPL,GOOGtickers.py方便确认已装载的证券列表。批量历史数据下载Tickers.history()是对底层批量下载的高层封装其签名与multi.download对齐tickers.pydef history(self, periodperiod_default, interval1d, startNone, endNone, prepostFalse, actionsTrue, auto_adjustTrue, repairFalse, threadsTrue, group_bycolumn, progressTrue, timeout10, **kwargs):常用参数说明period/start/end时间范围。period合法取值为1d,5d,1mo,3mo,6mo,1y,2y,5y,10y,ytd,max默认1mo当start、end均为None时生效start含起始日end不含结束日intervalK 线周期合法值为1m,2m,5m,15m,30m,60m,90m,1h,1d,5d,1wk,1mo,3mo日内数据最多回溯 60 天且30m数据是抓取15m后重采样得到的Yahoo 侧缺陷规避见 multi.py 的 docstringauto_adjust是否自动复权默认Truerepair是否启用价格修复默认Falsethreads多线程并发下载默认Truegroup_by结果列组织方式column默认按列分组ticker按证券分组progress是否显示进度条timeout单请求超时秒数默认 10。内部逻辑tickers.py先调用multi.download(..., group_byticker, ...)获取多级索引 DataFrame再把各证券子表回填到对应Ticker实例的_history缓存中后续单标的调用可直接复用若group_by column则交换列层级并排序得到列名 → 证券的结构。这意味着Tickers.history()返回的 DataFrame 同时可用于后续的单标的Ticker查询避免重复下载。此外Tickers.news()返回{symbol: [新闻条目, ...]}字典Tickers.live(message_handlerNone, verboseTrue)通过共享的WebSocket一次性订阅全部符号tickers.py。基金与 ETF 专属数据funds_data对于 ETF 或共同基金类标的文档特别指出Ticker.funds_data提供基金相关数据且 Funds Top Holdings and other data with category average is returned aspd.DataFrame前十大持仓等带类别均值的数据以 DataFrame 返回。官方示例funds_data.pyimport yfinance as yf spy yf.Ticker(SPY) data spy.funds_data # show fund description data.description # show operational information data.fund_overview data.fund_operations # show holdings related information data.asset_classes data.top_holdings data.equity_holdings data.bond_holdings data.bond_ratings data.sector_weightingsfunds_data返回FundsData对象ticker.py 中get_funds_data()懒加载生成定义于 base.py。其公开成员scrapers/funds.py与返回类型如下成员返回类型内容descriptionstr基金文字简介fund_overviewDict[str, Optional[str]]基金概览成立日、费率、管理人等fund_operationspd.DataFrame运营信息表asset_classesDict[str, float]资产类别权重top_holdingspd.DataFrame前十大持仓equity_holdingspd.DataFrame股票持仓明细bond_holdingspd.DataFrame债券持仓明细bond_ratingsDict[str, float]债券评级分布sector_weightingsDict[str, float]行业权重分布使用时要先确认标的是基金/ETF 类型如 SPY对普通个股调用funds_data无意义由于FundsData依赖基金专属接口不同标的的字段完整度可能不同取值前建议先检查返回值是否非空。通过代理服务器下载数据文档提供了在受限网络环境下使用代理的标准写法proxy.pyTicker的绝大多数get_*方法以及history、option_chain都接受proxy关键字参数将PROXY_SERVER替换为实际代理地址即可import yfinance as yf msft yf.Ticker(MSFT) msft.history(..., proxyPROXY_SERVER) msft.get_actions(proxyPROXY_SERVER) msft.get_dividends(proxyPROXY_SERVER) msft.get_splits(proxyPROXY_SERVER) msft.get_capital_gains(proxyPROXY_SERVER) msft.get_balance_sheet(proxyPROXY_SERVER) msft.get_cashflow(proxyPROXY_SERVER) msft.option_chain(..., proxyPROXY_SERVER) ...两点实操提示逐方法传proxy适合临时场景如果整个会话都要走代理更推荐在构造Ticker/Tickers时传入带代理配置的requests.Session通过session参数统一生效session会被透传到YfData与multi.downloadproxy的格式遵循requests库约定如http://host:port需与你的代理服务类型匹配。小结如何选择 Ticker 还是 Tickers从官方文档与源码实现可以归纳出两条清晰的使用准则单标的深度分析用Ticker期权链、基金持仓、完整财务报表、分析师一致预期等重能力都挂在单对象上属性与get_*方法双通道方法形态支持freq、period、proxy、as_dict等参数定制多标的批量操作用Tickers一次构造、统一大写归一、共享会话history()自动走多线程批量下载并按group_by组织结果live()一次订阅全部符号其内部self.tickers字典可随时取出单个Ticker继续做深度分析。两者共享TickerBase的能力底座base.py 中统一的YfData、PriceHistory、Analysis、Holders、Quote、Fundamentals数据模块划分因此无论从哪个入口进入最终拿到的数据口径与质量完全一致。配合仓库中的 ticker.py 示例、tickers.py 示例、funds_data.py 示例 与 proxy.py 示例 即可对照实战更多配置细节可参阅 参考文档索引 与 config.rst。【免费下载链接】yfinanceDownload market data from Yahoo! Finances API项目地址: https://gitcode.com/GitHub_Trending/yf/yfinance创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表