news 2026/9/5 20:47:59

yfinance 教程:5 分钟用 Python 批量获取金融数据与实时行情

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
yfinance 教程:5 分钟用 Python 批量获取金融数据与实时行情

yfinance 教程:5 分钟用 Python 批量获取金融数据与实时行情

【免费下载链接】yfinanceDownload market data from Yahoo! Finance's API项目地址: https://gitcode.com/GitHub_Trending/yf/yfinance

yfinance 是一个 Python 金融数据工具,直接从雅虎财经的公开接口取行情:历史 K 线、财报、实时报价,返回的都是 pandas DataFrame,拿到即可算指标。值得装的道理很简单——它把清洗、复权、缺行这些脏活内置了,你只管写分析。

一、不装它,你多干多少活

自己抓行情意味着:自己拼 HTTP 请求、解析页面、把分红和拆股算回价格、补上市休市造成的空行——这一套做下来比写分析本身还久。yfinance 把这段路铺平了,一个函数调用,剩下的是分析而不是爬虫。

二、5 分钟跑通第一条数据

pip install yfinance # 终端执行
import yfinance as yf hist = yf.Ticker("TSLA").history(period="6mo") print(hist.tail())

跑完你会看到一张标准 DataFrame:日期做索引,Open / High / Low / Close / Volume 做列,一行一个交易日,价格默认已按分红拆股复权,不用自己算。

三、三个真实场景

场景 1:批量拉取 20 只股票的历史数据

做选股或组合回测时,一个人盯一只股票不现实,往往要一次拉几十只代码的日线。

data = yf.download( ["TSLA", "NVDA", "QQQ"], start="2023-01-01", auto_adjust=True, )

一次调用带回三只代码多年的日线,默认多线程请求。返回的列是 (代码, 字段) 双层索引,直接.pct_change()算收益、按代码分组做因子都行;要存 CSV 前记得先按 ticker 拆开。

场景 2:用财报数据做基本面体检

判断一只股票贵不贵,先看它怎么赚钱。Ticker上三个属性直接给报表:

t = yf.Ticker("NVDA") t.income_stmt # 利润表 t.balance_sheet # 资产负债表 t.cash_flow # 现金流量表

三个属性各返回一张 DataFrame,行是科目、列是年度。坑:这些是年度口径,行名跟着上游接口走,别把索引名写死在代码里。

场景 3:盯实时行情,免写轮询

盯盘靠定时轮询太糙。yfinance 自带 WebSocket(一种服务端主动推送的连接协议),行情来了直接推给你:

ws = yf.WebSocket(["TSLA", "NVDA"]) ws.subscribe(["TSLA", "NVDA"]) def on_msg(m): print(m["symbol"], m["price"]) ws.listen(on_msg)

listen会一直挂着,回调收到的是最新价、涨跌等字段组成的字典。免费流只在交易时段推送,盘后没消息;它是行情提醒级别的,别拿它当券商级低延迟交易接口。

四、小实战:给 TSLA 做一次技术面体检

思路:均线判方向,RSI 判情绪,布林带判波动——三个信号同向再动手。先拉两年日线,算 20 日和 50 日均线:

t = yf.Ticker("TSLA") df = t.history(period="2y", interval="1d") ma20, ma50 = df["Close"].rolling(20).mean(), df["Close"].rolling(50).mean()

RSI 是相对强弱指标(0–100,越接近 100 买盘越强),先算 14 日涨跌,正负分开求滚动均值再合成:

chg = df["Close"].diff() rsi = 100 - 100 / (1 + chg.clip(lower=0).rolling(14).mean() / chg.clip(upper=0).abs().rolling(14).mean())

布林带就是 20 日均线加减两倍标准差,两行代码。最后只留三行结论:RSI 在 80 上方大概率超买,价格跌回 20 日线下方趋势转弱,收在上轨附近波动放大——三者一致时结论才值得信。

五、踩坑笔记

⚠️限频要主动管。雅虎接口没有公开配额,批量下载最容易撞墙:请求间隔拉开一点、threads调小、失败的代码单独重试,而不是死磕。

📉数据源本身有瑕疵。免费数据源偶发分红复权缺失、成交量单位错乱:

拉完历史数据先抽查几个除权日,确认收盘价和成交量没有断层。

🗂️用足本地缓存。库会把 cookie 与时区信息存进本地 SQLite,连续分析同一批代码时能少发很多登录请求;想换缓存目录,看 yfinance/cache.py 里的设置函数即可。

📜读一遍条款。雅虎 API 明确仅限个人使用,自己研究没问题;要做收费工具或对外数据服务,请先对照其条款,别把转售数据写进产品。

六、搭配什么更好用

  • pandas:返回物本来就是 DataFrame,向量化算收益、分组滚动窗口直接接,无缝。
  • 回测框架:日线 DataFrame 可以直接喂给 backtrader 或 vectorbt 这类回测引擎,当数据源用。
  • 本地数据库:要长期留存时,每天把收盘价写进 DuckDB / SQLite,比反复请求接口省钱也稳。

七、适合谁用

适合刚接触数据分析的人拿它取第一批金融数据,也适合量化研究做日线、分钟线的量化数据源,个人投资辅助判断也够用。它不适合券商级低延迟实时行情和带 SLA 的生产系统——那类场景请买商业数据源。

【免费下载链接】yfinanceDownload market data from Yahoo! Finance's API项目地址: https://gitcode.com/GitHub_Trending/yf/yfinance

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/5 20:45:52

three.js BatchedMesh 深度指南:用多绘制批次渲染减少 Draw Call

three.js BatchedMesh 深度指南:用多绘制批次渲染减少 Draw Call 【免费下载链接】three.js JavaScript 3D Library. 项目地址: https://gitcode.com/GitHub_Trending/th/three.js 本篇基于 three.js 官方 API 文档与源码实现,系统讲解 BatchedMe…

作者头像 李华
网站建设 2026/9/5 20:45:20

技术分享课如何做到学员可复现:最小闭环与环境自检

评价一次技术讲师授课分享的质量,不能只看老师讲得多顺,还要看现场学员在课程结束后能不能独立还原课堂步骤。常见的情况是:老师在自己的电脑里跑通了三遍示例,学员打开命令行之后第一行命令就报错;老师切到示例代码很…

作者头像 李华
网站建设 2026/9/5 20:43:06

Apktool 安装教程:从零到解包第一条命令

Apktool 安装教程:从零到解包第一条命令 【免费下载链接】Apktool A tool for reverse engineering Android apk files 项目地址: https://gitcode.com/GitHub_Trending/ap/Apktool Apktool 是一款把 Android APK 拆成可编辑项目、改完再重新打包的逆向工具。…

作者头像 李华
网站建设 2026/9/5 20:40:14

基于RT-Thread与Ymodem协议实现STM32L4串口OTA固件升级

简介:本资源是一套基于RT-Thread操作系统的STM32L4系列单片机OTA固件升级完整工程,面向嵌入式开发工程师及RTOS进阶学习者,解决低功耗物联网设备在无调试器条件下通过串口安全远程更新固件的核心需求。工程以STM32L496为硬件平台,…

作者头像 李华
网站建设 2026/9/5 20:39:52

用Python复现“谷歌翻译20次”实验:从语义漂移分析到TTS演唱

用谷歌翻译把一句话来回翻译 20 次,再把最后生成的文字当作歌词唱出来,是最近短视频平台上很常见的创意挑战。外行看是恶搞,程序员的视角里却藏着一个很有意思的工程问题:机器翻译输出是稳定的吗?语义是怎么在多次往返…

作者头像 李华