optimize params

This commit is contained in:
Ubuntu 2025-10-20 13:03:59 +08:00
parent 47b8313037
commit 762df7db01

View File

@ -86,30 +86,30 @@ class FreqaiPrimer(IStrategy):
# 第一步 buy 空间优化参数 7个:
# --- 趋势与信号生成 ---
bb_length = IntParameter(10, 30, default=14, optimize=True, load=True, space='buy')
bb_std = DecimalParameter(1.5, 3.0, decimals=1, default=3.0, optimize=True, load=True, space='buy')
rsi_length = IntParameter(7, 21, default=16, optimize=True, load=True, space='buy')
bb_length = IntParameter(10, 30, default=14, optimize=False, load=True, space='buy')
bb_std = DecimalParameter(1.5, 3.0, decimals=1, default=3.0, optimize=False, load=True, space='buy')
rsi_length = IntParameter(7, 21, default=16, optimize=False, load=True, space='buy')
# 入场条件阈值
bb_lower_deviation = DecimalParameter(1.01, 1.05, decimals=2, default=1.05, optimize=True, load=True, space='buy')
rsi_oversold = IntParameter(30, 50, default=42, optimize=True, load=True, space='buy')
volume_multiplier = DecimalParameter(1.2, 2.0, decimals=1, default=1.6, optimize=True, load=True, space='buy')
bb_width_threshold = DecimalParameter(0.01, 0.03, decimals=3, default=0.012, optimize=True, load=True, space='buy')
bb_lower_deviation = DecimalParameter(1.01, 1.05, decimals=2, default=1.05, optimize=False, load=True, space='buy')
rsi_oversold = IntParameter(30, 50, default=42, optimize=False, load=True, space='buy')
volume_multiplier = DecimalParameter(1.2, 2.0, decimals=1, default=1.6, optimize=False, load=True, space='buy')
bb_width_threshold = IntParameter(10, 30, default=12, optimize=False, load=True, space='buy')
# 剧烈拉升检测参数 - 使用Hyperopt可优化参数
h1_rapid_rise_threshold = DecimalParameter(0.05, 0.15, decimals=3, default=0.065, optimize=True, load=True, space='buy')
h1_rapid_rise_threshold = DecimalParameter(0.05, 0.15, decimals=3, default=0.065, optimize=False, load=True, space='buy')
# 第二步 buy 空间优化参数 7个:
# --- 资金管理与加仓 ---
add_position_callback = DecimalParameter(0.03, 0.06, decimals=3, default=0.028, optimize=False, load=True, space='buy')
add_position_callback = IntParameter(30, 60, default=28, optimize=True, load=True, space='buy')
# 合并step_coefficient和stake_divisor为multiplier参数
adjust_multiplier = DecimalParameter(0.15, 0.6, decimals=2, default=0.52, optimize=False, load=True, space='buy')
max_entry_adjustments = IntParameter(2, 5, default=2, optimize=False, load=True, space='buy') # 可暂时关闭
adjust_multiplier = DecimalParameter(0.15, 0.6, decimals=2, default=0.52, optimize=True, load=True, space='buy')
max_entry_adjustments = IntParameter(2, 5, default=2, optimize=True, load=True, space='buy') # 可暂时关闭
# 市场状态相关(辅助决策)
min_condition_count = IntParameter(2, 4, default=2, optimize=False, load=True, space='buy')
stochrsi_neutral_threshold = IntParameter(20, 30, default=29, optimize=False, load=True, space='buy') # 固定为20
stochrsi_bull_threshold = IntParameter(30, 40, default=36, optimize=False, load=True, space='buy')
rsi_bull_threshold = IntParameter(45, 55, default=54, optimize=False, load=True, space='buy') # 固定为50
stochrsi_neutral_threshold = IntParameter(20, 30, default=29, optimize=True, load=True, space='buy') # 固定为20
stochrsi_bull_threshold = IntParameter(30, 40, default=36, optimize=True, load=True, space='buy')
rsi_bull_threshold = IntParameter(45, 55, default=54, optimize=True, load=True, space='buy') # 固定为50
# 第三步, 优化sell空间
exit_bb_upper_deviation = DecimalParameter(0.98, 1.02, decimals=2, default=0.99, optimize=True, load=True, space='sell')
@ -395,7 +395,7 @@ class FreqaiPrimer(IStrategy):
# 条件6: 布林带宽度过滤(避免窄幅震荡)
bb_width = (dataframe['bb_upper_1h'] - dataframe['bb_lower_1h']) / dataframe['close']
bb_width_condition = bb_width > self.bb_width_threshold.value # 可优化的布林带宽度阈值
bb_width_condition = bb_width > self.bb_width_threshold.value / 1000 # 可优化的布林带宽度阈值
# 辅助条件: 3m 和 15m 趋势确认(允许部分时间框架不一致)
trend_confirmation = (dataframe['trend_3m'] == 1) | (dataframe['trend_15m'] == 1)
@ -618,12 +618,12 @@ class FreqaiPrimer(IStrategy):
initial_price = trade.open_rate
if initial_price == 0:
return 0.0
if current_profit > -self.add_position_callback.value:
if current_profit > - self.add_position_callback.value / 100 :
return 0.0
price_diff_pct = (current_rate - initial_price) / initial_price
if (price_diff_pct/(entry_count)) <= -self.add_position_callback.value:
if (price_diff_pct/(entry_count)) <= - self.add_position_callback.value / 100 :
initial_stake = trade.orders[0].cost
additional_stake = (self.adjust_multiplier.value * initial_stake) ** (entry_count)
additional_stake = max(min_stake, min(additional_stake, max_stake - trade.stake_amount))