exit条件阈值用hyperopt优化

This commit is contained in:
zhangkun9038@dingtalk.com 2025-09-08 16:45:25 +08:00
parent 3ec7807d9e
commit 590e2469d4

View File

@ -94,9 +94,13 @@ class FreqaiPrimer(IStrategy):
bb_length = IntParameter(10, 30, default=20, optimize=True, load=True, space='buy') 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') 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_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') 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') 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') 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: def populate_exit_trend(self, dataframe: DataFrame, metadata: dict) -> DataFrame:
# 出场信号基于趋势和量价关系 # 出场信号基于趋势和量价关系
# 条件1: 价格突破布林带上轨 # 条件1: 价格突破布林带上轨(使用可优化的偏差参数)
breakout_condition = dataframe['close'] >= dataframe['bb_upper_1h'] breakout_condition = dataframe['close'] >= dataframe['bb_upper_1h'] * self.exit_bb_upper_deviation.value
# 条件2: 成交量显著放大 # 条件2: 成交量显著放大(使用可优化的成交量乘数)
volume_spike = dataframe['volume'] > dataframe['volume_ma'] * 2 volume_spike = dataframe['volume'] > dataframe['volume_ma'] * self.exit_volume_multiplier.value
# 条件3: MACD 下降趋势 # 条件3: MACD 下降趋势
macd_downward = dataframe['macd_1h'] < dataframe['macd_signal_1h'] macd_downward = dataframe['macd_1h'] < dataframe['macd_signal_1h']
# 条件4: RSI 进入超买区域 # 条件4: RSI 进入超买区域(使用可优化的超买阈值)
rsi_overbought = dataframe['rsi_1h'] > self.rsi_overbought.value rsi_overbought = dataframe['rsi_1h'] > self.rsi_overbought.value
# 合并所有条件 # 合并所有条件
@ -460,6 +464,15 @@ class FreqaiPrimer(IStrategy):
# 设置出场信号 # 设置出场信号
dataframe.loc[final_condition, 'exit_long'] = 1 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: if dataframe['exit_long'].sum() > 0:
logger.info(f"[{metadata['pair']}] 触发出场信号数量: {dataframe['exit_long'].sum()}") logger.info(f"[{metadata['pair']}] 触发出场信号数量: {dataframe['exit_long'].sum()}")