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
+154
View File
@@ -384,3 +384,157 @@ class HabitTrackerResponse(BaseModel):
class HabitCompletionRequest(BaseModel):
habit_id: int
completion_date: Optional[str] = None # ISO date string, defaults to today
# Phase 3: Advanced Analytics Schemas
class PerformanceSnapshotCreate(BaseModel):
snapshot_date: Optional[str] = None # ISO date, defaults to today
daily_pnl: float
daily_pnl_percent: float
total_trades: int
winning_trades: int
losing_trades: int
win_rate: float
best_trade: Optional[float] = None
worst_trade: Optional[float] = None
avg_win: Optional[float] = None
avg_loss: Optional[float] = None
sharpe_ratio: Optional[float] = None
profit_factor: Optional[float] = None
max_drawdown: Optional[float] = None
cumulative_pnl: float
portfolio_value: Optional[float] = None
class PerformanceSnapshotResponse(BaseModel):
id: int
snapshot_date: str
daily_pnl: float
daily_pnl_percent: float
total_trades: int
winning_trades: int
losing_trades: int
win_rate: float
best_trade: Optional[float]
worst_trade: Optional[float]
avg_win: Optional[float]
avg_loss: Optional[float]
sharpe_ratio: Optional[float]
profit_factor: Optional[float]
max_drawdown: Optional[float]
cumulative_pnl: float
portfolio_value: Optional[float]
created_at: datetime
class Config:
from_attributes = True
class TradePatternCreate(BaseModel):
pattern_name: str
description: Optional[str] = None
win_rate: float
avg_win: float
avg_loss: float
sample_count: int
best_timeframe: Optional[str] = None
best_time_of_day: Optional[str] = None
confidence_score: float
indicators_used: List[str] = []
market_conditions: Optional[str] = None
class TradePatternResponse(BaseModel):
id: int
pattern_name: str
description: Optional[str]
win_rate: float
avg_win: float
avg_loss: float
sample_count: int
best_timeframe: Optional[str]
best_time_of_day: Optional[str]
confidence_score: float
indicators_used: List[str]
market_conditions: Optional[str]
total_profit: float
created_at: datetime
updated_at: datetime
class Config:
from_attributes = True
class LessonLearnedCreate(BaseModel):
category: str # entry, exit, risk, psychology, market
lesson_text: str
related_trades: List[int] = []
impact: str = "neutral" # positive, negative, neutral
tags: List[str] = []
importance: str = "helpful" # critical, important, helpful
class LessonLearnedResponse(BaseModel):
id: int
date_learned: datetime
category: str
lesson_text: str
related_trades: List[int]
impact: str
tags: List[str]
importance: str
status: str
created_at: datetime
class Config:
from_attributes = True
class MonthlyReviewCreate(BaseModel):
year: int
month: int
total_trades: int
total_pnl: float
total_pnl_percent: float
best_day: Optional[str] = None # ISO date
worst_day: Optional[str] = None
best_trade: Optional[float] = None
worst_trade: Optional[float] = None
win_rate: float
avg_daily_pnl: Optional[float] = None
sharpe_ratio: Optional[float] = None
max_drawdown: Optional[float] = None
trading_days: int
best_pattern: Optional[str] = None
summary: Optional[str] = None
improvements: List[str] = []
goals_met: List[str] = []
goals_missed: List[str] = []
class MonthlyReviewResponse(BaseModel):
id: int
year: int
month: int
total_trades: int
total_pnl: float
total_pnl_percent: float
best_day: Optional[str]
worst_day: Optional[str]
best_trade: Optional[float]
worst_trade: Optional[float]
win_rate: float
avg_daily_pnl: Optional[float]
sharpe_ratio: Optional[float]
max_drawdown: Optional[float]
trading_days: int
best_pattern: Optional[str]
summary: Optional[str]
improvements: List[str]
goals_met: List[str]
goals_missed: List[str]
created_at: datetime
class Config:
from_attributes = True