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

Closed
opened 2026-02-21 00:30:14 +09:00 by agentson · 0 comments
Collaborator

문제

SELL 주문 실행 시 Fat Finger 체크가 잘못 발동되어 손절/익절이 차단됨.

원인

validate_order()order_amount / total_cash > 30%를 체크하는데,
SELL 주문의 경우:

  • order_amount = 포지션 보유 가치 (quantity × price)
  • total_cash = 현재 현금 잔고

현금이 적고 포지션 가치가 크면 비율이 30%를 초과해도 SELL은 현금을 쓰는 게 아니라 받는 것이므로 Fat Finger 대상이 아님.

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

JELD: FAT FINGER: Order 49,548 is 99.1% of cash 50,000 (max: 30%) — Stop-loss -6.20%
RXT:  FAT FINGER: Order 88,676 is 177.4% of cash 50,000 (max: 30%) — Take-profit +46.13%

수정 방법

main.py의 두 곳(realtime, daily 사이클)에서:

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

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

영향

  • 손절(stop-loss), 익절(take-profit) SELL 주문이 정상 실행됨
## 문제 SELL 주문 실행 시 Fat Finger 체크가 잘못 발동되어 손절/익절이 차단됨. ### 원인 `validate_order()`는 `order_amount / total_cash > 30%`를 체크하는데, SELL 주문의 경우: - `order_amount` = 포지션 보유 가치 (quantity × price) - `total_cash` = 현재 현금 잔고 현금이 적고 포지션 가치가 크면 비율이 30%를 초과해도 SELL은 현금을 쓰는 게 아니라 받는 것이므로 Fat Finger 대상이 아님. ### 재현된 사례 (2026-02-21 로그) ``` JELD: FAT FINGER: Order 49,548 is 99.1% of cash 50,000 (max: 30%) — Stop-loss -6.20% RXT: FAT FINGER: Order 88,676 is 177.4% of cash 50,000 (max: 30%) — Take-profit +46.13% ``` ### 수정 방법 `main.py`의 두 곳(realtime, daily 사이클)에서: - BUY: 기존대로 `risk.validate_order()` 호출 - SELL: `risk.check_circuit_breaker(pnl_pct)`만 호출 (Fat Finger 스킵) `src/core/risk_manager.py`는 READ-ONLY이므로 `main.py`에서 분기 처리. ### 영향 - 손절(stop-loss), 익절(take-profit) SELL 주문이 정상 실행됨
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: jihoson/The-Ouroboros#187