PnL 카드 해석
대시보드 상단 StatsGrid의 손익(P&L) 관련 카드들을 어떻게 읽어야 하는지 설명합니다.
📸 PnL 카드 영역 (추후 자동 캡처 예정)
카드 종류
Daily P&L
당일 00:00 UTC부터 현재까지의 손익입니다.
- 상단 숫자: 절대 P&L (USD/KRW). 환율 환산은 거래 발생 시점 기준.
- 하단 % 숫자:
daily_pnl / starting_equity * 100 - 컬러: 양수 = emerald, 음수 = rose
- 자산군 필터가
all이 아니면 해당 자산군만 합산
Total P&L
봇 시작 시점부터 누적 손익입니다.
- 상단 숫자: realized + unrealized 합산
- 하단 % 숫자:
total_pnl / initial_capital * 100 - 백테스트 결과가 아닌 실 거래 기준
Win Rate
전체 청산된 거래 중 수익 거래 비율입니다.
win_rate = winning_trades / total_closed_trades
오픈 포지션은 카운트되지 않습니다.
Open Positions
현재 살아있는 포지션 수. LONG + SHORT 모두 포함.
Today's Trades
당일 청산된 거래 수. realized_pnl != null 기준.
자산군별 분리 표시
AssetClassFilter(헤더 우측)에서 특정 자산군을 선택하면, StatsGrid는 해당 자산군의 데이터만으로 다시 집계됩니다.
| 필터 | Equity 값 | Daily P&L 출처 |
|---|---|---|
| All | 모든 자산군 합산 (USD 환산) | 모든 자산군 합산 |
| Crypto (amber) | Crypto 자산만 | Crypto 거래만 |
| US (blue) | US Equity 자산만 | US 거래만 |
| KR (rose) | KR Equity 자산만 (KRW) | KR 거래만 |
통화 환산
KR 필터는 표시 화폐를 USD가 아닌 KRW로 전환합니다. 환율은 daily close 기준입니다.
양수/음수 컬러 매핑
UI는 정량적 손익을 다음 컬러로 강조합니다.
| 값 | 컬러 클래스 | 의미 |
|---|---|---|
> 0 | text-emerald-400 | 수익 |
< 0 | text-rose-400 | 손실 |
== 0 | text-zinc-300 | 무손익 또는 데이터 없음 |
change prop이 0이면 화살표 없이 회색 톤으로 표시됩니다.
API 연동
PnL 카드 데이터는 단일 호출로 채워집니다.
curl -s -H "Authorization: Bearer $TOKEN" \
"http://localhost:8000/api/dashboard/summary?asset_class=crypto"
{
"equity": 5102.45,
"daily_pnl": -23.10,
"daily_pnl_pct": -0.45,
"total_pnl": 102.45,
"total_pnl_pct": 2.05,
"open_positions": 1,
"total_trades_today": 3,
"win_rate": 0.67
}
자주 묻는 질문
Q. Daily P&L과 누적 P&L 합이 안 맞아요.
A. unrealized_pnl이 다음 거래일에 realized로 전환되는 시점에 카드 값이 갱신됩니다. 24시간 이내 약간의 mismatch는 정상입니다.
Q. % 값이 NaN으로 보입니다.
A. starting_equity가 0이거나 데이터가 미초기화 상태입니다. 봇 첫 실행 후 1분 후 다시 확인하세요.
Q. KR 필터 선택 시 USD 환산이 사라집니다.
A. 의도된 동작입니다. KR 자산은 KRW 본위로 표시됩니다.