Initial commit: Gold Trading Simulator with AI-powered analysis
This commit is contained in:
@@ -0,0 +1,72 @@
|
||||
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())
|
||||
Reference in New Issue
Block a user