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

如何计算标普500的滚动周度、月度、季度收益率?

解决滚动周度/月度/季度收益率计算问题

你需要的是按周/月/季度分组的滚动累计收益率——每日更新到当日为止的当期累计收益,且每期(周/月/季)初重置计算起点,而不是降采样成单期一行的结果。以下是具体实现方法:

核心思路

先按时间周期(周/月/季)给数据打分组标签,再在每个分组内计算从期初到当日的累计收益率,保留每日数据行。


1. 滚动周度收益率实现

# 1. 生成跨年不重复的周标签(格式:年-周数)
data['year_week'] = data.index.strftime('%Y-%W')

# 2. 按周分组,计算滚动累计收益率(转成百分比)
data['rolling_weekly_return'] = data.groupby('year_week')['daily_return'].apply(
    lambda x: 100 * ((x + 1).cumprod() - 1)
)
  • 用%Y-%W生成周标签是为了避免跨年时周数重复(比如2023年第52周和2024年第52周不会混淆)
  • (x + 1).cumprod()计算的是从周初到当日的累计净值,减1再乘100得到累计收益率百分比
  • 结果会保留原DataFrame的所有行,每周初收益率重置为0(首日pct_change()为NaN,需处理的话可加.fillna(0))

2. 扩展到月度/季度收益率

只需要修改分组标签的生成逻辑即可:

滚动月度收益率

# 生成年-月标签
data['year_month'] = data.index.strftime('%Y-%m')

# 按月分组计算滚动收益率
data['rolling_monthly_return'] = data.groupby('year_month')['daily_return'].apply(
    lambda x: 100 * ((x + 1).cumprod() - 1)
)

滚动季度收益率

# 生成年-季度标签(格式:YYYYQN)
data['year_quarter'] = data.index.to_period('Q').astype(str)

# 按季度分组计算滚动收益率
data['rolling_quarterly_return'] = data.groupby('year_quarter')['daily_return'].apply(
    lambda x: 100 * ((x + 1).cumprod() - 1)
)

和原resample方法的区别

  • 原resample("W")是降采样,将整周的收益压缩成一行,只保留每周最后一天的结果
  • 上述方法是分组滚动计算,保留每日数据,每天显示到当日为止的当期累计收益,每期期初重置计算

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 16:15:09