news 2026/10/8 7:50:54

yfinance 取数:3 行代码拿数据,4 类异常一次修完的实用速查

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
yfinance 取数:3 行代码拿数据,4 类异常一次修完的实用速查

yfinance 取数:3 行代码拿数据,4 类异常一次修完的实用速查

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

写回测脚本,第一道坎往往是数据:从哪来、缺了怎么办、坏了怎么办。yfinance 是一个从 Yahoo Finance 接口抓取股票行情数据的 Python 库,三行代码把一只股票的日线装进 pandas 表格,还自带价格修复。这篇带你跑通三件事:最小取数、识别并修复数据异常、批量取数。

最小可运行示例

pip install yfinance
import yfinance as yf t = yf.Ticker("600519.SS") df = t.history(start="2025-06-01", end="2025-09-01", interval="1d") print(df[["Open", "Close", "Volume"]].tail())

start/end两个日期字符串定精确区间,interval定颗粒度,也可以用period="3mo"这类快捷写法。记住一个硬性限制:分钟级(1m–30m)只能回看最多约 60 天,1h 级最多 2 年。返回的表以带时区的交易日期为索引,列是 Open/High/Low/Close/Adj Close/Volume。

读懂数据表,再动手

列名含义注意事项
Open / High / Low / Close开、高、低、收原始价格,受分红拆股影响
Adj Close除权除息调整后收盘价回测算收益用它
Volume成交量0 或空可能是 Yahoo 端缺失
Dividends / Stock Splits分红与拆股需actions=True才返回
Repaired?该行是否被修复仅repair=True时出现

新手最容易忽略Adj Close和Close的区别:前者减去了分红与拆股影响,序列连续,算收益用它;后者是当日真实成交价。

数据异常的四种典型表现与修复

美股数据比较干净,非美市场问题多,下面四种先记着。

返回空表

某区间取回来是空表,直接取列就报错。多半是该股票在区间内没有记录,或代码后缀写错。动手前先检查df.empty,再决定跳过还是告警;顺手用history_metadata()返回的lastPrice、currency佐证代码对不对,必要时调整start/end区间再试。

价格出现数量级跳变 🔧

某天价格比前一天大 100 倍或小 100 倍,根因通常是 Yahoo 把币种单位搞混(比如英镑/便士),伦敦市场高发。修复:history()或download()传repair=True,表里会多一列Repaired?,被修正的行标True,直接看这列就能确认生效。以仓库测试数据为例,AET.L 在 2022-06-06 的 Close 只有 0.1455,修复后还原为 14.55。

除权除息日价格序列断档

除息日前后 Adj Close 和 Close 一样,序列出现台阶,根因是 Yahoo 漏了分红调整。传repair=True会按除权信息重算 Adj Close。真实案例:1398.HK 在 2024-07-08 除息 0.3357,修复前 07-04 的 Adj Close 停在 4.83,修复后校正为 4.494285。修复逻辑细节见 doc/source/advanced/price_repair.rst。

批量取数时偶发失败

重跑时个别标的偶发失败,多为网络抖动或临时限流。最直接的修复是重跑一遍,通常能补齐;download的threads参数可传整数限制并发,网络差时调小一点降低限流概率。失败的标的会打进日志,照单补跑即可。

按场景选接口

  • 单只、一次取数:yf.Ticker("600519.SS").history(period="3mo")—— 日期索引的普通 DataFrame,最轻
  • 批量、要一张合并宽表:yf.download(tickers, group_by="column")—— 多级列,一级指标二级标的
  • 批量、按标的分组:yf.download(tickers, group_by="ticker")—— 一级列是 ticker,横向对比方便
  • 批量、每只要一个对象:yf.Tickers("600519.SS 0700.HK")—— 空格分隔字符串,每只各得一个 Ticker 对象
  • 按条件选股:yf.EquityQuery+yf.screen—— 先搭查询再执行 以上选顺手的就行,没有银弹,示例见 doc/source/reference/examples/download.py。

稳定性与性能三件小事

  1. 本地缓存:时区与 cookie 默认存用户目录,可用set_tz_cache_location换自定义路径
  2. 并发控制:download默认并发,限流明显时显式传threads=4
  3. 修复后验证币种:看history_metadata的currency,别信Ticker.info
import yfinance as yf yf.set_tz_cache_location("custom/cache/path")

各系统默认路径见 doc/source/advanced/caching.rst。做到这三点就够,别过度设计。

动手验证(10 分钟任务)🏁

import yfinance as yf df = yf.download(["600519.SS", "0700.HK"], period="6mo", repair=True) print(df["Repaired?"].unique())

打印结果里全是False,说明这批数据正常;出现True就对照那行的前后数值,看它修了什么。下次写回测,记住这个闭环就够了:history拿数,repair=True修数。

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

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

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

OpenShell 实战:浏览器交互式 Shell 的会话保持与部署避坑指南

1. 从一个空输入框说起:OpenShell 到底在解决什么问题第一次看到“OpenShell”这个词,是在一个终端工具讨论帖里。有人丢出一句话:“有没有那种能让我在浏览器里直接开一个像样的 shell,又不用装一堆东西的方案?”底下…

作者头像 李华
网站建设 2026/10/8 7:49:08

第116篇 Kotlin 代码评审清单:团队规范与静态检查

前面几节讲的是"怎么写",这一节讲"怎么保证团队写出来的代码跟你一样好"。这题的面试形态很特别——它不考语法也不考 API,考的是你有没有一套能落地的质量保障机制。答得浅的人说"团队 review 很严格",答得深的人会讲清"哪些交给机器、…

作者头像 李华
网站建设 2026/10/8 7:46:34

Meson Qt4 模块实战指南:moc/uic/rcc 工具链集成与 Qt4 项目构建配置

构建工具 【免费下载链接】meson The Meson Build System 项目地址: https://gitcode.com/gh_mirrors/me/meson 点击查看 免费下载 本文面向仍在维护 Qt4 遗留代码库、或需要理解 Meson Qt 模块统一抽象机制的开发者,系统讲解 Meson 中 qt4 模块的加载方…

作者头像 李华