diff --git a/freqtrade/templates/freqaiprimer.py b/freqtrade/templates/freqaiprimer.py index 5da2a98d..3b08bed3 100644 --- a/freqtrade/templates/freqaiprimer.py +++ b/freqtrade/templates/freqaiprimer.py @@ -1264,9 +1264,29 @@ class FreqaiPrimer(IStrategy): # 计算当前加仓阈值:config中的ADD_POSITION_THRESHOLD × (递进系数^加仓次数) current_add_threshold = self.ADD_POSITION_THRESHOLD * (self.ADD_PROGRESSION_FACTOR ** add_count) - # 统一加仓逻辑(移除所有趋势判断) + # 计算从上一次加仓以来的跌幅(使用正确的基准) + if add_count > 0: + # 有加仓记录,使用最后一次加仓价作为基准 + last_entry_price = trade.orders[-1].safe_price if trade.orders else trade.open_rate + drop_since_last_entry = (current_rate - last_entry_price) / last_entry_price + drop_baseline = drop_since_last_entry + logger.info(f"{pair} 第{add_count}次加仓后跌幅: {drop_since_last_entry*100:.2f}% (基于上次加仓价)") + else: + # 首次加仓,使用初始入场价 + drop_baseline = profit_ratio + logger.info(f"{pair} 首次加仓跌幅: {profit_ratio*100:.2f}% (基于初始入场价)") + + # 统一加仓逻辑(增加冷却期检查) if trade.nr_of_successful_entries <= max_entry_adjustments + 1: - if profit_ratio <= current_add_threshold and hold_time > 5: # 仅检查跌幅和时间 + # 检查加仓冷却期(至少10分钟) + if trade.orders: + last_order_time = trade.orders[-1].order_date_utc + time_since_last_add = (current_time - last_order_time).total_seconds() / 60 + if time_since_last_add < 10: # 10分钟冷却期 + logger.info(f"{pair} 加仓冷却期中,{10 - time_since_last_add:.1f}分钟后可再次加仓") + return None + + if drop_baseline <= current_add_threshold and hold_time > 5: # 使用正确跌幅基准 # 统一加仓倍数 multipliers = [1, 2, 4, 8] # 固定倍数序列 [首次, 第二次, 第三次, 第四次]