diff --git a/backend/api/routes/recommendations.py b/backend/api/routes/recommendations.py index 16aadc9..f89afa5 100644 --- a/backend/api/routes/recommendations.py +++ b/backend/api/routes/recommendations.py @@ -366,7 +366,15 @@ async def get_recommendations( # 限制返回数量 recommendations = recommendations[:limit] - + # 合约推荐为空时给出排查提示(与现货独立:现货来自定时扫描,合约来自策略/推荐服务) + hint = None + if len(recommendations) == 0: + hint = ( + "合约推荐来自策略扫描:需信号强度≥5且方向明确才会写入。" + "若长期为空,请检查:1) 推荐服务(recommendations_main)或主策略(main)是否在运行;" + "2) 扫描日志中是否有「信号:N」≥5 的标的;3) 是否有推荐被时间/价格偏离过滤掉(见 meta.dropped)。" + ) + return { "success": True, "count": len(recommendations), @@ -384,6 +392,7 @@ async def get_recommendations( "price_drift": dropped_drift, "invalid": dropped_invalid, }, + "hint": hint, }, "data": recommendations } diff --git a/frontend/src/components/Recommendations.jsx b/frontend/src/components/Recommendations.jsx index e6b1420..71b65b8 100644 --- a/frontend/src/components/Recommendations.jsx +++ b/frontend/src/components/Recommendations.jsx @@ -22,7 +22,8 @@ function Recommendations() { const [bookmarking, setBookmarking] = useState({}) // 记录正在标记的推荐ID const [ordering, setOrdering] = useState({}) // 记录正在下单的推荐ID const [marketType, setMarketType] = useState('futures') // 'futures' | 'spot' - + const [recommendationMeta, setRecommendationMeta] = useState(null) // 合约实时推荐的 meta(含 hint/dropped) + // 获取默认下单保证金(按账号存储,单位:USDT);现货时表示下单金额(USDT) const getDefaultOrderSize = () => { try { @@ -108,6 +109,7 @@ function Recommendations() { const result = await api.getSpotRecommendations({ limit: 50 }) const data = result.data || [] setRecommendations(data) + setRecommendationMeta(null) } else { const params = { type: typeFilter } if (typeFilter === 'bookmarked') { @@ -122,6 +124,7 @@ function Recommendations() { const result = await api.getRecommendations(params) const data = result.data || [] setRecommendations(data) + setRecommendationMeta(result.meta || null) } } catch (err) { setError(err.message) @@ -541,6 +544,11 @@ function Recommendations() { ) : recommendations.length === 0 ? (
暂无推荐记录
+ {marketType === 'futures' && typeFilter === 'realtime' && recommendationMeta?.hint && ( ++ {recommendationMeta.hint} +
+ )}