fix: 修复因子前向填充不生效的 bug
问题根因: - reindex(method='ffill') 不会填充已存在的 NaN 值 - 当 factor_df 中已有 NaN(境外市场放假),reindex 无法填充 修复方案: - 改为两步操作:reindex() 然后 ffill() - ffill() 会填充所有 NaN,包括已存在的 影响范围: - rotation.py: positions 对齐到 A 股日历 - export_backtest_detail.py: 因子对齐到展示日历 验证结果: - 2026-04-30 HSI: nan → 0.2388 ✅ - 2026-05-08 HSI: nan → 0.1144 ✅
This commit is contained in:
@@ -155,12 +155,21 @@ def main():
|
||||
|
||||
# 将因子对齐到实际展示日历(前向填充)
|
||||
# 因子已经在原始数据上计算完成,这里只是将结果对齐到展示日历
|
||||
factor_df_aligned = factor_df.reindex(common_dates, method='ffill')
|
||||
# 注意:必须先 reindex 再 ffill,因为 reindex(method='ffill') 不会填充已有的 NaN
|
||||
factor_df_aligned = factor_df.reindex(common_dates)
|
||||
factor_df_aligned = factor_df_aligned.ffill()
|
||||
|
||||
# 调试:检查 2026-04-30 的值
|
||||
if '2026-04-30' in common_dates:
|
||||
hsi_val = factor_df_aligned.loc['2026-04-30', 'HSI'] if 'HSI' in factor_df_aligned.columns else 'NO COLUMN'
|
||||
print(f"[DEBUG] factor_df_aligned['2026-04-30', 'HSI']: {hsi_val}")
|
||||
|
||||
# 检查 factor_df 中 HSI 的最后几个有效值
|
||||
if 'HSI' in factor_df.columns:
|
||||
hsi_last_valid = factor_df['HSI'].dropna()
|
||||
if len(hsi_last_valid) > 0:
|
||||
print(f"[DEBUG] factor_df['HSI'] 最后3个有效值:")
|
||||
print(hsi_last_valid.tail(3))
|
||||
|
||||
# 持仓状态跟踪
|
||||
holdings_state = {} # {code: {'entry_date': str, 'entry_price': float}}
|
||||
|
||||
Reference in New Issue
Block a user