ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

yfinance免费股票数据获取实战:半小时跑通你的第一个持仓分析脚本

2026/8/17 21:05:15 拓冰建站 浏览量
yfinance免费股票数据获取实战:半小时跑通你的第一个持仓分析脚本 yfinance免费股票数据获取实战半小时跑通你的第一个持仓分析脚本【免费下载链接】yfinanceDownload market data from Yahoo! Finances API项目地址: https://gitcode.com/GitHub_Trending/yf/yfinance如果你正在为怎么快速拿到一批股票的历史价格发愁这篇文章就是为你准备的。我们将围绕一个真实小项目——给自家持仓写一个市值跟踪脚本——从零开始使用 Python 库yfinance走完安装、单票取数、批量下载、数据修复到基本面查询的完整链路。全程只要复制几段代码就能得到一份每周可自动更新的持仓数据而且完全免费、无需注册、无需 API 密钥。一个真实需求别再手动抄行情了先说说故事的起点。你手里有十几只股票每周末想统计一次总市值。原来的做法是打开行情网页把收盘价一条条抄进 Excel再手动算乘积。股票少的时候还能忍一旦超过十只抄错行、看错价格就成了家常便饭。更麻烦的是你想画一条持仓市值随时间变化的曲线——这要求每周的历史收盘价都能拿到。手动抄不现实。于是需求变得很具体写一个脚本输入股票代码和持仓数量自动输出每个持仓的市值、总市值最好还能拉出历史行情画曲线。yfinance 恰好把这件事变得极简单下面我们一步步来。第一步安装 yfinance两分钟搞定yfinance 是一个从雅虎财经公开接口抓取市场数据的 Python 库安装方式只有一条命令pip install yfinance安装时会自动带上pandas、curl_cffi等依赖你不需要手动处理。装完先验证一下import yfinance as yf print(yf.__version__) # 打印版本号确认安装成功如果终端输出类似0.2.x的版本号说明环境已经就绪。注意把脚本文件放在你自己喜欢的目录下比如portfolio/后面所有代码都写在这个目录里。第二步用 Ticker 抓下第一份行情看看数据长什么样yfinance 最常用的入口是Ticker它代表一只股票。我们用苹果公司试试import yfinance as yf aapl yf.Ticker(AAPL) df aapl.history(period1mo) # 最近一个月的日线行情 print(df.tail()) # 打印最近几行确认数据格式运行后你会看到一张标准的表格每一行是一个交易日列包括Open开盘、High最高、Low最低、Close收盘、Adj Close复权收盘、Volume成交量。这里有个关键点做长期分析时请优先用Adj Close。它已经按分红、拆股做了复权调整能真实反映你拿在手里的收益变化而不只是价格的数字跳动。history()有两个核心参数period控制时间跨度interval控制数据粒度。它们怎么搭配看这张速查表就够你的需求periodinterval盘中分时走势1d1m 或 5m近一周的小时线5d1h近一年日线最常用1y1d多年周线/月线趋势5y / max1wk / 1mo小提示分钟级数据最多只能回溯约 60 天这是数据源的硬限制不是 yfinance 的问题。第三步让十几只股票一次性到位Ticker适合单只股票但你的持仓是十几只。用download()函数可以一次搞定它内部会自动多线程并发抓取比写 for 循环快得多import yfinance as yf portfolio [AAPL, MSFT, GOOGL, AMZN, TSLA] data yf.download(portfolio, period6mo, group_byticker) close data[Close] # 取出每只股票的收盘价列名是股票代码 print(close.tail())运行结果是一张日期 × 股票的二维表每一列就是一只股票的收盘价序列。到这一步你已经拥有了画持仓市值曲线所需的全部原材料把每只股票的收盘价乘以持仓数量再加总即可。第四步当数据不对劲时让 repair 参数兜底真实世界的行情数据并不总是干净的。雅虎财经偶尔会给出离谱的结果某几天价格全部变成0.15货币单位搞混价格差了 100 倍、成交量整段缺失、除息日附近的复权价格没调整等。如果直接用这些脏数据做分析曲线会出现吓人的悬崖。yfinance 从某个版本起内置了数据修复机制只需加一个参数df yf.Ticker(8TRA.DE).history(period1y, repairTrue) print(df[Repaired?].sum()) # 统计被修复的行数上图是典型的 100 倍错误某几天的价格被雅虎统一记成了0.15成交量也丢失了。开启repairTrue后yfinance 会尝试用更细粒度的小时数据重建这段行情并在结果中新增一列Repaired?标记哪些行被处理过。你可以在doc/source/advanced/price_repair.rst里看到完整的修复场景说明。上面这张图展示的是另一种常见问题公司在某天发放了股息但前一天的复权价格没有跟着调整导致历史收益计算失真。repairTrue会把这类缺失的除息调整补上让整段历史数据前后一致。建议下载历史数据时默认带上repairTrue几乎零成本却能避开最致命的数据坑。第五步从行情走向基本面拼装完整脚本行情解决的是价格但做持仓分析往往还想看基本面。Ticker对象同样提供了财务数据入口aapl yf.Ticker(AAPL) print(aapl.financials) # 利润表 print(aapl.balance_sheet) # 资产负债表 print(aapl.cashflow) # 现金流量表 print(aapl.info[dividendYield]) # 股息率等指标现在把前面的能力拼起来写出这个项目真正的成品——一个持仓市值统计脚本import yfinance as yf portfolio {AAPL: 10, MSFT: 5, TSLA: 3} def portfolio_value(): total 0 for ticker, shares in portfolio.items(): stock yf.Ticker(ticker) price stock.info[currentPrice] # 取最新价 value price * shares total value print(f{ticker}: {shares}股 × {price:.2f} {value:.2f}) print(f\n组合总市值: {total:.2f}) portfolio_value()运行它会依次输出每只股票的持仓市值最后给出组合总市值。下次想更新重新执行一次即可这就是自动化带来的第一份回报。第六步途中遇到的两个小坑新手在跑上述代码时最容易碰到两个问题。一个是时区。港股、美股、欧股返回的时间戳带不同时区如果你把多市场数据混在一起画图日期会对不齐。yfinance 会把时区信息存在时间索引里pandas会保留它画图前注意统一即可项目还提供了时区缓存机制相关代码在yfinance/cache.py可调用yf.set_tz_cache_location()指定缓存目录。一个是网络波动。抓取批量数据时偶尔会超时失败最简单的办法是加一层重试失败后等两秒再试如果怀疑是请求被限流可以用yf.enable_debug_mode()打开调试日志看是哪一步出了问题。下一步你的行动清单与延伸阅读到这里一个能输出持仓市值、能拉历史行情、能修复脏数据的脚本已经跑通了。现在轮到你自己动手替换持仓把脚本里的portfolio字典换成你自己的股票代码和股数跑一遍看看结果。生成曲线用download()拉一年日线把data[Close]乘以持仓后按周重采样画一张持仓市值曲线。开启修复把repairTrue加进你的下载代码打印Repaired?列对比修复前后的差异。如果还想深入研究项目的doc/source/reference/examples/目录下放着一批可直接运行的示例ticker、download、实时行情等场景tests/data/里则有各种脏数据样本和修复后的对照文件非常适合用来理解修复逻辑。下图是项目自身的分支管理示意能看出它采用main与dev双分支的成熟开发流程——这也意味着它是一个活跃维护、值得长期依赖的开源项目。从今天起你不再需要为了几行行情数据打开网页、手动复制。一个脚本几句代码把数据拉回来把时间留给真正的分析——这才是用工具的正确方式。【免费下载链接】yfinanceDownload market data from Yahoo! Finances API项目地址: https://gitcode.com/GitHub_Trending/yf/yfinance创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考