리스크 룰 (절대 룰)
Settings 페이지의 Risk Management 블록은 RiskManager의 핵심 파라미터를 조정합니다. 모든 주문은 paper / live 관계없이 이 룰을 통과해야 broker로 전달됩니다.
📸 Risk Management 폼 (추후 자동 캡처 예정)
조정 가능 파라미터 (5개)
| 필드 | 단위 | 기본 | 시스템 한도 |
|---|---|---|---|
| Max Risk Per Trade | % | 1.0 | 0–2.0 (hard cap) |
| Max Daily Loss | % | 5.0 | 0–10.0 |
| Max Leverage | x | 3 | 0–3 (hard cap) |
| Max Open Positions | count | 5 | 0–20 |
| Cooldown After Loss | seconds | 300 | 0–86400 |
절대 룰 (시스템 차원 hard cap)
절대 룰 - 변경 불가
다음 룰은 사용자 입력값과 무관하게 시스템이 강제합니다.
- 거래당 최대 리스크 1-2% — UI에서 더 큰 값을 입력해도 RiskManager가 1% 또는 2%로 cap
- 일일 최대 손실 5% — 도달 시 자동 거래 중단 (
cooldown_until = next_utc_midnight) - 최대 레버리지 3배 — 그 이상은 broker 단계에서 거부
- 페이퍼 트레이딩 최소 3개월 검증 후 실전 투입 — paper-to-live 활성 흐름이 강제
자세한 정책은 Risk Rules Appendix를 참고하세요.
주문 시 검증 흐름
사용자 주문
↓
RiskManager.validate_signal_v2(...)
↓
┌─ 거래당 리스크 cap ─┐
├─ 일일 손실 한도 ─┤ → 위반 시 422 RISK_RULE_VIOLATION
├─ 레버리지 ─┤
├─ 시장 휴장 ─┤ → MARKET_CLOSED
└─ 동시 포지션 ─┘
↓
broker.place_order
위반된 주문은 broker로 전달되지 않고 broker_order_events에 event_type=rejected로 기록됩니다.
Save Settings 버튼
폼 하단의 Save Settings 버튼은 PUT /api/settings/risk를 호출합니다.
curl -s -X PUT -H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
http://localhost:8000/api/settings/risk \
-d '{
"max_risk_per_trade": 1.0,
"max_daily_loss": 5.0,
"max_leverage": 3,
"max_open_positions": 5,
"cooldown_after_loss": 300
}'
응답 200 후 즉시 RiskManager에 반영됩니다 (재시작 불필요).
Cooldown After Loss
연속 손실 발생 시 다음 거래까지 대기 시간(초)을 강제합니다. 0이면 비활성, 300이면 손실 직후 5분간 신호를 무시합니다.
| 값 | 권장 상황 |
|---|---|
| 60–300 | 기본 (스캘핑) |
| 600–1800 | 보수적 |
| 3600+ | 매우 보수적 |
자주 묻는 질문
Q. 0.5%로 더 줄일 수 있나요?
A. 네. cap은 상한선이며 더 보수적으로 설정 가능합니다.
Q. 일일 손실이 5%에 도달하면 어떻게 되나요?
A. 그 즉시 봇이 paused 상태로 전환되고, UTC 자정에 자동 재개됩니다. 수동 재개는 Emergency Stop 참고.
Q. 자산군별로 다른 룰이 가능한가요?
A. 현재는 글로벌 룰입니다. 자산군별 룰은 후속 작업.
Q. 변경 즉시 적용되나요?
A. 네. RiskManager는 매 신호 검증 시 최신 설정을 다시 읽습니다.