From 2220b04ea4753cf26c6cdbb4fedda1de93a864cd Mon Sep 17 00:00:00 2001 From: "zhangkun9038@dingtalk.com" Date: Thu, 26 Feb 2026 02:02:42 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E8=B6=8B=E5=8A=BF=E8=B7=9F?= =?UTF-8?q?=E8=B8=AA=E5=85=A5=E5=9C=BA=E9=80=BB=E8=BE=91,=20=E4=BF=9D?= =?UTF-8?q?=E6=8C=81=E5=8E=9F=E6=9C=89=E8=B6=85=E5=8D=96=E5=8F=8D=E5=BC=B9?= =?UTF-8?q?=E5=85=A5=E5=9C=BA=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- freqtrade/templates/freqaiprimer.py | 34 ++++++++++++++++++++++++----- 1 file changed, 28 insertions(+), 6 deletions(-) diff --git a/freqtrade/templates/freqaiprimer.py b/freqtrade/templates/freqaiprimer.py index 1aa2e242..ac5b135c 100644 --- a/freqtrade/templates/freqaiprimer.py +++ b/freqtrade/templates/freqaiprimer.py @@ -1081,12 +1081,32 @@ class FreqaiPrimer(IStrategy): (volume_spike | bb_width_condition).astype(int) + # 成交量或布林带宽度满足其一即可 trend_confirmation.astype(int) ) - # 新增:价格必须低于15分钟EMA20的条件 - price_below_ema20_15m = dataframe['close'] < dataframe['ema_20_15m'] - # 最终条件:基本条件 + EMA趋势过滤 + 价格低于15分钟EMA20(方案2:宽松版) + # 条件1:超卖反弹入场(原逻辑) + # 要求:基本条件满足 + EMA趋势过滤 + 价格低于15分钟EMA20 + price_below_ema20_15m = dataframe['close'] < dataframe['ema_20_15m'] basic_condition = condition_count >= self.min_condition_count.value - final_condition = basic_condition & ema_trend_filter & price_below_ema20_15m + pullback_entry = basic_condition & ema_trend_filter & price_below_ema20_15m + + # 条件2:趋势跟踪入场(新增逻辑) + # 不要求价格低于EMA20,而是要求: + # - EMA趋势过滤满足 + # - MACD上升趋势 + # - 趋势确认(3m或15m趋势向上) + # - 价格高于15分钟EMA20(表明处于上涨趋势) + price_above_ema20_15m = dataframe['close'] >= dataframe['ema_20_15m'] + # 趋势跟踪需要的条件数量较少,因为已经在明显上涨趋势中 + trend_condition_count = ( + macd_condition_1h.astype(int) + + trend_confirmation.astype(int) + + (volume_spike | bb_width_condition).astype(int) + ) + # 趋势跟踪只需要满足2个条件即可,降低门槛 + trend_basic_condition = trend_condition_count >= 2 + trend_following_entry = trend_basic_condition & ema_trend_filter & price_above_ema20_15m + + # 最终条件:超卖反弹入场 或 趋势跟踪入场 + final_condition = pullback_entry | trend_following_entry # 设置入场信号 dataframe.loc[final_condition, 'enter_long'] = 1 @@ -1166,10 +1186,12 @@ class FreqaiPrimer(IStrategy): self.strategy_log(f" - MACD 上升趋势: {macd_condition_1h.sum()} 次") self.strategy_log(f" - 成交量或布林带宽度: {(volume_spike | bb_width_condition).sum()} 次") self.strategy_log(f" - 价格低于15分钟EMA20: {price_below_ema20_15m.sum()} 次") + self.strategy_log(f" - 价格高于15分钟EMA20: {price_above_ema20_15m.sum()} 次") self.strategy_log(f" - 趋势确认: {trend_confirmation.sum()} 次") self.strategy_log(f" - EMA趋势过滤(在上方或20根K线内穿越): {ema_trend_count} 次") - self.strategy_log(f" - 基本条件满足: {basic_condition_count} 次") - self.strategy_log(f" - 最终条件(基本+EMA过滤): {final_condition_count} 次") + self.strategy_log(f" - 超卖反弹入场信号: {pullback_entry.sum()} 次") + self.strategy_log(f" - 趋势跟踪入场信号: {trend_following_entry.sum()} 次") + self.strategy_log(f" - 最终入场信号(总计): {final_condition.sum()} 次") # ========== 新增:最近5个时间点的条件满足状况可视化 ========== # 显示最近5个时间点的条件满足情况(更直观)