From 2f6b03136142cf8bb9bee3a87e4e76e60704901a Mon Sep 17 00:00:00 2001 From: aszerW Date: Mon, 25 May 2026 02:45:27 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=B7=BB=E5=8A=A0=E5=9B=A0=E5=AD=90?= =?UTF-8?q?=E5=AF=B9=E9=BD=90=E8=B0=83=E8=AF=95=E8=BE=93=E5=87=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 检查 factor_df 索引类型 - 检查 reindex 后 2026-04-30 的 HSI 动量值 - 待进一步分析为何 ffill 未生效 --- framework_v2/scripts/export_backtest_detail.py | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/framework_v2/scripts/export_backtest_detail.py b/framework_v2/scripts/export_backtest_detail.py index f1e2102..dbce3a2 100644 --- a/framework_v2/scripts/export_backtest_detail.py +++ b/framework_v2/scripts/export_backtest_detail.py @@ -143,10 +143,25 @@ def main(): # 因子数据(DataFrame 格式) factor_df = pd.DataFrame(factors) + # 调试输出 + print(f"[DEBUG] factor_df 索引类型: {type(factor_df.index)}") + print(f"[DEBUG] factor_df 索引是否为 DatetimeIndex: {isinstance(factor_df.index, pd.DatetimeIndex)}") + print(f"[DEBUG] factor_df 索引示例: {factor_df.index[:3]}") + + # 确保索引是 DatetimeIndex + if not isinstance(factor_df.index, pd.DatetimeIndex): + print("[DEBUG] 转换索引为 DatetimeIndex...") + factor_df.index = pd.to_datetime(factor_df.index) + # 将因子对齐到实际展示日历(前向填充) # 因子已经在原始数据上计算完成,这里只是将结果对齐到展示日历 factor_df_aligned = factor_df.reindex(common_dates, method='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}") + # 持仓状态跟踪 holdings_state = {} # {code: {'entry_date': str, 'entry_price': float}} prev_holdings = set()