galaxis-po/backend/app/schemas/position_sizing.py
머니페니 12d235a1f1 feat: add 9 new modules - notification alerts, trading journal, position sizing, pension allocation, drawdown monitoring, benchmark dashboard, tax simulation, correlation analysis, parameter optimizer
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
2026-03-29 10:03:08 +09:00

47 lines
1.1 KiB
Python

"""
Position sizing Pydantic schemas.
"""
from enum import Enum
from typing import Optional
from pydantic import BaseModel, Field
class SizingMethod(str, Enum):
FIXED = "fixed"
KELLY = "kelly"
ATR = "atr"
class PositionSizeRequest(BaseModel):
capital: float = Field(..., gt=0, description="Total capital (KRW)")
method: SizingMethod = Field(..., description="Sizing method")
# fixed_ratio params
num_positions: int = Field(default=10, ge=1, le=50)
cash_ratio: float = Field(default=0.3, ge=0, lt=1.0)
# kelly params
win_rate: Optional[float] = Field(default=None, gt=0, le=1.0)
avg_win: Optional[float] = Field(default=None, gt=0)
avg_loss: Optional[float] = Field(default=None, gt=0)
# atr params
atr: Optional[float] = Field(default=None, gt=0)
risk_pct: float = Field(default=0.02, gt=0, le=1.0)
class PositionSizeResponse(BaseModel):
method: str
position_size: float
shares: int
risk_amount: float
notes: str
class MethodInfo(BaseModel):
name: str
label: str
description: str
class MethodsResponse(BaseModel):
methods: list[MethodInfo]