Phase 3: Advanced Analytics Foundation - Models, Schemas, and API

This commit is contained in:
Claude
2025-11-16 05:54:07 +00:00
parent 73a26ea9b7
commit e3f1a8079c
4 changed files with 708 additions and 1 deletions
+97
View File
@@ -169,3 +169,100 @@ class HabitTracker(Base):
total_completions = Column(Integer, default=0)
created_at = Column(DateTime(timezone=True), server_default=func.now())
updated_at = Column(DateTime(timezone=True), onupdate=func.now())
# Phase 3: Advanced Analytics
class PerformanceSnapshot(Base):
"""Daily performance snapshot for historical tracking"""
__tablename__ = "performance_snapshots"
id = Column(Integer, primary_key=True, index=True)
user_id = Column(String, nullable=True)
snapshot_date = Column(Date, default=func.current_date())
daily_pnl = Column(Float, default=0.0)
daily_pnl_percent = Column(Float, default=0.0)
total_trades = Column(Integer, default=0)
winning_trades = Column(Integer, default=0)
losing_trades = Column(Integer, default=0)
win_rate = Column(Float, default=0.0)
best_trade = Column(Float, nullable=True)
worst_trade = Column(Float, nullable=True)
avg_win = Column(Float, nullable=True)
avg_loss = Column(Float, nullable=True)
sharpe_ratio = Column(Float, nullable=True)
profit_factor = Column(Float, nullable=True)
max_drawdown = Column(Float, nullable=True)
cumulative_pnl = Column(Float, default=0.0)
portfolio_value = Column(Float, nullable=True)
equity_curve = Column(JSON, default=[]) # Time series
streak_type = Column(String, nullable=True) # win_streak, loss_streak
streak_count = Column(Integer, default=0)
created_at = Column(DateTime(timezone=True), server_default=func.now())
class TradePattern(Base):
"""Identified profitable trade patterns"""
__tablename__ = "trade_patterns"
id = Column(Integer, primary_key=True, index=True)
user_id = Column(String, nullable=True)
pattern_name = Column(String) # e.g., "Morning breakout", "Reversal near support"
description = Column(Text, nullable=True)
win_rate = Column(Float) # Percentage
avg_win = Column(Float)
avg_loss = Column(Float)
sample_count = Column(Integer) # Number of matching trades
best_timeframe = Column(String, nullable=True) # 1m, 5m, 15m, 1h, 1d
best_time_of_day = Column(String, nullable=True) # e.g., "09:30-10:30"
confidence_score = Column(Float) # 0-100
indicators_used = Column(JSON, default=[]) # List of indicators
market_conditions = Column(String, nullable=True) # bullish, bearish, neutral
total_profit = Column(Float, default=0.0)
created_at = Column(DateTime(timezone=True), server_default=func.now())
updated_at = Column(DateTime(timezone=True), onupdate=func.now())
class LessonLearned(Base):
"""Track lessons and insights from trading"""
__tablename__ = "lessons_learned"
id = Column(Integer, primary_key=True, index=True)
user_id = Column(String, nullable=True)
date_learned = Column(DateTime(timezone=True), server_default=func.now())
category = Column(String) # entry, exit, risk, psychology, market
lesson_text = Column(Text)
related_trades = Column(JSON, default=[]) # Trade IDs
impact = Column(String) # positive, negative, neutral
tags = Column(JSON, default=[]) # Searchable tags
importance = Column(String) # critical, important, helpful
status = Column(String, default="active") # active, archived
created_at = Column(DateTime(timezone=True), server_default=func.now())
class MonthlyReview(Base):
"""Monthly trading performance review"""
__tablename__ = "monthly_reviews"
id = Column(Integer, primary_key=True, index=True)
user_id = Column(String, nullable=True)
year = Column(Integer)
month = Column(Integer)
total_trades = Column(Integer, default=0)
total_pnl = Column(Float, default=0.0)
total_pnl_percent = Column(Float, default=0.0)
best_day = Column(Date, nullable=True)
worst_day = Column(Date, nullable=True)
best_trade = Column(Float, nullable=True)
worst_trade = Column(Float, nullable=True)
win_rate = Column(Float, default=0.0)
avg_daily_pnl = Column(Float, nullable=True)
sharpe_ratio = Column(Float, nullable=True)
max_drawdown = Column(Float, nullable=True)
trading_days = Column(Integer, default=0)
best_pattern = Column(String, nullable=True)
summary = Column(Text, nullable=True)
improvements = Column(JSON, default=[])
goals_met = Column(JSON, default=[])
goals_missed = Column(JSON, default=[])
created_at = Column(DateTime(timezone=True), server_default=func.now())