87 lines
2.1 KiB
Python
87 lines
2.1 KiB
Python
|
|
"""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
|