머니페니 12d235a1f1 feat: add 9 new modules - notification alerts, trading journal, position sizing, pension allocation, drawdown monitoring, benchmark dashboard, tax simulation, correlation analysis, parameter optimizer
Phase 1:
- Real-time signal alerts (Discord/Telegram webhook)
- Trading journal with entry/exit tracking
- Position sizing calculator (Fixed/Kelly/ATR)

Phase 2:
- Pension asset allocation (DC/IRP 70% risk limit)
- Drawdown monitoring with SVG gauge
- Benchmark dashboard (portfolio vs KOSPI vs deposit)

Phase 3:
- Tax benefit simulation (Korean pension tax rules)
- Correlation matrix heatmap
- Parameter optimizer with grid search + overfit detection
2026-03-29 10:03:08 +09:00

54 lines
1.6 KiB
Python

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