Refactor: restructure market module with services, stores, and utils
This commit is contained in:
@@ -0,0 +1,113 @@
|
||||
#!/usr/bin/env python3
|
||||
# -*- coding: utf-8 -*-
|
||||
"""
|
||||
技术分析相关数据结构
|
||||
"""
|
||||
|
||||
from dataclasses import dataclass, field
|
||||
from datetime import datetime
|
||||
from typing import Dict, List, Optional
|
||||
|
||||
|
||||
@dataclass
|
||||
class TechTrendState:
|
||||
"""单周期趋势状态"""
|
||||
symbol: str
|
||||
period: str
|
||||
trend: str = "unknown" # "up" / "down" / "sideways" / "unknown"
|
||||
strength: int = 0 # 0-100
|
||||
adx: float = 0.0
|
||||
ma_fast: float = 0.0
|
||||
ma_slow: float = 0.0
|
||||
price: float = 0.0
|
||||
reason: str = ""
|
||||
timestamp: Optional[str] = None
|
||||
previous_trend: Optional[str] = None
|
||||
change_signal: bool = False
|
||||
|
||||
def to_dict(self) -> Dict:
|
||||
return {
|
||||
"trend": self.trend,
|
||||
"strength": self.strength,
|
||||
"adx": self.adx,
|
||||
"ma_fast": self.ma_fast,
|
||||
"ma_slow": self.ma_slow,
|
||||
"price": self.price,
|
||||
"reason": self.reason,
|
||||
"timestamp": self.timestamp,
|
||||
"previous_trend": self.previous_trend,
|
||||
"change_signal": self.change_signal
|
||||
}
|
||||
|
||||
|
||||
@dataclass
|
||||
class TechTrendChange:
|
||||
"""趋势转换记录"""
|
||||
period: str
|
||||
from_trend: str
|
||||
to_trend: str
|
||||
price: float
|
||||
timestamp: str
|
||||
|
||||
def to_dict(self) -> Dict:
|
||||
return {
|
||||
"period": self.period,
|
||||
"from_trend": self.from_trend,
|
||||
"to_trend": self.to_trend,
|
||||
"price": self.price,
|
||||
"timestamp": self.timestamp
|
||||
}
|
||||
|
||||
|
||||
@dataclass
|
||||
class TechResonanceResult:
|
||||
"""多周期共振结果"""
|
||||
symbol: str
|
||||
resonance: str = "none" # "up" / "down" / "none"
|
||||
strength: int = 0
|
||||
aligned_count: int = 0
|
||||
up_count: int = 0
|
||||
down_count: int = 0
|
||||
sideways_count: int = 0
|
||||
signal: str = "等待数据"
|
||||
periods: Dict = field(default_factory=dict)
|
||||
|
||||
def to_dict(self) -> Dict:
|
||||
return {
|
||||
"resonance": self.resonance,
|
||||
"strength": self.strength,
|
||||
"aligned_count": self.aligned_count,
|
||||
"up_count": self.up_count,
|
||||
"down_count": self.down_count,
|
||||
"sideways_count": self.sideways_count,
|
||||
"signal": self.signal,
|
||||
"periods": {p: s.to_dict() if hasattr(s, 'to_dict') else s for p, s in self.periods.items()}
|
||||
}
|
||||
|
||||
|
||||
@dataclass
|
||||
class TechTradeSuggestion:
|
||||
"""技术分析交易建议"""
|
||||
symbol: str
|
||||
action: str # "b" / "s"
|
||||
price: float
|
||||
sl: float
|
||||
tp: float
|
||||
reason: str
|
||||
trend_strength: int
|
||||
resonance_periods: int
|
||||
generated_at: str
|
||||
|
||||
def to_dict(self) -> Dict:
|
||||
return {
|
||||
"symbol": self.symbol,
|
||||
"action": self.action,
|
||||
"price": self.price,
|
||||
"mount": 0.01, # 默认手数
|
||||
"sl": self.sl,
|
||||
"tp": self.tp,
|
||||
"reason": self.reason,
|
||||
"trend_strength": self.trend_strength,
|
||||
"resonance_periods": self.resonance_periods,
|
||||
"generated_at": self.generated_at
|
||||
}
|
||||
Reference in New Issue
Block a user