diff --git a/freqtrade/templates/freqaiprimer.py b/freqtrade/templates/freqaiprimer.py index 95786fca..fce11d3e 100644 --- a/freqtrade/templates/freqaiprimer.py +++ b/freqtrade/templates/freqaiprimer.py @@ -96,6 +96,15 @@ class FreqaiPrimer(IStrategy): pairs = self.dp.current_whitelist() return [(pair, '15m') for pair in pairs] + [(pair, '1h') for pair in pairs] + def _validate_dataframe_columns(self, dataframe: DataFrame, required_columns: list, metadata: dict): + """ + 验证数据框中是否包含所有需要的列。 + 如果缺少列,则记录警告日志。 + """ + missing_columns = [col for col in required_columns if col not in dataframe.columns] + if missing_columns: + logger.warning(f"[{metadata['pair']}] 数据框中缺少以下列: {missing_columns}") + def populate_indicators(self, dataframe: DataFrame, metadata: dict) -> DataFrame: # 计算 3m 周期的指标 bb_3m = ta.bbands(dataframe['close'], length=self.bb_length, std=self.bb_std) @@ -185,6 +194,11 @@ class FreqaiPrimer(IStrategy): df_1h = df_1h.rename(columns={'index': 'date'}) df_1h = df_1h[['date', 'rsi_1h', 'trend_1h', 'ema_50_1h', 'ema_200_1h', 'bb_lower_1h', 'bb_upper_1h', 'stochrsi_k_1h', 'stochrsi_d_1h']].fillna(method='ffill') + # 确保所有需要的列都被合并 + df_1h = df_1h[['date', 'rsi_1h', 'trend_1h', 'ema_50_1h', 'ema_200_1h', + 'bb_lower_1h', 'bb_upper_1h', 'stochrsi_k_1h', 'stochrsi_d_1h', + 'macd_1h', 'macd_signal_1h']] # 确保包含 macd_1h 和 macd_signal_1h + # 合并 1h 数据 dataframe = dataframe.merge(df_1h, how='left', on='date').fillna(method='ffill') @@ -241,6 +255,9 @@ class FreqaiPrimer(IStrategy): 'trend_3m', 'trend_15m', 'trend_1h_ema', 'market_score', 'market_state', 'bullish_engulfing', 'volume', 'volume_ma']].tail(5)) + # 打印最终数据框的列名以验证 + logger.info(f"[{metadata['pair']}] 最终数据框列名: {list(dataframe.columns)}") + return dataframe def populate_entry_trend(self, dataframe: DataFrame, metadata: dict) -> DataFrame: