You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
buffer_platform/app/analysis_models.py

102 lines
4.8 KiB

"""
期货智析数据模型
"""
from datetime import datetime
from sqlalchemy import Column, String, Integer, Float, Text, DateTime, Boolean, Index, UniqueConstraint, JSON
from app.analysis_db import AnalysisBase
class FuturesAnalysis(AnalysisBase):
"""期货分析报告表"""
__tablename__ = "futures_analysis"
id = Column(Integer, primary_key=True, autoincrement=True)
symbol = Column(String(32), nullable=False, index=True, comment="品种合约代码")
analysis_time = Column(DateTime, nullable=False, default=datetime.now, index=True, comment="分析时间")
period = Column(String(16), nullable=False, default="15min", comment="分析周期")
# 分析结果
suggestion = Column(String(32), nullable=True, comment="交易建议: 逢低做多/逢高做空/观望等待")
suggestion_type = Column(String(16), nullable=True, comment="建议类型: up/down/neutral")
entry_price = Column(Float, nullable=True, comment="建议入场价")
target_price = Column(Float, nullable=True, comment="目标价位")
stop_loss = Column(Float, nullable=True, comment="止损价位")
risk_level = Column(String(16), nullable=True, comment="风险等级: 低/中/高")
# 技术指标
macd_signal = Column(String(16), nullable=True, comment="MACD信号")
rsi_value = Column(Float, nullable=True, comment="RSI值")
boll_signal = Column(String(16), nullable=True, comment="布林带信号")
kdj_signal = Column(String(16), nullable=True, comment="KDJ信号")
# 趋势评分
trend_score = Column(Integer, nullable=True, comment="趋势评分 0-100")
success_rate = Column(Float, nullable=True, comment="交易成功率")
# 关键点位
resistance_levels = Column(JSON, nullable=True, comment="压力位列表")
support_levels = Column(JSON, nullable=True, comment="支撑位列表")
# 多周期趋势
period_trends = Column(JSON, nullable=True, comment="各周期趋势")
def __repr__(self):
return f"<FuturesAnalysis {self.symbol} {self.analysis_time}>"
class WatchedSymbol(AnalysisBase):
"""用户关注品种表"""
__tablename__ = "watched_symbols"
id = Column(Integer, primary_key=True, autoincrement=True)
symbol = Column(String(32), nullable=False, unique=True, comment="品种合约代码")
name = Column(String(64), nullable=True, comment="品种名称")
note = Column(Text, nullable=True, comment="备注")
created_at = Column(DateTime, nullable=False, default=datetime.now)
updated_at = Column(DateTime, nullable=False, default=datetime.now, onupdate=datetime.now)
def __repr__(self):
return f"<WatchedSymbol {self.symbol}>"
class AIModelConfig(AnalysisBase):
"""AI模型配置表"""
__tablename__ = "ai_model_configs"
id = Column(Integer, primary_key=True, autoincrement=True)
provider = Column(String(32), nullable=False, comment="AI提供商: openai/anthropic/google等")
model_name = Column(String(64), nullable=False, comment="模型名称")
api_key = Column(String(256), nullable=False, comment="API密钥")
api_base = Column(String(256), nullable=True, comment="API基础URL")
model_id = Column(String(64), nullable=True, comment="模型ID")
temperature = Column(Float, nullable=True, default=0.7, comment="温度参数")
max_tokens = Column(Integer, nullable=True, default=2000, comment="最大输出token")
enabled = Column(Boolean, nullable=False, default=True, comment="是否启用")
is_active = Column(Boolean, nullable=False, default=False, comment="是否为当前活跃模型")
created_at = Column(DateTime, nullable=False, default=datetime.now)
updated_at = Column(DateTime, nullable=False, default=datetime.now, onupdate=datetime.now)
def __repr__(self):
return f"<AIModelConfig {self.provider} {self.model_name}>"
class AnalysisSettings(AnalysisBase):
"""分析设置表(单例配置)"""
__tablename__ = "analysis_settings"
id = Column(Integer, primary_key=True, autoincrement=True)
key = Column(String(64), nullable=False, unique=True, comment="配置键")
value = Column(JSON, nullable=False, comment="配置值")
updated_at = Column(DateTime, nullable=False, default=datetime.now, onupdate=datetime.now)
def __repr__(self):
return f"<AnalysisSettings {self.key}>"
class AIAnalysisCache(AnalysisBase):
"""AI分析缓存表"""
__tablename__ = "ai_analysis_cache"
id = Column(Integer, primary_key=True, autoincrement=True)
symbol = Column(String(32), nullable=False, index=True, comment="品种合约代码")
analysis_data = Column(JSON, nullable=False, comment="AI分析结果数据")
created_at = Column(DateTime, nullable=False, default=datetime.now, index=True, comment="分析时间")
def __repr__(self):
return f"<AIAnalysisCache {self.symbol} {self.created_at}>"