Files
crypto-pre-trade-system/backend/app/models.py
T
2026-05-28 21:43:23 +08:00

67 lines
2.8 KiB
Python

"""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")