54 lines
1.6 KiB
Python
Raw Permalink Normal View History

"""
Trading journal models.
"""
import enum
from datetime import datetime
from sqlalchemy import (
Column, Integer, String, Numeric, DateTime, Date,
Text, Enum as SQLEnum, ForeignKey,
)
from sqlalchemy.orm import relationship
from app.core.database import Base
class TradeType(str, enum.Enum):
BUY = "buy"
SELL = "sell"
class JournalStatus(str, enum.Enum):
OPEN = "open"
CLOSED = "closed"
class TradeJournal(Base):
__tablename__ = "trade_journals"
id = Column(Integer, primary_key=True, index=True)
user_id = Column(Integer, ForeignKey("users.id"), nullable=False, index=True)
stock_code = Column(String(20), nullable=False, index=True)
stock_name = Column(String(100))
trade_type = Column(SQLEnum(TradeType), nullable=False)
entry_price = Column(Numeric(12, 2))
target_price = Column(Numeric(12, 2))
stop_loss_price = Column(Numeric(12, 2))
exit_price = Column(Numeric(12, 2))
entry_date = Column(Date, nullable=False, index=True)
exit_date = Column(Date)
quantity = Column(Integer)
profit_loss = Column(Numeric(14, 2))
profit_loss_pct = Column(Numeric(8, 4))
entry_reason = Column(Text)
exit_reason = Column(Text)
scenario = Column(Text)
lessons_learned = Column(Text)
emotional_state = Column(Text)
strategy_id = Column(Integer)
status = Column(SQLEnum(JournalStatus), default=JournalStatus.OPEN, index=True)
created_at = Column(DateTime, default=datetime.utcnow)
updated_at = Column(DateTime, default=datetime.utcnow, onupdate=datetime.utcnow)
user = relationship("User", backref="trade_journals")