fix: BUY 결정 전 기존 포지션 체크 추가 — 중복 매수 방지 (#191)
Some checks failed
CI / test (pull_request) Has been cancelled
Some checks failed
CI / test (pull_request) Has been cancelled
어제(2026-02-20) 거래 로그에서 NP 7번, KNRX 5번 중복 매수 발생. trading_cycle()의 BUY 브랜치에 get_open_position() 체크를 추가하여 이미 보유 중인 종목은 HOLD로 전환, 재매수를 차단함. - src/main.py: BUY 결정 직후 기존 포지션 확인 → 있으면 HOLD 변환 - tests/test_main.py: 테스트 2개 추가 - test_buy_suppressed_when_open_position_exists - test_buy_proceeds_when_no_open_position Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
19
src/main.py
19
src/main.py
@@ -510,6 +510,25 @@ async def trading_cycle(
|
||||
),
|
||||
)
|
||||
|
||||
# BUY 결정 전 기존 포지션 체크 (중복 매수 방지)
|
||||
if decision.action == "BUY":
|
||||
existing_position = get_open_position(db_conn, stock_code, market.code)
|
||||
if existing_position:
|
||||
decision = TradeDecision(
|
||||
action="HOLD",
|
||||
confidence=decision.confidence,
|
||||
rationale=(
|
||||
f"Already holding {stock_code} "
|
||||
f"(entry={existing_position['price']:.4f}, "
|
||||
f"qty={existing_position['quantity']})"
|
||||
),
|
||||
)
|
||||
logger.info(
|
||||
"BUY suppressed for %s (%s): already holding open position",
|
||||
stock_code,
|
||||
market.name,
|
||||
)
|
||||
|
||||
if decision.action == "HOLD":
|
||||
open_position = get_open_position(db_conn, stock_code, market.code)
|
||||
if open_position:
|
||||
|
||||
Reference in New Issue
Block a user