# πŸ”₯ 리슀크 관리 & μ„±κ³Ό 평가 API κ°€μ΄λ“œ ## κ°œμš” μžλ™λ§€λ§€ μ‹œμŠ€ν…œμ˜ μ•ˆμ •μ„±κ³Ό μˆ˜μ΅μ„±μ„ 높이기 μœ„ν•œ 리슀크 관리 κΈ°λŠ₯μž…λ‹ˆλ‹€. ## μ£Όμš” κΈ°λŠ₯ ### 1. Maximum Drawdown (MDD) 좔적 **μ—”λ“œν¬μΈνŠΈ**: `GET /api/v1/risk/risk-metrics?days=30` κ³„μ’Œ 졜고점 λŒ€λΉ„ μ΅œμ €μ  낙폭을 μΈ‘μ •ν•©λ‹ˆλ‹€. **응닡 μ˜ˆμ‹œ**: ```json { "max_drawdown": 150000, "max_drawdown_pct": 15.5, "current_equity": 850000, "peak_equity": 1000000, "trades_count": 45, "risk_level": "주의", "equity_curve": [...], "drawdown_curve": [...] } ``` **μœ„ν—˜ 레벨**: - `μ•ˆμ „`: MDD < 10% - `주의`: 10% ≀ MDD < 20% - `κ²½κ³ `: 20% ≀ MDD < 30% (ν¬μ§€μ…˜ μΆ•μ†Œ ꢌμž₯) - `μœ„ν—˜`: MDD β‰₯ 30% (μ‹œμŠ€ν…œ 쀑지 ꢌμž₯) --- ### 2. Sharpe Ratio 계산 **μ—”λ“œν¬μΈνŠΈ**: `GET /api/v1/risk/sharpe-ratio?days=30` 수읡λ₯  λŒ€λΉ„ 변동성(리슀크)을 μΈ‘μ •ν•˜μ—¬ μ „λž΅μ˜ μ§ˆμ„ ν‰κ°€ν•©λ‹ˆλ‹€. **응닡 μ˜ˆμ‹œ**: ```json { "sharpe_ratio": 1.85, "avg_return": 2.3, "std_return": 5.1, "annualized_return": 579.6, "interpretation": "Good (우수)", "trades_count": 42 } ``` **해석**: - `> 2.0`: Excellent (맀우 우수) - `> 1.0`: Good (우수) - `> 0`: Fair (보톡) - `< 0`: Poor (κ°œμ„  ν•„μš”) --- ### 3. 일일 νŠΈλ ˆμ΄λ”© μ„Έμ…˜ 쑰회 **μ—”λ“œν¬μΈνŠΈ**: `GET /api/v1/risk/session/today` 였늘의 연속 손싀, 일일 손읡, 거래 쀑지 μƒνƒœλ₯Ό ν™•μΈν•©λ‹ˆλ‹€. **응닡 μ˜ˆμ‹œ**: ```json { "session_date": "2026-02-11", "consecutive_losses": 2, "consecutive_wins": 0, "daily_profit_loss": -45000, "daily_trades_count": 5, "is_paused": false, "pause_reason": null, "starting_balance": 10000000, "ending_balance": 9955000, "peak_balance": 10050000 } ``` --- ### 4. μ£Όλ¬Έ μ „ 리슀크 μ œν•œ 확인 **μ—”λ“œν¬μΈνŠΈ**: `POST /api/v1/risk/check-risk-limits` **νŒŒλΌλ―Έν„°**: - `order_value`: μ£Όλ¬Έ κΈˆμ•‘ - `account_balance`: κ³„μ’Œ μž”κ³  **응닡 μ˜ˆμ‹œ (톡과)**: ```json { "allowed": true, "risk_level": "OK", "warnings": [], "position_ratio": 15.5, "daily_loss_ratio": 1.2, "consecutive_losses": 1 } ``` **응닡 μ˜ˆμ‹œ (κ±°λΆ€)**: ```json { "allowed": false, "reason": "연속 3회 손싀 λ°œμƒ", "risk_level": "CRITICAL", "consecutive_losses": 3 } ``` **μžλ™ 차단 쑰건**: 1. **연속 3회 손싀**: 3μ—°νŒ¨ μ‹œ μžλ™ 쀑지 2. **일일 손싀 3% 초과**: κ³„μ’Œ λŒ€λΉ„ 3% 손싀 μ‹œ 쀑지 3. **ν¬μ§€μ…˜ μ‚¬μ΄μ¦ˆ 20% 초과**: 단일 ν¬μ§€μ…˜μ΄ κ³„μ’Œμ˜ 20% 초과 μ‹œ κ±°λΆ€ --- ### 5. 거래 κ²°κ³Ό μ—…λ°μ΄νŠΈ **μ—”λ“œν¬μΈνŠΈ**: `POST /api/v1/risk/update-session` **νŒŒλΌλ―Έν„°**: - `trade_result`: `win` λ˜λŠ” `loss` - `profit_loss`: 거래 손읡 맀도 체결 ν›„ ν˜ΈμΆœν•˜μ—¬ μ„Έμ…˜ μƒνƒœλ₯Ό μ—…λ°μ΄νŠΈν•©λ‹ˆλ‹€. --- ### 6. 승λ₯  및 손읡 톡계 **μ—”λ“œν¬μΈνŠΈ**: `GET /api/v1/risk/win-rate?days=30` **응닡 μ˜ˆμ‹œ**: ```json { "win_rate": 62.5, "total_trades": 40, "wins": 25, "losses": 15, "total_profit": 1250000, "total_loss": 450000, "net_profit": 800000, "profit_factor": 2.78, "avg_win": 50000, "avg_loss": 30000, "risk_reward_ratio": 1.67 } ``` **μ£Όμš” μ§€ν‘œ**: - **Profit Factor**: 총 이읡 / 총 손싀 (1.0 이상 ꢌμž₯, 2.0 이상 우수) - **Risk/Reward Ratio**: 평균 승리 / 평균 손싀 (1.5 이상 ꢌμž₯) --- ## 리슀크 관리 μ„€μ • ### ν˜„μž¬ κΈ°λ³Έκ°’ ```python MAX_POSITION_SIZE_RATIO = 0.20 # 단일 ν¬μ§€μ…˜ 20% μ œν•œ MAX_DAILY_LOSS_RATIO = 0.03 # 일일 손싀 3% μ œν•œ MAX_CONSECUTIVE_LOSSES = 3 # 연속 3회 손싀 μ œν•œ # 수수료 및 μ„ΈκΈˆ COMMISSION_RATE = 0.00015 # 수수료 0.015% TRADE_TAX_RATE = 0.0023 # κ±°λž˜μ„Έ 0.23% (λ§€λ„λ§Œ) TOTAL_COST_RATE = 0.0026 # 왕볡 μ•½ 0.26% ``` --- ## μ‚¬μš© μ˜ˆμ‹œ ### 맀수 μ „ 체크 ```python # μ£Όλ¬Έ μ „ 리슀크 확인 response = requests.post( "/api/v1/risk/check-risk-limits", params={ "order_value": 2000000, # 200λ§Œμ› μ£Όλ¬Έ "account_balance": 10000000 # 1000λ§Œμ› μž”κ³  } ) if response.json()["allowed"]: # 맀수 μ‹€ν–‰ execute_buy_order() else: # μ£Όλ¬Έ κ±°λΆ€ logger.warning(f"Order rejected: {response.json()['reason']}") ``` ### 맀도 ν›„ μ„Έμ…˜ μ—…λ°μ΄νŠΈ ```python # 맀도 체결 ν›„ sell_result = execute_sell_order() # 손읡에 따라 μ„Έμ…˜ μ—…λ°μ΄νŠΈ trade_result = "win" if sell_result["profit_loss"] > 0 else "loss" requests.post( "/api/v1/risk/update-session", params={ "trade_result": trade_result, "profit_loss": sell_result["profit_loss"] } ) ``` --- ## λŒ€μ‹œλ³΄λ“œ ν‘œμ‹œ ꢌμž₯ 사항 ### ν•„μˆ˜ ν‘œμ‹œ μ§€ν‘œ 1. **였늘의 μƒνƒœ** - 연속 손싀 횟수 - 일일 손읡 - 거래 쀑지 μƒνƒœ 2. **리슀크 λ©”νŠΈλ¦­** - MDD % - Sharpe Ratio - 승λ₯  3. **κ²½κ³  μ•Œλ¦Ό** - 연속 2회 손싀: λ…Έλž€μƒ‰ κ²½κ³  - 연속 3회 손싀: 빨간색 차단 - MDD 20% 초과: 주황색 κ²½κ³  - MDD 30% 초과: 빨간색 μœ„ν—˜ --- ## μ£Όμ˜μ‚¬ν•­ 1. **λ°±ν…ŒμŠ€νŒ… ν›„ μ‹€μ „ 적용**: μƒˆλ‘œμš΄ μ „λž΅μ€ λ°˜λ“œμ‹œ λ°±ν…ŒμŠ€νŒ…μœΌλ‘œ 검증 2. **리슀크 ν•œλ„ μ€€μˆ˜**: μ„€μ •λœ ν•œλ„λ₯Ό μ ˆλŒ€ μž„μ˜λ‘œ λ³€κ²½ν•˜μ§€ μ•ŠκΈ° 3. **μ •κΈ° 점검**: λ§€μ£Ό Sharpe Ratio와 MDD 확인 4. **감정 μ œμ–΄**: μ‹œμŠ€ν…œμ΄ μ€‘μ§€ν•˜λ©΄ ν•˜λ£¨ 쉬기 --- ## λ‹€μŒ 단계 (μΆ”κ°€ 개발 μ˜ˆμ •) - [ ] λ°±ν…ŒμŠ€νŒ… API - [ ] Slack/Telegram μ•Œλ¦Ό 연동 - [ ] μ‹€μ‹œκ°„ κ²½κ³  λŒ€μ‹œλ³΄λ“œ - [ ] μ›”κ°„/뢄기별 μ„±κ³Ό 리포트 - [ ] ATR 기반 동적 μ†μ ˆ μ„€μ •