3 行代码拿到股票行情:yfinance 从取数到修数的新手路径
【免费下载链接】yfinanceDownload market data from Yahoo! Finance's API项目地址: https://gitcode.com/GitHub_Trending/yf/yfinance
写回测脚本、盯盘程序,第一步常卡在行情数据上。yfinance 是个 Python 库,替你从 Yahoo Finance 拉日线分钟线,坏价格还能自动修复。
最小能跑的版本
import yfinance as yf t = yf.Ticker("600519.SS") df = t.history() # 默认近 1 个月日线跑完你会看到一张以带时区的交易日期为索引的表:Open、High、Low、Close、Adj Close、Volume 六列,to_csv一句就能落盘。
你的场景走哪条路
- 如果你要单只股票的日线,就
Ticker.history(),配start、end两个日期参数定精确区间。 - 如果你要一次拉多只还要合并成一张宽表,就
yf.download(tickers),group_by="ticker"让一级列是标的,换"column"则一级列是指标。 - 如果你要分钟级数据,就留意
interval参数:分钟级线最多回看 60 天,小时级线最多 2 年,超了直接返回空。 - 如果你要给每只票各配一个独立对象,就
yf.Tickers("600519.SS 0700.HK"),空格分隔字符串,底层和download同一条路。 - 如果你要市场、行业这类背景信息,就
yf.Market、yf.Sector、yf.Industry,别和行情接口混用。
取数后先过一遍质检 🧾
非美市场的数据毛病多。拿到表别急着算,按顺序过一遍:
- 表是空的?先判断
df.empty再决定跳过或告警,别直接取列。 - 某天价格突然变成前后日的 100 倍或 1/100?这是币制单位混乱,伦敦市场高发,
history或download加repair=True就能修:
- 除权日前后
Adj Close和Close一样、序列出现台阶?分红漏调了,repair会按除权信息重算Adj Close,真实案例可看 价格修复文档。 - 日线中间缺行、成交量为 0?
repair会用 1 小时数据重建回填,修完核对行数和Repaired?标记:
- 批量下载时个别标的偶发失败?网络抖动居多,直接重跑一遍通常就补齐了。
默认就够用,手动调这几处
- 缓存默认落在用户目录(Linux 为
~/.cache/py-yfinance),时区表和 cookie 落盘避免重复请求;要换位置就yf.set_tz_cache_location("your/path"),各系统默认路径见 缓存文档。 - 并发默认
threads=True,线程数取标的数与 CPU 核数×2 的较小值;限流明显时显式传threads=4压并发。 - 真实币种别信
Ticker.info,看Ticker.get_history_metadata()["currency"]——币种混乱正是 100 倍差价的常见来源。
数据不对时的排查顺序 🔍
先查 metadata:调Ticker.get_history_metadata(),看currency和lastPrice两个字段,对不上你预期的币种或量级,说明代码后缀可能写错了。
再查区间:确认这只票在你给的start/end里确实有交易,空表多半是区间或代码问题,不是库的问题。
最后看Repaired?列:repair=True跑完,表里多出这列,全 False 说明数据本来就干净,个别 True 的行就是被改过的行,拿它当验收标准。
15 分钟练一遍就通
yf.download(["600519.SS", "0700.HK"], period="6mo", repair=True)拉两张表,Repaired?全 False 即链路干净,有 True 的行就是 repair 替你救回来的。
【免费下载链接】yfinanceDownload market data from Yahoo! Finance's API项目地址: https://gitcode.com/GitHub_Trending/yf/yfinance
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考