无法通过yfinance获取最近10分钟股票数据的问题求助
问题分析与解决方案
核心问题拆解
你遇到的YFChartError本质是请求的时间区间内无有效1分钟级数据,后续的FileNotFoundError是连锁反应——因为没有下载到数据,绘图逻辑无法生成图片导致。主要原因集中在三个方面:
- yfinance 1分钟数据的限制:仅支持最近7天的1分钟数据,且仅在目标交易所的交易时段内能获取实时数据,休市时无法拿到新数据。
- 时区不匹配:代码中用
datetime.now()取的是本地时间,若目标资产属于其他时区的交易所(比如你怀疑的伦敦交易所、或测试的美股标普500),本地的“开市时间”可能和目标交易所的交易时段不重合。 - Ticker格式错误:非纽约交易所的资产需要指定后缀才能定位到对应市场,比如伦敦交易所股票要加
.L后缀(如汇丰控股HSBA.L),否则yfinance会默认匹配纽交所代码,导致找不到对应数据。
修正后的代码
import yfinance as yf from datetime import datetime, timedelta import pytz import pandas as pd ticker = str(input("Input the symbol to predict: \n").upper()) # 1. 指定目标交易所时区:伦敦用Europe/London,美股用America/New_York target_tz = pytz.timezone('Europe/London') now = datetime.now(target_tz) start = now - timedelta(minutes=10) try: # 2. 下载数据:注意非纽交所ticker要加后缀,比如伦敦股加.L data = yf.download( tickers=ticker, start=start, end=now, interval="1m", ignore_tz=False, # 强制使用传入的时区,避免自动转UTC progress=True ) # 3. 检查数据是否为空,避免后续绘图报错 if data.empty: print("下载失败:指定时间区间内无数据,请检查交易时段和ticker格式") else: print("Data collection successful, beginning plotting...") df = pd.DataFrame(data) # 此处添加你的绘图逻辑,确保仅在df非空时执行 # 示例:df.plot()并保存图片的代码 except yf.exceptions.YFChartError as e: print(f"下载失败:{str(e)}") except Exception as e: print(f"其他错误:{str(e)}")
关键优化点说明
时区对齐
用pytz强制指定目标交易所的时区,确保请求的start/end时间落在该交易所的交易时段内。比如你要获取伦敦交易所数据,就用Europe/London时区;获取美股则用America/New_York。Ticker格式规范
- 伦敦交易所股票:代码后加
.L(如沃达丰VOD.L) - 德国法兰克福交易所:加
.DE - 法国巴黎交易所:加
.PA - 美股指数(如标普500
^GSPC)无需后缀,但需确保请求时间在美东时间9:30-16:00的交易时段内。
- 伦敦交易所股票:代码后加
异常处理与数据校验
- 捕获yfinance专属的
YFChartError,精准定位下载问题 - 检查返回的DataFrame是否为空,避免后续因无数据导致的绘图、文件读取错误
- 捕获yfinance专属的
内容的提问来源于stack exchange,提问作者SplooshM
相关产品推荐
相关产品推荐

