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

如何使用for循环获取2年时间跨度的1分钟间隔股票价格数据

问题诊断

你对代码逻辑的理解确实存在错误,核心问题有3个:

  • 自定义的dl_data函数完全没有用到传入的参数i,每次调用该函数时的请求时间区间都是固定的「当前时间到2年前」,循环执行500多次本质是重复请求同一份数据,没有实现逐段往前拉取历史数据的效果。
  • 函数内部请求的是默认粒度的日度行情,和你需要的1分钟粒度不匹配,即使请求成功返回的也是日度数据,和初始的1分钟数据拼接逻辑完全错误。
  • Yahoo Finance本身对1分钟级行情的公开回溯周期做了限制,最多仅支持查询最近30天的1分钟数据,不管你怎么调整循环逻辑,都无法拿到超出这个时间范围的数据,这就是你最终数据最早只能追溯到特定时间点的核心原因。

修正后的实现方案

如果要在Yahoo Finance的限制范围内拉取所有可获取的1分钟数据,可以参考下面的代码逻辑:

import pandas as pd
import yfinance as yf
import datetime as dt

tickers = ["SBUX", "MCD", "CMG", "WEN", "DPZ", "YUM", "DENN"]
all_data = pd.DataFrame()
# 每次拉7天,最多拉4次就覆盖30天上限
for i in range(4):
    end = dt.datetime.today() - dt.timedelta(days=7*i)
    start = end - dt.timedelta(days=7)
    period_data = yf.download(tickers, start=start, end=end, interval='1m')['Adj Close']
    all_data = pd.concat([all_data, period_data])
# 去重排序
all_data = all_data.sort_index().drop_duplicates()

其他可行实现方式

  • 更换数据源:如果确实需要2年的分钟级行情,可以改用支持长周期分钟数据的财经数据接口,例如国内的聚宽、Tushare Pro、通达信接口,海外的Alpha Vantage等,这类数据源多数需要注册账号,部分会有调用频率或者数据量的免费额度限制。
  • 调整需求粒度:如果非必须用1分钟数据,可以改用5分钟、15分钟等更长粒度的行情,Yahoo Finance对这类粒度的回溯周期会更长,最高可以支持到最近2年的15分钟级数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 10:24:04