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),仅供参考