56 lines
1.8 KiB
Python
56 lines
1.8 KiB
Python
#!/usr/bin/env python3
|
|
# -*- coding: utf-8 -*-
|
|
"""
|
|
LLM 分析结果数据结构
|
|
"""
|
|
|
|
from dataclasses import dataclass, field
|
|
from datetime import datetime
|
|
from typing import Dict, List, Optional
|
|
|
|
|
|
@dataclass
|
|
class LLMAnalysisResult:
|
|
"""LLM 分析结果"""
|
|
symbol: str
|
|
trend_analysis: Dict = field(default_factory=dict)
|
|
overall_trend: Optional[Dict] = None
|
|
key_levels: Optional[Dict] = None
|
|
trade_suggestions: List[Dict] = field(default_factory=list)
|
|
analyzed_at: Optional[str] = None
|
|
data_stale: bool = False
|
|
market_status: str = "active" # active, stale, closed
|
|
|
|
def to_dict(self) -> Dict:
|
|
"""转换为字典"""
|
|
return {
|
|
"symbol": self.symbol,
|
|
"trend_analysis": self.trend_analysis,
|
|
"overall_trend": self.overall_trend,
|
|
"key_levels": self.key_levels,
|
|
"trade_suggestions": self.trade_suggestions,
|
|
"analyzed_at": self.analyzed_at,
|
|
"data_stale": self.data_stale,
|
|
"market_status": self.market_status
|
|
}
|
|
|
|
@classmethod
|
|
def from_api_response(cls, symbol: str, data: Dict) -> 'LLMAnalysisResult':
|
|
"""从 LLM API 返回的字典创建"""
|
|
return cls(
|
|
symbol=symbol,
|
|
trend_analysis=data.get("trend_analysis", {}),
|
|
overall_trend=data.get("overall_trend"),
|
|
key_levels=data.get("key_levels"),
|
|
trade_suggestions=data.get("trade_suggestions", []),
|
|
analyzed_at=datetime.now().isoformat(),
|
|
data_stale=False,
|
|
market_status="active"
|
|
)
|
|
|
|
def get_trade_suggestion(self, period: str) -> Optional[Dict]:
|
|
"""获取指定周期的交易建议"""
|
|
for ts in self.trade_suggestions:
|
|
if ts.get("period") == period:
|
|
return ts
|
|
return None |