You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

无法通过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)}")

关键优化点说明

  1. 时区对齐
    用pytz强制指定目标交易所的时区,确保请求的start/end时间落在该交易所的交易时段内。比如你要获取伦敦交易所数据,就用Europe/London时区;获取美股则用America/New_York。

  2. Ticker格式规范

    • 伦敦交易所股票:代码后加.L(如沃达丰VOD.L)
    • 德国法兰克福交易所:加.DE
    • 法国巴黎交易所:加.PA
    • 美股指数(如标普500^GSPC)无需后缀,但需确保请求时间在美东时间9:30-16:00的交易时段内。
  3. 异常处理与数据校验

    • 捕获yfinance专属的YFChartError,精准定位下载问题
    • 检查返回的DataFrame是否为空,避免后续因无数据导致的绘图、文件读取错误

内容的提问来源于stack exchange,提问作者SplooshM

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 00:38:11