fix: SELL 주문에서 Fat Finger 오탐 수정 — 손절/익절 차단 버그 (#187) #188

Merged
jihoson merged 1 commits from feature/issue-187-sell-fat-finger-fix into main 2026-02-21 00:33:46 +09:00
Collaborator

문제

SELL 주문(손절/익절)이 Fat Finger 체크에 막혀 실행되지 않는 버그.

재현 사례 (2026-02-21 로그):

  • JELD: stop-loss -6.20% → FAT FINGER: Order 49,548 is 99.1% of cash 50,000
  • RXT: take-profit +46.13% → FAT FINGER: Order 88,676 is 177.4% of cash 50,000

원인

validate_order()는 order_amount / total_cash > 30%를 검사하는데, SELL의 경우 현금을 소비하지 않고 받는 것이므로 이 비율이 의미 없음.

수정 내용

main.py realtime/daily 사이클 두 곳에서 분기:

  • SELL: risk.check_circuit_breaker(pnl_pct) 만 호출 (Fat Finger 스킵)
  • BUY: 기존대로 risk.validate_order() 호출

src/core/risk_manager.py는 READ-ONLY이므로 main.py에서 처리.

테스트

  • test_sell_skips_fat_finger_check: 대형 포지션 SELL이 Fat Finger 없이 통과
  • test_sell_circuit_breaker_still_applies: SELL도 서킷브레이커는 적용

전체 731개 테스트 통과.

Closes #187

## 문제 SELL 주문(손절/익절)이 Fat Finger 체크에 막혀 실행되지 않는 버그. **재현 사례 (2026-02-21 로그)**: - JELD: stop-loss -6.20% → FAT FINGER: Order 49,548 is 99.1% of cash 50,000 - RXT: take-profit +46.13% → FAT FINGER: Order 88,676 is 177.4% of cash 50,000 ## 원인 validate_order()는 order_amount / total_cash > 30%를 검사하는데, SELL의 경우 현금을 소비하지 않고 받는 것이므로 이 비율이 의미 없음. ## 수정 내용 main.py realtime/daily 사이클 두 곳에서 분기: - SELL: risk.check_circuit_breaker(pnl_pct) 만 호출 (Fat Finger 스킵) - BUY: 기존대로 risk.validate_order() 호출 src/core/risk_manager.py는 READ-ONLY이므로 main.py에서 처리. ## 테스트 - test_sell_skips_fat_finger_check: 대형 포지션 SELL이 Fat Finger 없이 통과 - test_sell_circuit_breaker_still_applies: SELL도 서킷브레이커는 적용 전체 731개 테스트 통과. Closes #187
agentson added 1 commit 2026-02-21 00:32:30 +09:00
fix: SELL 주문에서 Fat Finger 오탐 수정 — 손절/익절 차단 버그 (#187)
Some checks failed
CI / test (pull_request) Has been cancelled
4da22b10eb
SELL 주문은 현금을 소비하지 않고 받는 것이므로 Fat Finger 체크 대상이
아님. 포지션 가치가 잔여 현금의 30%를 초과해도 SELL은 정상 실행돼야 함.

- realtime/daily 사이클 두 곳 모두 수정
- SELL: check_circuit_breaker만 호출 (Fat Finger 스킵)
- BUY: 기존대로 validate_order 호출 (Fat Finger + Circuit Breaker)
- 테스트 2개 추가: SELL Fat Finger 스킵, SELL 서킷브레이커 적용 확인

재현 사례 (2026-02-21):
  JELD stop-loss -6.20% → FAT FINGER: 49,548 is 99.1% of cash 50,000
  RXT take-profit +46.13% → FAT FINGER: 88,676 is 177.4% of cash 50,000

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
jihoson merged commit 04c73a1a06 into main 2026-02-21 00:33:46 +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#188