exit条件阈值用hyperopt优化
This commit is contained in:
parent
3ec7807d9e
commit
590e2469d4
@ -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()}")
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user