redis存储trend_score
This commit is contained in:
parent
2e23d407ad
commit
bf324b06b9
@ -1038,6 +1038,39 @@ class FreqaiPrimer(IStrategy):
|
|||||||
logger.error(f"[{pair}] 获取市场趋势失败:{e}", exc_info=True)
|
logger.error(f"[{pair}] 获取市场趋势失败:{e}", exc_info=True)
|
||||||
return 50
|
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 存储到 Redis,key={cache_key}, value={trend_score:.2f}")
|
||||||
|
|
||||||
|
return trend_score
|
||||||
|
|
||||||
def detect_trend_status(self, dataframe: DataFrame, metadata: dict) -> str:
|
def detect_trend_status(self, dataframe: DataFrame, metadata: dict) -> str:
|
||||||
"""
|
"""
|
||||||
基于加权分段的trend_score判断趋势状态
|
基于加权分段的trend_score判断趋势状态
|
||||||
@ -1060,7 +1093,9 @@ class FreqaiPrimer(IStrategy):
|
|||||||
# 获取历史数据片段
|
# 获取历史数据片段
|
||||||
hist_df = dataframe.iloc[:i+1] if i != -1 else dataframe
|
hist_df = dataframe.iloc[:i+1] if i != -1 else dataframe
|
||||||
if len(hist_df) > 0:
|
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)
|
trend_scores_20.append(score)
|
||||||
else:
|
else:
|
||||||
trend_scores_20.append(50) # 默认值
|
trend_scores_20.append(50) # 默认值
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user