멀티 자산 포트폴리오 (BTC + AAPL + 005930)
세 자산군에 동시에 페이퍼 자금을 배분하고, 통합 대시보드에서 자산군별/통화별 PnL을 추적합니다.
학습 목표
BotRegistry가 user별로 격리된 BotManager를 라우팅하는 방식asset_class=all필터로 자산군별 PnL을 한 화면에 통합- KRW/USD/USDT 통화 혼재 시 환산 정책 이해
RiskManager v2가 자산군 합산 기준 일일 -5%를 계산하는 방식
사전 준비
- 세 자산군 페이퍼 키 모두 등록 (Binance / Alpaca / KIS)
- 모든 feature flag 활성화:
FEATURE_EQUITY_ANALYSIS,FEATURE_EQUITY_PAPER - 페이퍼 자금 배분 (예: 각 $5,000 USD 상당)
1단계: 자산군별 봇 시작
각 자산군에 대해 봇을 띄웁니다.
# Crypto
curl -X POST http://localhost:8000/api/bot/start \
-H "Authorization: Bearer $JWT" \
-d '{"strategy":"momentum_v1","symbol":"BTC/USDT","mode":"paper"}'
# US Equity (StrategyAgent가 보고서를 만들고, 사용자가 주문 결정)
curl -X POST http://localhost:8000/api/equity/analyze \
-H "Authorization: Bearer $JWT" \
-d '{"symbol":"AAPL","mode":"standard"}'
# KR Equity
curl -X POST http://localhost:8000/api/equity/analyze \
-H "Authorization: Bearer $JWT" \
-d '{"symbol":"KS:005930","mode":"standard"}'
2단계: 통합 대시보드 확인
curl -H "Authorization: Bearer $JWT" \
"http://localhost:8000/api/dashboard/summary?asset_class=all"
응답:
{
"total_equity_usd": 14820.55,
"daily_pnl_usd": 124.30,
"daily_pnl_pct": 0.0084,
"by_asset_class": {
"crypto": {
"equity": 5024.10,
"currency": "USDT",
"daily_pnl": 12.4
},
"us_equity": {
"equity": 4950.20,
"currency": "USD",
"daily_pnl": 32.1
},
"kr_equity": {
"equity": 6800000.0,
"currency": "KRW",
"daily_pnl": 95000.0
}
},
"fx_rates": {
"USD_KRW": 1391.5,
"USDT_USD": 1.0
}
}
3단계: 자산군 필터 토글
웹 대시보드 상단의 자산군 필터를 crypto / us_equity / kr_equity / all로 차례로 전환하면서 다음을 확인합니다.
Positions페이지가 선택된 자산군의 포지션만 표시Trades페이지의 currency 컬럼이 USDT/USD/KRW로 분리Backtest결과에asset_class메타가 부여
4단계: 자산군 통합 RiskManager 동작
RiskManager v2는 모든 자산군 PnL을 USD로 환산해 일일 -5%를 계산합니다. 임의로 페이퍼 손실을 발생시키면 (예: 큰 시그널 강제 진입) 자산군 합산 -5%에 도달하는 순간 자동 일시 중단이 트리거됩니다.
자세한 흐름은 운영 인시던트 대응을 참고하세요.
5단계: 멀티유저 격리 검증
이 사용자의 모든 데이터는 WHERE user_id = $current_user에 의해 격리됩니다. 다른 사용자 토큰으로 동일 보고서 ID에 접근하면 404를 받습니다.
# user-A의 보고서 ID로 user-B 토큰으로 접근
curl -H "Authorization: Bearer $JWT_USER_B" \
"http://localhost:8000/api/equity/reports/0c3a5b..."
# → 404 Report not found
검증
-
total_equity_usd가 세 자산군 환산값의 합과 ±0.1% 이내 - 자산군 필터가 모든 페이지에서 일관 적용
- 자산군 합산 일일 PnL이 -5% 도달 시 봇 자동 중단
- 다른 user 토큰으로 보고서/주문 접근 시 404