라이브 모드 졸업 (Paper → Live)
페이퍼 모드에서 충분히 검증된 자산군을 라이브로 전환하는 게이팅 절차를 step-by-step으로 진행합니다.
학습 목표
- 라이브 모드 활성화 5단계 게이트 이해
- HMAC 토큰 기반 2단계 활성화 흐름
LIVE_DAILY_TRADE_LIMIT카운터 동작 검증- 첫 라이브 주문 + 모니터링 알림 확인
절대 룰
페이퍼 트레이딩 최소 3개월 (90일) + 50건 이상 체결 후에만 라이브 모드를 신청할 수 있습니다. 일일 -5% 룰은 라이브에서도 동일하게 적용되며 자동 중단됩니다.
사전 준비
- 페이퍼 모드 운영 90일+ 누적
- 자산군별 페이퍼 체결 ≥50건 (
/api/equity/live/status로 확인) FEATURE_EQUITY_LIVE=true(관리자 환경변수)- 라이브 거래소 키 등록 완료 (
paper_mode=false)
1단계: 라이브 준비 상태 확인
curl -H "Authorization: Bearer $JWT" \
http://localhost:8000/api/equity/live/status
응답:
{
"feature_live_enabled": true,
"feature_paper_enabled": true,
"entries": [
{
"asset_class": "us_equity",
"live_enabled": false,
"is_ready": true,
"reason": null,
"days_active": 92,
"paper_trades_count": 67,
"oldest_paper_trade": "2026-01-24T03:11:00Z"
},
{
"asset_class": "kr_equity",
"live_enabled": false,
"is_ready": false,
"reason": "Need 50 paper trades, currently 31",
"days_active": 60,
"paper_trades_count": 31,
"oldest_paper_trade": "2026-02-25T05:22:00Z"
}
]
}
is_ready=true인 자산군만 다음 단계 진행 가능.
2단계: 확인 토큰 요청
curl -X POST http://localhost:8000/api/equity/live/request_confirm \
-H "Authorization: Bearer $JWT" \
-H "Content-Type: application/json" \
-d '{
"asset_class": "us_equity",
"recaptcha_token": "<reCAPTCHA v3 token>"
}'
응답:
{
"token_delivered_via": "email",
"token": null,
"expires_at": "2026-04-26T11:11:53Z",
"asset_class": "us_equity"
}
token_delivered_via=email이면 토큰은 등록 이메일로 전송 (응답에 plaintext 포함되지 않음)log이면 SMTP가 미설정 상태이며 서버 로그에서 토큰을 읽어야 합니다 (개발용)
3단계: 토큰으로 활성화
curl -X POST http://localhost:8000/api/equity/live/enable \
-H "Authorization: Bearer $JWT" \
-d '{
"asset_class": "us_equity",
"confirm_token": "<email로 받은 토큰>"
}'
응답:
{
"asset_class": "us_equity",
"enabled": true
}
토큰은 1회용이고 만료 시간 (기본 1시간) 후 재발급 필요합니다.
4단계: 첫 라이브 주문
PlaceOrderRequest.live_mode=true 필드를 사용해야 라이브 라우팅이 됩니다.
curl -X POST http://localhost:8000/api/equity/orders \
-H "Authorization: Bearer $JWT" \
-d '{
"asset_class": "us_equity",
"symbol": "AAPL",
"side": "buy",
"qty": 1,
"order_type": "limit",
"limit_price": 188.20,
"time_in_force": "day",
"live_mode": true
}'
서버는 다음 게이트를 다시 검사합니다.
FEATURE_EQUITY_LIVE글로벌 ON- 사용자
live_enabled[us_equity]=true LIVE_DAILY_TRADE_LIMIT(기본 10) 미초과- RiskManager v2 통과
- 시장 개장 / 잔고 충분
위 5개 모두 통과해야 브로커로 라우팅됩니다.
5단계: 일일 한도와 첫 주문 모니터링
라이브 첫 주문은 감사 로그에 first_live_order=true 마커를 남깁니다. Telegram 알림이 연결되어 있다면 자동 발송됩니다.
docker compose logs api | grep first_live_order
LIVE_DAILY_TRADE_LIMIT에 도달하면 다음 주문은 429 RATE_LIMIT_LIVE_DAILY로 거부됩니다.
비활성화 (선택)
문제 발생 시 즉시 라이브를 끌 수 있습니다. 토큰 불필요.
curl -X POST http://localhost:8000/api/equity/live/disable \
-H "Authorization: Bearer $JWT" \
-d '{"asset_class": "us_equity"}'
검증
-
/live/status에서is_ready=true확인 - 토큰이 이메일/로그로 1회 전달
-
live_enabled=true로 전환 후 24h 내에 첫 주문 -
first_live_order=true감사 로그 + 알림 수신 - 일일 한도 도달 시 429 발생
다음 단계
- 운영 인시던트 대응 — -5% 자동 중단
- API 레퍼런스: equity-live
- 부록: 절대 룰