fix: SELL 주문에서 Fat Finger 오탐 수정 — 손절/익절 차단 버그 (#187)
Some checks failed
CI / test (pull_request) Has been cancelled
Some checks failed
CI / test (pull_request) Has been cancelled
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>
This commit is contained in:
30
src/main.py
30
src/main.py
@@ -660,12 +660,17 @@ async def trading_cycle(
|
||||
return
|
||||
|
||||
# 5a. Risk check BEFORE order
|
||||
# SELL orders do not consume cash (they receive it), so fat-finger check
|
||||
# is skipped for SELLs — only circuit breaker applies.
|
||||
try:
|
||||
risk.validate_order(
|
||||
current_pnl_pct=pnl_pct,
|
||||
order_amount=order_amount,
|
||||
total_cash=total_cash,
|
||||
)
|
||||
if decision.action == "SELL":
|
||||
risk.check_circuit_breaker(pnl_pct)
|
||||
else:
|
||||
risk.validate_order(
|
||||
current_pnl_pct=pnl_pct,
|
||||
order_amount=order_amount,
|
||||
total_cash=total_cash,
|
||||
)
|
||||
except FatFingerRejected as exc:
|
||||
try:
|
||||
await telegram.notify_fat_finger(
|
||||
@@ -1123,12 +1128,17 @@ async def run_daily_session(
|
||||
continue
|
||||
|
||||
# Risk check
|
||||
# SELL orders do not consume cash (they receive it), so fat-finger
|
||||
# check is skipped for SELLs — only circuit breaker applies.
|
||||
try:
|
||||
risk.validate_order(
|
||||
current_pnl_pct=pnl_pct,
|
||||
order_amount=order_amount,
|
||||
total_cash=total_cash,
|
||||
)
|
||||
if decision.action == "SELL":
|
||||
risk.check_circuit_breaker(pnl_pct)
|
||||
else:
|
||||
risk.validate_order(
|
||||
current_pnl_pct=pnl_pct,
|
||||
order_amount=order_amount,
|
||||
total_cash=total_cash,
|
||||
)
|
||||
except FatFingerRejected as exc:
|
||||
try:
|
||||
await telegram.notify_fat_finger(
|
||||
|
||||
Reference in New Issue
Block a user