ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

yfinance 下载的非美股数据价格出现 100 倍偏差怎么排查和修复

yfinance 下载的非美股数据价格出现 100 倍偏差怎么排查和修复 yfinance 下载的非美股数据价格出现 100 倍偏差怎么排查和修复【免费下载链接】yfinanceDownload market data from Yahoo! Finances API项目地址: https://gitcode.com/GitHub_Trending/yf/yfinance用 yfinance 的Ticker.history()或yf.download()拉取非美股尤其是伦敦证交所 £/pence 混用的股票数据时部分价格会整体偏大 100 倍——原因是 Yahoo 在数据源里把货币单位搞混了$/cents、£/pence。yfinance 官方文档指出Only US market data appears perfect即这类问题主要出现在美股之外。本文说明如何确认这是 Yahoo 的 100x 货币单位错误并用 yfinance 内置的repairTrue参数完成修复和验证。先确认偏差形态随机散布还是整段切换100x 偏差在数据里有两种典型形态来源doc/source/advanced/price_repair.rst随机散布错误行随机分布在整段数据中个别价格突然放大 100 倍。这类错误由scipy模块检测对 OHLC 做局部中值滤波找出与邻域比值约为 100 的离群值。整段切换从某个日期起 Yahoo 决定永久切换货币之后整段数据都是 cents/pence 计价表现为价格序列从某一天起整体跳变 100 倍。排查时先看返回表的Close/Open序列如果是孤立几天异常属于第一种如果从某个日期开始整段都大 100 倍属于第二种。两种形态repairTrue都会处理。另外因为 100x 错误本质是货币混用修复前后真实货币单位可能发生变化。文档明确提醒import yfinance as yf t yf.Ticker(AET.L) t.history(period1y, interval1d, repairTrue) # 修复后检查真实货币看 history_metadata不要看 Ticker.info print(t.history_metadata[currency])Ticker.info里的货币字段不可靠Ticker.history_metadata[currency]才是修复逻辑使用并更新的真实货币。用repairTrue执行修复history()和download()都支持repair参数默认Falsehistory() 源码参数说明repair : bool — Fixes price errors in Yahoo data: 100x, missing, bad dividend adjust.download() 参数说明repair: bool — Detect currency unit 100x mixups and attempt repair. Default is False对单个 tickerimport yfinance as yf dat yf.Ticker(AET.L) df dat.history(period1y, interval1d, repairTrue) print(df)批量下载时同样传该参数import yfinance as yf df yf.download([AET.L, SSW.JO], period1y, interval1d, repairTrue)两点关于interval的适用条件来源history() 实现使用repairTrue且interval为1wk、1mo、3mo时yfinance 会改为先取 1d 数据、修复后再重采样到目标周期文档说明这是顺带解决 Yahoo 多日周期 dividend 调整缺陷的方式。interval5d与repairTrue组合会直接抛出ValueError不支持。验证修复结果修复后的返回表会多出一列Repaired?逐行标记该行是否被修复过df dat.history(period1y, interval1d, repairTrue) print(df[df[Repaired?]]) # 只看被修复过的行验证时核对三个点之前整体偏大 100 倍的时间段价格是否回落到与前后邻域同一数量级Repaired?列是否精确标记了被改动的行未修复的行保持Falsedat.history_metadata[currency]是否为修复后的真实货币单位。修复失败的值会被还原为 Yahoo 原始值而不是留下错误结果所以Repaired?为False的行即使仍有异常也说明该处无法自动修复。已知限制与误报边界只修复 1d 周期的 dividend 相关错误文档指出误报率false positive随周期变长而上升所以 dividend 修复只针对 1d请求多日周期时会自动取 1d 修复后重采样。微小 dividend 的误报修复逻辑依赖价格行为判断极小的 dividend如 0.5%可能被把正常波动误判为除息下跌。文档给出的处理建议要么接受该风险要么抓取 6-12 个月、至少包含 2 次 dividend 的价格数据把几次 dividend 放在一起分析以识别误报。重建数据与 Yahoo 后续修复的数据可能略有差异如果某段数据是用更小周期如1h重建的之后 Yahoo 自己修好了原始数据两者会略有不同、volume 可能差异明显——文档说明重建结果beats missing data但数值不完全一致属于预期行为。适用范围修复针对 Yahoo 返回的价格错误100x、缺失、坏 dividend 调整、坏拆股等。100x 检测需要至少两行数据、依赖scipy仅在实际请求repairTrue时才导入单行表格无法做 100x 检测。排查路径总结先按随机散布 vs 整段切换确认偏差形态 →repairTrue重取数据 → 用Repaired?列和history_metadata[currency]验证。若修复后Repaired?仍无法覆盖某些异常行说明该处超出了自动修复能力需要人工核对对应日期前后的价格。【免费下载链接】yfinanceDownload market data from Yahoo! Finances API项目地址: https://gitcode.com/GitHub_Trending/yf/yfinance创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表