diff --git a/freqtrade/templates/freqaiprimer.py b/freqtrade/templates/freqaiprimer.py index ebe225a7..36ff0273 100644 --- a/freqtrade/templates/freqaiprimer.py +++ b/freqtrade/templates/freqaiprimer.py @@ -638,15 +638,52 @@ class FreqaiPrimer(IStrategy): (dataframe['open'] < dataframe['close'].shift(1)) ) - # 计算各时间框架的趋势状态(牛/熊) - # 3m时间框架:ema50下穿ema200为熊,上穿为牛 - dataframe['trend_3m'] = np.where(dataframe['ema_50_3m'] > dataframe['ema_200_3m'], 1, 0) + # 计算各时间框架的趋势状态(牛/熊)- 增强版V2:优先价格动量 + # 原问题:EMA滞后严重,导致下跌市场仍判断为牛市 + # 新方案:以价格实际涨跌为主,EMA为辅 - # 15m时间框架:ema50下穿ema200为熊,上穿为牛 - dataframe['trend_15m'] = np.where(dataframe['ema_50_15m'] > dataframe['ema_200_15m'], 1, 0) + # === 3m时间框架趋势判断(价格动量主导)=== + # 条件1:价格动量(最近20根K线 = 1小时)- 主要指标 + price_momentum_3m = dataframe['close'].pct_change(20) + momentum_bullish_3m = (price_momentum_3m > 0).astype(int) + # 条件2:EMA50 > EMA200(长期趋势)- 辅助指标 + ema_trend_3m = (dataframe['ema_50_3m'] > dataframe['ema_200_3m']).astype(int) + # 综合判断:价格动量权重0.7 + EMA趋势权重0.3(价格优先) + dataframe['trend_3m'] = (momentum_bullish_3m * 0.7 + ema_trend_3m * 0.3).clip(0, 1) - # 1h时间框架:ema50下穿ema200为熊,上穿为牛 - dataframe['trend_1h_ema'] = np.where(dataframe['ema_50_1h'] > dataframe['ema_200_1h'], 1, 0) + # === 15m时间框架趋势判断(价格动量主导)=== + # 条件1:价格动量(最近12根K线 = 3小时) + price_momentum_15m = dataframe['close'].pct_change(12) + momentum_bullish_15m = (price_momentum_15m > 0).astype(int) + # 条件2:EMA50 > EMA200 + ema_trend_15m = (dataframe['ema_50_15m'] > dataframe['ema_200_15m']).astype(int) + # 综合判断:价格动量0.7 + EMA0.3 + dataframe['trend_15m'] = (momentum_bullish_15m * 0.7 + ema_trend_15m * 0.3).clip(0, 1) + + # === 1h时间框架趋势判断(多周期价格动量)⭐核心 === + # 条件1:长期价格动量(最近24根K线 = 1天)- 核心指标 + price_momentum_1h_long = dataframe['close'].pct_change(24) + momentum_long_bullish = (price_momentum_1h_long > 0).astype(int) + + # 条件2:中期价格动量(最近12根K线 = 12小时) + price_momentum_1h_mid = dataframe['close'].pct_change(12) + momentum_mid_bullish = (price_momentum_1h_mid > 0).astype(int) + + # 条件3:短期价格动量(最近5根K线 = 5小时) + price_momentum_1h_short = dataframe['close'].pct_change(5) + momentum_short_bullish = (price_momentum_1h_short > 0).astype(int) + + # 条件4:EMA趋势(辅助) + ema_trend_1h = (dataframe['ema_50_1h'] > dataframe['ema_200_1h']).astype(int) + + # 综合判断:长期动量0.35 + 中期动量0.30 + 短期动量0.25 + EMA0.10 + # 价格动量合计90%,EMA仅10%(大幅降低EMA权重) + dataframe['trend_1h_ema'] = ( + momentum_long_bullish * 0.35 + + momentum_mid_bullish * 0.30 + + momentum_short_bullish * 0.25 + + ema_trend_1h * 0.10 + ).clip(0, 1) # 计算熊牛得分(0-100) # 权重:3m熊牛权重10,15m熊牛权重35,1h熊牛权重65