5分钟免费获取股票数据yfinance 完整上手指南【免费下载链接】yfinanceDownload market data from Yahoo! Finances API项目地址: https://gitcode.com/GitHub_Trending/yf/yfinance上个月我想算算自己手里几只股票到底赚了多少结果光是找历史行情就折腾了一整天各大财经网站的数据格式五花八门想要分红和拆分记录还得逐个注册账号更别提那些动辄上千元一年的付费 API。直到我发现了 yfinance——一个能免费、快速、完整地从雅虎财经抓取股票行情、财务数据和实时报价的 Python 库几行代码就解决了我全部的痛点。这篇文章就带你从零跑通它并顺手搭一个你自己的小投资仪表盘。一、先搞懂它到底是个什么把雅虎财经想象成一家数据食堂里面什么菜都有股票价格、分红、财报、期权……但后厨不会直接对你开放。yfinance 就是那个帮你取餐的外卖员——你只需说出菜名它就跑进后厨端出一份打包整齐的餐盒。整个过程只有四个角色你(说出想要的) → yfinance(下单取餐) → 雅虎财经(数据后厨) → DataFrame(装好的餐盒)这个餐盒就是 pandas 的 DataFrame一种像 Excel 表格一样的数据结构。也就是说你拿到手的不是乱七八糟的网页而是一张可以直接算平均值、画曲线、做回测的标准表格。yfinance 替你包办了网络请求、解析、格式转换这些脏活累活你要做的只是点菜。二、三行命令拿到第一份行情安装它只需要一行命令pip install yfinance装好后跑通你的第一段代码import yfinance as yf msft yf.Ticker(MSFT) hist msft.history(period1mo) print(hist.tail())这段代码做了什么它创建了一个微软MSFT的 Ticker 对象拉取最近一个月的日线数据然后打印最后几行。你会看到每天的开盘价、最高价、最低价、收盘价、成交量以及自动复权后的 Adj Close。从安装到看到真实数据全程不到 5 分钟。三、主线实战搭一个迷你投资仪表盘光拿一只股票没意思我们进入正题——做一个能算总资产的迷你投资仪表盘。功能按新手→常用→进阶三级递进每一级都是独立可运行的代码。新手级单只股票的历史走势import yfinance as yf aapl yf.Ticker(AAPL) df aapl.history(start2023-01-01, end2024-01-01) df[MA20] df[Close].rolling(20).mean() # 顺手算个20日均线 print(df.tail())这段代码做了什么拉取苹果一整年的日线并新增一列 20 日均线方便你直接观察趋势。常用级批量下载一次算清整个组合循环一只只请求又慢又啰嗦yfinance 提供了download()一键批量下载内部还会自动并发加速import yfinance as yf portfolio {AAPL: 10, MSFT: 5, GOOGL: 3} data yf.download(list(portfolio), period1y, group_byticker) total 0 for t, shares in portfolio.items(): price data[Close][t].iloc[-1] total price * shares print(f{t}: {shares}股 × {price:.2f} {price * shares:.2f}) print(f组合总市值: {total:.2f})这段代码做了什么一次请求拿到三只股票一整年的数据遍历每只股票取最新收盘价乘以持仓数最后算出组合总市值。进阶级让 yfinance 帮你修复坏数据雅虎财经的数据并不总是干净的常见坑有分红后没有调整价格、股票拆分后历史价格断层、甚至美元/分混用导致价格差了 100 倍。yfinance 内置了数据修复机制一个参数就能开启import yfinance as yf data yf.download(0700.HK, period1y, repairTrue) print(data[data[Repaired?] True]) # 只看被修复过的行这段代码做了什么下载腾讯控股一年的行情并开启修复打印出所有被自动修正的日期和数值。返回结果里新增的Repaired?列会标出哪些行被动过。上图就是一次典型的价格 100 倍错误修复演示图表里有一段价格异常地低repair 开启后 yfinance 会自动识别并把整段数据校准回正确水平。四、翻车日志我踩过的 3 个坑初学阶段我把能踩的坑都踩了一遍现在总结给你帮你直接绕开。坑 1股票代码写错返回空数据现象history()返回空的 DataFrame提示 No data found。 原因雅虎财经的代码有自己的格式港股、欧股都要带交易所后缀。 修复把腾讯换成0700.HK把阿里巴巴换成9988.HK或BABA。坑 2要了一年前的每分钟数据现象yf.download(AAPL, period1y, interval1m)返回空表。 原因分钟级日内数据最多只能回溯 60 天这是雅虎的限制不是 bug。 修复分钟级数据用短周期period5d要看长期历史就换interval1d。坑 3明明有分红价格曲线却出现诡异跳变现象某天收盘价突然跌了一大截跟实际走势对不上。 原因分红除权或货币单位混用导致的 100 倍错误原样数据不可信。 修复拉数据时加上repairTrue让 yfinance 自动把除权调整补回来。像上图这样某天发了分红但历史价格没有同步调整yfinance 会检测出来并手动把 Adj Close 修正保证整条曲线连续可比。五、进阶组合技把它的上限用起来组合技 1WebSocket 实时行情监控download()拿到的是过去实时价格可以交给内置的 WebSocket 推送import yfinance as yf def on_price_update(ws, message): print(价格更新:, message) with yf.WebSocket() as ws: ws.subscribe([AAPL, MSFT]) ws.listen(on_price_update)这段代码做了什么订阅苹果和微软的实时报价每来一条新行情就打印一条。很适合写盘中小助手。组合技 2批量数据 自动缓存yfinance 会把时区、ISIN 等信息缓存到本地重复请求秒回。配合Tickers类可以同时管理多个对象tickers yf.Tickers(AAPL MSFT GOOGL) for name in tickers.tickers: info tickers.tickers[name].info print(name, info.get(longName), info.get(currentPrice))组合技 3把财报和期权也拉进来历史行情只是冰山一角同一只股票的财务报表、期权链、分析师目标价都是现成的apple yf.Ticker(AAPL) print(apple.financials.head()) # 利润表 chain apple.option_chain(apple.options[0]) print(chain.calls.head()) # 最近到期日的看涨期权六、现在就开始从想分析股票到看到数据yfinance 把中间所有麻烦都替你抹平了。现在就动手安装 yfinance用你的真实持仓跑一遍上面那个组合市值小脚本你会立刻感受到数据自由的快乐。想继续深入这些地方值得收藏官方文档doc/source/index.rst从安装到高级用法都有进阶教程doc/source/advanced/里面有缓存、多级列、价格修复等主题核心源码yfinance/ticker.py单只股票、yfinance/multi.py批量下载、yfinance/live.py实时行情参考示例doc/source/reference/examples/每个场景都有可运行的例子想读源码仓库git clone https://gitcode.com/GitHub_Trending/yf/yfinance上图是项目自己的分支管理策略main 放稳定版、dev 放开发版功能分支和修复分支各司其职。这样一个高质量的开源项目代码组织方式本身就值得你翻一翻学习。数据是投资的起点而 yfinance 把起点铺到了你的终端里。跑起来吧第一个结果正在等你。【免费下载链接】yfinanceDownload market data from Yahoo! Finances API项目地址: https://gitcode.com/GitHub_Trending/yf/yfinance创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考