fix: 修复跨市场收益率计算Bug

Bug机制:
- 先pct_change再ffill对齐,导致海外标的休市日复制前一天非零收益率
- 例如:美股圣诞节放假,但ffill填入前一天的+1.2%,重复计算收益

修复方案:
- 先ffill价格对齐到A股日历(休市日价格不变)
- 再pct_change计算收益率(休市日自然为0%)

影响:
- 修复前净值: 394.80(高估)
- 修复后净值: 16.23(真实)
- 该Bug导致海外标的在A股独有的交易日被重复计算收益

验证:
- 语法检查通过
- 回测运行正常
This commit is contained in:
2026-05-20 22:34:12 +08:00
parent 61b6f0b0a3
commit 982fbe250b

View File

@@ -420,10 +420,11 @@ class RotationStrategy(StrategyBase):
# 提取原始收盘价序列
if 'close' in df.columns:
close_series = df['close'].dropna()
# 先在原始交易日历计算收益率
returns_series = close_series.pct_change(fill_method=None)
# 然后对齐到A股交易日历用ffill填充非共同交易日
returns_aligned = returns_series.reindex(a_share_dates, method='ffill')
# 修复先ffill价格对齐到A股日历计算收益率
# 原因若先pct_change再ffill休市日会复制前一天的非零收益率
# 正确做法:休市日价格不变 → 收益率应为0%
close_aligned = close_series.reindex(a_share_dates, method='ffill')
returns_aligned = close_aligned.pct_change(fill_method=None)
returns_data[f'日收益率_{code}'] = returns_aligned
returns_df = pd.DataFrame(returns_data)