Files
robinhood/backend/app/models/models.py
T

73 lines
2.5 KiB
Python

from sqlalchemy import Column, Integer, String, Float, DateTime, ForeignKey, Enum
from sqlalchemy.orm import relationship
from sqlalchemy.sql import func
import enum
from app.db.database import Base
class TradeAction(str, enum.Enum):
BUY = "BUY"
SELL = "SELL"
class Simulation(Base):
__tablename__ = "simulations"
id = Column(Integer, primary_key=True, index=True)
user_id = Column(String, nullable=True) # For future multi-user support
symbol = Column(String, default="XAU/USD")
initial_capital = Column(Float, default=100000.0)
current_capital = Column(Float, default=100000.0)
total_pnl = Column(Float, default=0.0)
total_pnl_percent = Column(Float, default=0.0)
created_at = Column(DateTime(timezone=True), server_default=func.now())
updated_at = Column(DateTime(timezone=True), onupdate=func.now())
trades = relationship("Trade", back_populates="simulation", cascade="all, delete-orphan")
positions = relationship("Position", back_populates="simulation", cascade="all, delete-orphan")
class Trade(Base):
__tablename__ = "trades"
id = Column(Integer, primary_key=True, index=True)
simulation_id = Column(Integer, ForeignKey("simulations.id"))
action = Column(Enum(TradeAction))
quantity = Column(Float)
price = Column(Float)
total = Column(Float)
pnl = Column(Float, nullable=True)
timestamp = Column(DateTime(timezone=True), server_default=func.now())
simulation = relationship("Simulation", back_populates="trades")
class Position(Base):
__tablename__ = "positions"
id = Column(Integer, primary_key=True, index=True)
simulation_id = Column(Integer, ForeignKey("simulations.id"))
symbol = Column(String, default="XAU/USD")
quantity = Column(Float)
avg_price = Column(Float)
current_price = Column(Float)
unrealized_pnl = Column(Float)
unrealized_pnl_percent = Column(Float)
updated_at = Column(DateTime(timezone=True), onupdate=func.now())
simulation = relationship("Simulation", back_populates="positions")
class AIAnalysisLog(Base):
__tablename__ = "ai_analysis_logs"
id = Column(Integer, primary_key=True, index=True)
simulation_id = Column(Integer, nullable=True)
recommendation = Column(String)
confidence = Column(Float)
reasoning = Column(String)
risk_level = Column(String)
support_levels = Column(String) # JSON string
resistance_levels = Column(String) # JSON string
created_at = Column(DateTime(timezone=True), server_default=func.now())