"""SQLAlchemy ORM 模型""" from sqlalchemy import Column, Integer, String, Float, ForeignKey, Text from sqlalchemy.orm import relationship from app.database import Base class MarketRegime(Base): """大盘阶段""" __tablename__ = "market_regime" id = Column(Integer, primary_key=True, autoincrement=True) name = Column(String, nullable=False, unique=True) trade_type = Column(String, nullable=False) # 顺势 / 反转 / 观望 allow_direction = Column(String, nullable=False) # 做多 / 做空 / 禁止 / 多空均可 remark = Column(Text, default="") matches = relationship("RegimeMatch", back_populates="regime", cascade="all, delete-orphan") class Account(Base): """交易账户""" __tablename__ = "account" id = Column(Integer, primary_key=True, autoincrement=True) account_name = Column(String, nullable=False) total_capital = Column(Float, nullable=False, default=100) trade_cycle = Column(String, nullable=False) risk_ratio = Column(String, nullable=False) enable = Column(Integer, nullable=False, default=1) remark = Column(Text, default="") matches = relationship("RegimeMatch", back_populates="account", cascade="all, delete-orphan") class Strategy(Base): """交易策略(规则文本仅展示,系统不做校验)""" __tablename__ = "strategy" id = Column(Integer, primary_key=True, autoincrement=True) strategy_name = Column(String, nullable=False) fit_cycle = Column(String, nullable=False) fit_trend_strength = Column(String, nullable=False) # 强 / 弱 / 全部 trade_type = Column(String, nullable=False) # 顺势 / 反转 / 全部 strategy_rule = Column(Text, nullable=False) remark = Column(Text, default="") matches = relationship("RegimeMatch", back_populates="strategy", cascade="all, delete-orphan") class RegimeMatch(Base): """匹配绑定:大盘周期+阶段+强弱 → 账户+策略+方向""" __tablename__ = "regime_match" id = Column(Integer, primary_key=True, autoincrement=True) market_regime_id = Column(Integer, ForeignKey("market_regime.id", ondelete="CASCADE"), nullable=False) market_cycle = Column(String, nullable=False) # 日线 / 4H / 1H trend_strength = Column(String, nullable=False) # 强 / 弱 / 震荡 account_id = Column(Integer, ForeignKey("account.id", ondelete="CASCADE"), nullable=False) strategy_id = Column(Integer, ForeignKey("strategy.id", ondelete="CASCADE"), nullable=False) force_direction = Column(String, default="") # 做多 / 做空 / 空=跟随大盘 regime = relationship("MarketRegime", back_populates="matches") account = relationship("Account", back_populates="matches") strategy = relationship("Strategy", back_populates="matches")