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

如何遍历滚动日期范围?基于已实现的年周五生成功能求扩展

实现滚动周五起始的60天日期范围遍历并整合股票数据获取

修正通用的周五生成函数

原代码硬编码偏移量的方式不够通用,这里调整为自动计算任意年份的第一个周五:

from datetime import date, timedelta
import pandas as pd
from pandas_datareader import data as wb  # 需提前安装:pip install pandas-datareader

def all_fridays(year):
    d = date(year, 1, 1)
    # 计算到第一个周五的天数:isoweekday()返回1(周一)-7(周日),周五对应5
    days_to_friday = (5 - d.isoweekday()) % 7
    d += timedelta(days=days_to_friday)
    while d.year == year:
        yield d
        d += timedelta(days=7)

整合滚动日期范围与股票数据抓取

直接遍历每个周五作为起始日期,计算60天后的结束日期,再批量抓取对应窗口的股票数据:

# 替换为你的目标股票代码列表
tickers = ["AAPL", "MSFT", "GOOG"]
all_price_data = []

# 遍历2022年的所有周五滚动窗口
for start_date in all_fridays(2022):
    end_date = start_date + timedelta(days=60)
    print(f"处理窗口: {start_date.strftime('%Y-%m-%d')} 至 {end_date.strftime('%Y-%m-%d')}")

    window_data = []
    for ticker in tickers:
        try:
            # 转换日期格式适配Yahoo Finance要求的mm/dd/yyyy
            prices = wb.DataReader(
                ticker,
                start=start_date.strftime('%m/%d/%Y'),
                end=end_date.strftime('%m/%d/%Y'),
                data_source='yahoo'
            )[['Adj Close']]
            # 添加股票代码和窗口标记(可选,用于区分不同滚动周期)
            window_data.append(
                prices.assign(
                    ticker=ticker,
                    window_start=start_date.strftime('%Y-%m-%d')
                )[['ticker', 'window_start', 'Adj Close']]
            )
        except Exception as e:
            print(f"{ticker}数据获取失败: {str(e)}")
    
    if window_data:
        all_price_data.append(pd.concat(window_data))

# 合并所有窗口的数据
final_df = pd.concat(all_price_data).reset_index()

关键说明

  • 滚动窗口的结束日期通过start_date + timedelta(days=60)直接计算,严格匹配你要求的"每个周五往后推60天"的逻辑。
  • 新增window_start字段可帮助后续分析时区分不同滚动周期的数据,不需要可直接删除该字段的赋值代码。
  • 异常处理新增具体错误信息,便于定位单只股票的数据获取问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 23:50:28