diff --git a/freqtrade/freqai/data_kitchen.py b/freqtrade/freqai/data_kitchen.py index adcda0a4..1076a1a0 100644 --- a/freqtrade/freqai/data_kitchen.py +++ b/freqtrade/freqai/data_kitchen.py @@ -385,12 +385,30 @@ class FreqaiDataKitchen: :param df: Dataframe containing all candles to run the entire backtest. Here it is sliced down to just the present training period. """ + # 创建数据副本并确保日期列时区一致性 + df_copy = df.copy() + + # 标准化日期列的时区 + if 'date' in df_copy.columns: + if hasattr(df_copy['date'], 'dt'): + if df_copy['date'].dt.tz is not None: + df_copy['date'] = df_copy['date'].dt.tz_localize(None) + + # 确保timerange的日期也是无时区的 + start_dt = timerange.startdt + stop_dt = timerange.stopdt + + if hasattr(start_dt, 'tz') and start_dt.tz is not None: + start_dt = start_dt.tz_localize(None) + if hasattr(stop_dt, 'tz') and stop_dt.tz is not None: + stop_dt = stop_dt.tz_localize(None) + if not self.live: - df = df.loc[(df["date"] >= timerange.startdt) & (df["date"] < timerange.stopdt), :] + df_copy = df_copy.loc[(df_copy["date"] >= start_dt) & (df_copy["date"] < stop_dt), :] else: - df = df.loc[df["date"] >= timerange.startdt, :] + df_copy = df_copy.loc[df_copy["date"] >= start_dt, :] - return df + return df_copy def find_features(self, dataframe: DataFrame) -> None: """ @@ -449,8 +467,15 @@ class FreqaiDataKitchen: cols = ["date"] cols.extend(user_cols) - dataframe_backtest.reset_index(drop=True, inplace=True) - merged_df = pd.concat([dataframe_backtest[cols], append_df], axis=1) + # 确保日期列的时区一致性,避免时区混用错误 + dataframe_backtest_copy = dataframe_backtest[cols].copy() + if 'date' in dataframe_backtest_copy.columns: + if hasattr(dataframe_backtest_copy['date'], 'dt'): + if dataframe_backtest_copy['date'].dt.tz is not None: + dataframe_backtest_copy['date'] = dataframe_backtest_copy['date'].dt.tz_localize(None) + + dataframe_backtest_copy.reset_index(drop=True, inplace=True) + merged_df = pd.concat([dataframe_backtest_copy, append_df], axis=1) return merged_df def append_predictions(self, append_df: DataFrame) -> None: