diff --git a/freqtrade/templates/freqaiprimer.py b/freqtrade/templates/freqaiprimer.py index 714f220e..3e3eed8a 100644 --- a/freqtrade/templates/freqaiprimer.py +++ b/freqtrade/templates/freqaiprimer.py @@ -94,9 +94,13 @@ class FreqaiPrimer(IStrategy): bb_length = IntParameter(10, 30, default=20, optimize=True, load=True, space='buy') bb_std = DecimalParameter(1.5, 3.0, decimals=1, default=2.0, optimize=True, load=True, space='buy') rsi_length = IntParameter(7, 21, default=14, optimize=True, load=True, space='buy') - rsi_overbought = IntParameter(50, 70, default=58, optimize=True, load=True, space='buy') + rsi_overbought = IntParameter(50, 70, default=58, optimize=True, load=True, space='sell') rsi_oversold = IntParameter(30, 50, default=42, optimize=True, load=True, space='buy') + # 出场条件阈值参数 + exit_bb_upper_deviation = DecimalParameter(0.98, 1.02, decimals=2, default=1.0, optimize=True, load=True, space='sell') + exit_volume_multiplier = DecimalParameter(1.5, 3.0, decimals=1, default=2.0, optimize=True, load=True, space='sell') + # 入场条件阈值参数 bb_lower_deviation = DecimalParameter(1.01, 1.05, decimals=2, default=1.03, optimize=True, load=True, space='buy') rsi_bull_threshold = IntParameter(45, 55, default=50, optimize=True, load=True, space='buy') @@ -442,16 +446,16 @@ class FreqaiPrimer(IStrategy): def populate_exit_trend(self, dataframe: DataFrame, metadata: dict) -> DataFrame: # 出场信号基于趋势和量价关系 - # 条件1: 价格突破布林带上轨 - breakout_condition = dataframe['close'] >= dataframe['bb_upper_1h'] + # 条件1: 价格突破布林带上轨(使用可优化的偏差参数) + breakout_condition = dataframe['close'] >= dataframe['bb_upper_1h'] * self.exit_bb_upper_deviation.value - # 条件2: 成交量显著放大 - volume_spike = dataframe['volume'] > dataframe['volume_ma'] * 2 + # 条件2: 成交量显著放大(使用可优化的成交量乘数) + volume_spike = dataframe['volume'] > dataframe['volume_ma'] * self.exit_volume_multiplier.value # 条件3: MACD 下降趋势 macd_downward = dataframe['macd_1h'] < dataframe['macd_signal_1h'] - # 条件4: RSI 进入超买区域 + # 条件4: RSI 进入超买区域(使用可优化的超买阈值) rsi_overbought = dataframe['rsi_1h'] > self.rsi_overbought.value # 合并所有条件 @@ -460,6 +464,15 @@ class FreqaiPrimer(IStrategy): # 设置出场信号 dataframe.loc[final_condition, 'exit_long'] = 1 + # 增强调试信息 + logger.info(f"[{metadata['pair']}] 出场条件检查:") + logger.info(f" - 价格突破布林带上轨: {breakout_condition.sum()} 次") + logger.info(f" - 成交量显著放大: {volume_spike.sum()} 次") + logger.info(f" - MACD 下降趋势: {macd_downward.sum()} 次") + logger.info(f" - RSI 超买: {rsi_overbought.sum()} 次") + logger.info(f" - 最终条件: {final_condition.sum()} 次") + logger.info(f" - 使用参数: exit_bb_upper_deviation={self.exit_bb_upper_deviation.value}, exit_volume_multiplier={self.exit_volume_multiplier.value}, rsi_overbought={self.rsi_overbought.value}") + # 日志记录 if dataframe['exit_long'].sum() > 0: logger.info(f"[{metadata['pair']}] 触发出场信号数量: {dataframe['exit_long'].sum()}")