为何yfinance下载的日内5分钟股票数据最后一行缺失?
解决yfinance下载股票数据缺失最后5分钟K线的问题
问题重现
你使用以下代码下载EL股票的5分钟线数据:
import yfinance as yf import pandas as pd data = yf.download(tickers='EL',period='1d',interval='5m') print(data.tail())
得到的输出显示最后一条数据是2023-12-22 15:55:00-05:00,缺失了当日最后5分钟的交易数据,且多日下载时每日均存在这个问题:
[*********************100%%**********************] 1 of 1 completed Open High Low Close Adj Close Volume Datetime 2023-12-22 15:35:00-05:00 144.110001 144.270004 144.054596 144.100006 144.100006 19665 2023-12-22 15:40:00-05:00 144.000000 144.160004 143.925003 144.160004 144.160004 25930 2023-12-22 15:45:00-05:00 144.220001 144.240005 144.057007 144.070007 144.070007 33270 2023-12-22 15:50:00-05:00 144.130005 144.479996 144.119995 144.470001 144.470001 57425 2023-12-22 15:55:00-05:00 144.460007 144.529999 144.339996 144.429993 144.429993 133693
解决方案
更新yfinance到最新版本
这个问题大概率是旧版本yfinance的bug,先执行升级命令:pip install --upgrade yfinance改用
Ticker.history()方法替代yf.download()
部分用户反馈download()函数在处理短周期K线时会截断最后一根,换成Ticker对象的history()方法能解决这个问题:import yfinance as yf import pandas as pd # 初始化Ticker对象 ticker = yf.Ticker('EL') # 获取1天的5分钟线数据,prepost=False只取常规交易时段数据 data = ticker.history(period='1d', interval='5m', prepost=False) # 查看最后几条数据 print(data.tail())验证数据完整性
执行完上述操作后,检查输出的Datetime列:美股常规交易时段为9:30-16:00,最后一根5分钟线的起始时间应为15:55:00(覆盖15:55-16:00的交易时段)。如果需要盘后数据,可将prepost参数设为True,即可包含盘前盘后的交易数据。
内容的提问来源于stack exchange,提问作者Lizshadehdg
相关产品推荐
相关产品推荐

