"""Backtest schemas.""" from pydantic import BaseModel, Field from typing import List, Dict, Any, Optional from datetime import datetime, date from uuid import UUID class BacktestConfig(BaseModel): """백테스트 설정.""" name: str = Field(..., description="백테스트 이름") strategy_name: str = Field(..., description="전략 이름") start_date: date = Field(..., description="시작일") end_date: date = Field(..., description="종료일") initial_capital: float = Field(default=10000000.0, description="초기 자본금") commission_rate: float = Field(default=0.0015, description="수수료율") rebalance_frequency: str = Field(default='monthly', description="리밸런싱 주기") strategy_config: Optional[Dict[str, Any]] = Field(default=None, description="전략 설정") class TradeResponse(BaseModel): """거래 응답.""" ticker: str action: str quantity: float price: float date: datetime class EquityCurvePoint(BaseModel): """자산 곡선 포인트.""" date: datetime value: float cash: float positions_value: float class BacktestResults(BaseModel): """백테스트 결과.""" initial_capital: float final_value: float total_return_pct: float cagr: float max_drawdown_pct: float sharpe_ratio: float sortino_ratio: float volatility: float win_rate_pct: float calmar_ratio: float total_trades: int equity_curve: List[Dict[str, Any]] trades: List[Dict[str, Any]] class BacktestRunResponse(BaseModel): """백테스트 실행 응답.""" id: UUID name: str strategy_name: str start_date: date end_date: date initial_capital: float status: str config: Optional[Dict[str, Any]] results: Optional[BacktestResults] created_at: datetime class Config: from_attributes = True class BacktestRunCreate(BaseModel): """백테스트 실행 생성 요청.""" config: BacktestConfig class BacktestListResponse(BaseModel): """백테스트 목록 응답.""" items: List[BacktestRunResponse] total: int