1.6 KiB
1.6 KiB
포지션 모니터 로깅 (실시간 가격 추적)
Goal: 포지션 보유 중 5분마다 현재가 기준 미실현 손익을 로그로 출력하여, 봇 운영 중 포지션 상태를 실시간 모니터링할 수 있게 한다.
Status: Completed
변경 사항
1. MultiSymbolStream에 latest_price 속성 추가
src/data_stream.py:self.latest_price: float | None = None초기화handle_message()에서 모든 kline 메시지 (미확정 캔들 포함)에 대해 primary symbol(XRPUSDT)의 close 가격으로 업데이트- 기존에는 확정 캔들만 처리했으나, 실시간 가격 추적을 위해 미확정 캔들도 반영
- BTC/ETH 등 비주 심볼은 latest_price 갱신 안 함
2. _position_monitor() 코루틴 추가
src/bot.py:_MONITOR_INTERVAL = 300(5분) 클래스 상수 정의async def _position_monitor()무한 루프: 5분마다 실행- 포지션 없으면(
current_trade_side is None) skip - 포지션 있으면:
_calc_estimated_pnl(price)로 미실현 PnL 계산, 퍼센트 산출 후 INFO 로그 출력 asyncio.gather()에 추가하여 기존 user_data_stream, candle processing과 병렬 실행
3. 테스트
tests/test_bot.py: 포지션 보유 시 PnL 로깅 확인, 포지션 없을 때 정상 skip 확인 (2 cases)tests/test_data_stream.py: 미확정 캔들로 latest_price 갱신, 비주 심볼은 무시 확인 (1 case)
설계 결정
- WebSocket 스트림 재사용 (추가 API 연결 불필요)
_MONITOR_INTERVAL은 클래스 상수로 정의 (테스트에서 0으로 오버라이드 가능)- 가격/진입가/수량 중 하나라도 None이면 graceful skip