67 lines
2.8 KiB
Python
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")
|