redis存储trend_score

This commit is contained in:
zhangkun9038@dingtalk.com 2025-08-14 20:19:03 +08:00
parent 2e23d407ad
commit bf324b06b9

View File

@ -1038,6 +1038,39 @@ class FreqaiPrimer(IStrategy):
logger.error(f"[{pair}] 获取市场趋势失败:{e}", exc_info=True)
return 50
def get_trend_score_with_cache(self, pair: str, timeframe: str, timestamp: int, dataframe: DataFrame, metadata: dict) -> float:
"""
获取趋势得分优先从 Redis 缓存中读取如果缓存未命中则计算并存储到 Redis
"""
import redis
from datetime import datetime
# 创建 Redis 客户端
if not hasattr(self, 'redis_client') and self.redis_url:
self.redis_client = redis.from_url(self.redis_url)
logger.info("✅ Redis 客户端已初始化")
# 生成缓存键
cache_key = f"trend_score:{pair}:{timeframe}:{timestamp}"
# 尝试从 Redis 获取趋势得分
if self.redis_client:
cached_score = self.redis_client.get(cache_key)
if cached_score is not None:
logger.info(f"[{pair}] 从 Redis 缓存中获取 trend_score: {float(cached_score):.2f}")
return float(cached_score)
# 缓存未命中,计算趋势得分
trend_score = self.get_market_trend(dataframe=dataframe, metadata=metadata)
logger.info(f"[{pair}] 计算 trend_score: {trend_score:.2f}")
# 将趋势得分存储到 Redis设置过期时间为 1 天
if self.redis_client:
self.redis_client.setex(cache_key, 86400, trend_score)
logger.info(f"[{pair}] 已将 trend_score 存储到 Rediskey={cache_key}, value={trend_score:.2f}")
return trend_score
def detect_trend_status(self, dataframe: DataFrame, metadata: dict) -> str:
"""
基于加权分段的trend_score判断趋势状态
@ -1060,7 +1093,9 @@ class FreqaiPrimer(IStrategy):
# 获取历史数据片段
hist_df = dataframe.iloc[:i+1] if i != -1 else dataframe
if len(hist_df) > 0:
score = self.get_market_trend(hist_df, metadata)
# 使用新的 get_trend_score_with_cache 方法替代直接调用 get_market_trend
timestamp = int(hist_df.index[-1].timestamp()) # 获取时间戳
score = self.get_trend_score_with_cache(pair=pair, timeframe=self.timeframe, timestamp=timestamp, dataframe=hist_df, metadata=metadata)
trend_scores_20.append(score)
else:
trend_scores_20.append(50) # 默认值