diff --git a/freqtrade/templates/freqaiprimer.json b/freqtrade/templates/freqaiprimer.json index bbba52f9..0c8c74a4 100644 --- a/freqtrade/templates/freqaiprimer.json +++ b/freqtrade/templates/freqaiprimer.json @@ -18,33 +18,33 @@ "add_position_callback": 0.043, "add_position_growth": 4.5, "add_position_multiplier": 0.86, + "max_entry_adjustments": 4, "stake_divisor": 9.3, - "bb_length": 30, - "bb_lower_deviation": 1.05, - "bb_std": 2.7, - "bb_width_threshold": 0.016, - "h1_max_candles": 173, - "h1_max_consecutive_candles": 2, - "h1_rapid_rise_threshold": 0.061, - "max_entry_adjustments": 3, - "min_condition_count": 3, - "rsi_bull_threshold": 50, - "rsi_length": 17, - "rsi_oversold": 49, - "stochrsi_bull_threshold": 32, - "stochrsi_neutral_threshold": 24, - "volume_multiplier": 1.8 + "bb_length": 19, + "bb_lower_deviation": 1.04, + "bb_std": 3.0, + "bb_width_threshold": 0.026, + "h1_max_candles": 290, + "h1_max_consecutive_candles": 3, + "h1_rapid_rise_threshold": 0.078, + "min_condition_count": 2, + "rsi_bull_threshold": 45, + "rsi_length": 16, + "rsi_oversold": 42, + "stochrsi_bull_threshold": 31, + "stochrsi_neutral_threshold": 22, + "volume_multiplier": 1.2 }, "sell": { - "exit_bb_upper_deviation": 1.01, - "exit_volume_multiplier": 2.0, - "roi_param_a": -5e-05, - "roi_param_k": 148, - "roi_param_t": 0.144, - "rsi_overbought": 64 + "exit_bb_upper_deviation": 0.98, + "exit_volume_multiplier": 1.5, + "roi_param_a": -0.00012, + "roi_param_k": 78, + "roi_param_t": 0.12, + "rsi_overbought": 69 }, "protection": {} }, "ft_stratparam_v": 1, - "export_time": "2025-09-26 04:37:10.245352+00:00" + "export_time": "2025-09-28 05:08:17.958148+00:00" } \ No newline at end of file diff --git a/freqtrade/templates/freqaiprimer.py b/freqtrade/templates/freqaiprimer.py index 8b633e88..a0a4a015 100644 --- a/freqtrade/templates/freqaiprimer.py +++ b/freqtrade/templates/freqaiprimer.py @@ -260,7 +260,7 @@ class FreqaiPrimer(IStrategy): max_entry_adjustments = IntParameter(2, 5, default=3, optimize=True, load=True, space='buy') # 最大加仓次数 add_position_callback = DecimalParameter(0.02, 0.06, decimals=3, default=0.045, optimize=True, load=True, space='buy') # 加仓回调百分比 add_position_growth = DecimalParameter(1.5, 3.0, decimals=2, default=4.5, optimize=False, load=True, space='buy') # 加仓金额增长因子,保留2位小数用于hyperopt优化 - add_position_multiplier = DecimalParameter(0.2, 10.5, decimals=2, default=1.22, optimize=False, load=True, space='buy') # 加仓间隔系数,保留2位小数用于hyperopt优化 + add_position_multiplier = DecimalParameter(0.2, 10.5, decimals=2, default=0.86, optimize=False, load=True, space='buy') # 加仓间隔系数,保留2位小数用于hyperopt优化 stake_divisor = DecimalParameter(2.0, 12.0, decimals=2, default=9.3, optimize=False, load=True, space='buy') # 加仓金额分母(小数类型,保留2位小数) # 线性ROI参数 - 用于线性函数: y = (a * (x + k)) + t @@ -835,6 +835,11 @@ class FreqaiPrimer(IStrategy): # 获取默认的基础仓位大小 default_stake = self.stake_amount + + # 从kwargs获取最小和最大仓位限制 + min_stake = kwargs.get('min_stake', 0.0) + max_stake = kwargs.get('max_stake', default_stake) + # 根据波动系数调整仓位大小 # 波动率与仓位大小成反比关系 @@ -847,7 +852,7 @@ class FreqaiPrimer(IStrategy): adjusted_stake = default_stake # 确保调整后的仓位在允许的范围内 - adjusted_stake = max(self.min_stake_amount, min(adjusted_stake, self.stake_amount)) + adjusted_stake = max(min_stake, min(adjusted_stake, max_stake)) #logger.info(f"[{pair}] 基于波动系数调整仓位: 波动系数={volatility_coef:.2f}, 默认仓位={default_stake:.2f}, 调整后仓位={adjusted_stake:.2f}")