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
41 lines
1.0 KiB
Python
41 lines
1.0 KiB
Python
"""
|
|
Drawdown related Pydantic schemas.
|
|
"""
|
|
from datetime import date
|
|
from decimal import Decimal
|
|
from typing import List, Optional
|
|
|
|
from pydantic import BaseModel, Field
|
|
|
|
from app.schemas.portfolio import FloatDecimal
|
|
|
|
|
|
class DrawdownDataPoint(BaseModel):
|
|
date: date
|
|
total_value: FloatDecimal
|
|
peak: FloatDecimal
|
|
drawdown_pct: FloatDecimal
|
|
|
|
|
|
class DrawdownResponse(BaseModel):
|
|
portfolio_id: int
|
|
current_drawdown_pct: FloatDecimal
|
|
max_drawdown_pct: FloatDecimal
|
|
max_drawdown_date: date | None = None
|
|
peak_value: FloatDecimal | None = None
|
|
peak_date: date | None = None
|
|
trough_value: FloatDecimal | None = None
|
|
trough_date: date | None = None
|
|
alert_threshold_pct: FloatDecimal = Decimal("20")
|
|
|
|
|
|
class DrawdownHistoryResponse(BaseModel):
|
|
portfolio_id: int
|
|
data: List[DrawdownDataPoint] = []
|
|
max_drawdown_pct: FloatDecimal
|
|
current_drawdown_pct: FloatDecimal
|
|
|
|
|
|
class DrawdownSettingsUpdate(BaseModel):
|
|
alert_threshold_pct: FloatDecimal = Field(..., gt=0, le=100)
|