운영 인시던트 대응 (Daily -5% 자동 중단)
가장 흔한 실전 인시던트인 일일 -5% 룰 발동 시나리오를 처음부터 끝까지 따라갑니다.
학습 목표
- RiskManager v2가 일일 -5%를 계산하는 방식
- Telegram + Grafana 알림이 트리거되는 임계값
- 자동 거래 중단 후 봇·라이브의 동결 동작
- 24h 후 다음 영업일 자동 복구 절차
사전 준비
- 페이퍼 또는 라이브 모드에서 봇이 실행 중
- Telegram bot + chat_id 설정 (
Settings→Notifications) - Grafana 대시보드 접근 (운영자용)
1단계: -3% 알림 (사전 경보)
자산군 합산 일일 PnL이 -3%에 도달하면 사전 경보가 발송됩니다.
[quant-ai] WARNING: Daily PnL approaching limit
user_id: 42
daily_pnl_usd: -298.50 (-3.05%)
threshold: -5.0%
asset_classes: us_equity (-3.5%), crypto (-2.3%)
ts: 2026-04-26T17:11:53Z
2단계: -5% 자동 중단
-5% 도달 즉시:
RiskManager.daily_loss_limit_breached=true플래그 설정- 모든 신규 시그널이
RISK_RULE_VIOLATION으로 거부 - 모든 새 주문 (페이퍼/라이브) 422 거부
- WebSocket으로
bot_status: "halted"메시지 브로드캐스트
알림 예시:
[quant-ai] CRITICAL: Daily loss limit reached - bot halted
user_id: 42
daily_pnl_usd: -512.45 (-5.21%)
halted_at: 2026-04-26T18:42:01Z
resume_at: 2026-04-27T00:00:00Z (UTC midnight)
open_positions: 3 (will be flatten via stop-loss only)
3단계: 동결 상태 검증
curl -H "Authorization: Bearer $JWT" \
http://localhost:8000/api/bot/status
응답:
{
"is_running": true,
"is_halted": true,
"halt_reason": "daily_loss_limit",
"halted_at": "2026-04-26T18:42:01Z",
"resume_at": "2026-04-27T00:00:00Z",
"open_positions_count": 3
}
이 시간 동안:
- 신규 진입은 모두 거부 (스탑로스/트레일링 청산만 허용)
- LLM 분석 요청은 계속 가능 (시그널을 받아도 거부됨)
- 백테스트는 정상 동작
4단계: 24h 후 자동 복구
다음 UTC 자정에 RiskManager가 일일 카운터를 리셋하고 자동 거래가 재개됩니다.
[quant-ai] INFO: Daily loss limit reset - bot resumed
user_id: 42
resumed_at: 2026-04-27T00:00:00Z
prev_day_pnl_usd: -512.45
account_equity: 9682.20
5단계: 사후 분석
복구 직후 다음을 점검합니다.
- 트레이드 내역 검토:
/api/trades?from=2026-04-26&asset_class=all - 보고서 분석: 손실이 발생한 거래의
report_uuid추적, 결정 신호 vs 실제 결과 비교 - 백테스트 재검증: 같은 기간을 백테스트로 시뮬레이션해서 전략 가정이 깨졌는지 확인
- 전략 일시 중단 (선택):
Bot페이지에서 의심 전략을disable처리
수동 강제 중단 / 강제 재개
운영자는 24h를 기다리지 않고도 강제 중단/재개를 할 수 있습니다 (admin 토큰 필요).
# 강제 중단
curl -X POST http://localhost:8000/api/bot/halt \
-H "Authorization: Bearer $ADMIN_JWT" \
-d '{"reason": "manual_emergency_stop"}'
# 강제 재개 (rate limit 발동 직후엔 권장하지 않음)
curl -X POST http://localhost:8000/api/bot/resume \
-H "Authorization: Bearer $ADMIN_JWT"
자세한 운영 플레이북은 운영: 비상 정지 참조.
검증
- -3% 알림이 Telegram으로 도착
- -5% 도달 즉시 신규 주문 422 거부
- 동결 상태에서 분석 요청은 정상 동작
- UTC 자정에 자동 복구 + 알림 발송