feat: Daily CB P&L 기준을 당일 시작 평가금액으로 변경 (#207) #227

Merged
jihoson merged 1 commits from feature/issue-207-daily-cb-pnl into main 2026-02-23 16:58:18 +09:00
Collaborator

변경 내용

Circuit Breaker P&L 계산 기준을 cumulative purchase_total(누적 매수금액)에서 당일 세션 시작 시점의 total_eval(포트폴리오 평가금액)로 변경합니다.

문제 (issue #207)

기존 CB 계산:

  • pnl_pct = (total_eval - purchase_total) / purchase_total * 100
  • purchase_total은 계좌 전체 누적 매수금액 → 오랜 기간 운용 시 수익 누적돼도 늘 양수이지 않음
  • 당일 손실이 실제로 임계값 이상이어도 CB가 발동하지 않을 수 있음

해결

당일 첫 잔고 조회 시의 total_eval을 baseline으로 캡처하여, 이후 세션에서는 이 기준으로 당일 P&L을 산출합니다.

pnl_pct = (total_eval - daily_start_eval) / daily_start_eval * 100

구현 상세

src/main.py

  • run_daily_session 파라미터 추가: daily_start_eval: float = 0.0 / 반환 타입 -> float
  • 첫 잔고 조회 후 if daily_start_eval <= 0 and total_eval > 0: daily_start_eval = total_eval
  • 함수 끝 / early return 모두 return daily_start_eval (None 반환 버그 수정)
  • run 함수: _cb_daily_start_eval, _cb_last_date 추가 → 자정 리셋

tests/test_main.py

  • TestDailyCBBaseline 클래스 (4개 테스트)
    • 마켓 없을 때 early return 검증
    • 첫 세션에서 total_eval을 baseline으로 캡처
    • 기존 baseline 유지(덮어쓰기 없음) 검증

테스트 결과

824 passed, 4 warnings

Closes #207

## 변경 내용 Circuit Breaker P&L 계산 기준을 cumulative `purchase_total`(누적 매수금액)에서 당일 세션 시작 시점의 `total_eval`(포트폴리오 평가금액)로 변경합니다. ### 문제 (issue #207) 기존 CB 계산: - `pnl_pct = (total_eval - purchase_total) / purchase_total * 100` - `purchase_total`은 계좌 전체 누적 매수금액 → 오랜 기간 운용 시 수익 누적돼도 늘 양수이지 않음 - 당일 손실이 실제로 임계값 이상이어도 CB가 발동하지 않을 수 있음 ### 해결 당일 첫 잔고 조회 시의 `total_eval`을 baseline으로 캡처하여, 이후 세션에서는 이 기준으로 당일 P&L을 산출합니다. pnl_pct = (total_eval - daily_start_eval) / daily_start_eval * 100 ### 구현 상세 **src/main.py** - run_daily_session 파라미터 추가: daily_start_eval: float = 0.0 / 반환 타입 -> float - 첫 잔고 조회 후 if daily_start_eval <= 0 and total_eval > 0: daily_start_eval = total_eval - 함수 끝 / early return 모두 return daily_start_eval (None 반환 버그 수정) - run 함수: _cb_daily_start_eval, _cb_last_date 추가 → 자정 리셋 **tests/test_main.py** - TestDailyCBBaseline 클래스 (4개 테스트) - 마켓 없을 때 early return 검증 - 첫 세션에서 total_eval을 baseline으로 캡처 - 기존 baseline 유지(덮어쓰기 없음) 검증 ## 테스트 결과 824 passed, 4 warnings Closes #207
agentson added 1 commit 2026-02-23 16:47:39 +09:00
feat: Daily CB P&L 기준을 당일 시작 평가금액으로 변경 (#207)
Some checks failed
CI / test (pull_request) Has been cancelled
9339824e22
- run_daily_session에 daily_start_eval 파라미터 추가 (반환 타입: float)
  - 세션 첫 잔고 조회 시 total_eval을 baseline으로 캡처
  - 이후 세션에서 pnl_pct = (total_eval - daily_start_eval) / daily_start_eval
  - 기존 purchase_total(누적) 기반 계산 제거
- run 함수 daily 루프에서 날짜 변경 시 baseline 리셋 (_cb_last_date 추적)
- early return 시 daily_start_eval 반환하도록 버그 수정 (None 반환 방지)
- TestDailyCBBaseline 클래스 4개 테스트 추가
  - no_markets: 0.0/기존값 그대로 반환
  - first session: total_eval을 baseline으로 캡처
  - subsequent session: 기존 baseline 유지 (덮어쓰기 방지)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
jihoson merged commit 25ad4776c9 into main 2026-02-23 16:58:18 +09:00
Sign in to join this conversation.
No Reviewers
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: jihoson/The-Ouroboros#227