重构趋势判断逻辑

This commit is contained in:
zhangkun9038@dingtalk.com 2026-01-31 19:25:28 +08:00
parent 27648a3eb5
commit 59a9990d27

View File

@ -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)
# 条件2EMA50 > 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)
# 条件2EMA50 > 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)
# 条件4EMA趋势辅助
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熊牛权重1015m熊牛权重351h熊牛权重65