fix: BUY 결정 전 기존 포지션 체크 추가 — 중복 매수 방지 (#191) #192

Merged
jihoson merged 1 commits from feature/issue-191-duplicate-buy-fix into main 2026-02-21 09:38:59 +09:00
Collaborator

Summary

  • trading_cycle()의 BUY 결정 직후 get_open_position() 체크 추가
  • 이미 보유 중인 종목 재진입 시 HOLD로 전환 (중복 매수 차단)
  • HOLD 변환 후 기존 stop-loss/take-profit 로직이 자연스럽게 이어짐

Root Cause

어제(2026-02-20) 거래 로그에서 NP 7번, KNRX 5번 중복 매수 발생.
get_open_position() 호출이 HOLD 브랜치에만 존재하여, BUY 시그널이
반복되면 동일 종목이 계속 매수되는 버그.

Changes

  • src/main.py (+14 lines): BUY 중복 포지션 체크 블록
  • tests/test_main.py (+158 lines): 테스트 2개
    • test_buy_suppressed_when_open_position_exists: 보유 중 재진입 차단 확인
    • test_buy_proceeds_when_no_open_position: 포지션 없을 때 정상 매수 확인

Test plan

  • pytest tests/test_main.py -v -k "buy_suppressed or buy_proceeds" → 2 passed
  • pytest -v --cov=src → 733 passed (기존 회귀 없음)

Closes #191

🤖 Generated with Claude Code

## Summary - `trading_cycle()`의 BUY 결정 직후 `get_open_position()` 체크 추가 - 이미 보유 중인 종목 재진입 시 HOLD로 전환 (중복 매수 차단) - HOLD 변환 후 기존 stop-loss/take-profit 로직이 자연스럽게 이어짐 ## Root Cause 어제(2026-02-20) 거래 로그에서 NP 7번, KNRX 5번 중복 매수 발생. `get_open_position()` 호출이 `HOLD` 브랜치에만 존재하여, BUY 시그널이 반복되면 동일 종목이 계속 매수되는 버그. ## Changes - `src/main.py` (+14 lines): BUY 중복 포지션 체크 블록 - `tests/test_main.py` (+158 lines): 테스트 2개 - `test_buy_suppressed_when_open_position_exists`: 보유 중 재진입 차단 확인 - `test_buy_proceeds_when_no_open_position`: 포지션 없을 때 정상 매수 확인 ## Test plan - [x] `pytest tests/test_main.py -v -k "buy_suppressed or buy_proceeds"` → 2 passed - [x] `pytest -v --cov=src` → 733 passed (기존 회귀 없음) Closes #191 🤖 Generated with [Claude Code](https://claude.com/claude-code)
agentson added 1 commit 2026-02-21 09:37:59 +09:00
fix: BUY 결정 전 기존 포지션 체크 추가 — 중복 매수 방지 (#191)
Some checks failed
CI / test (pull_request) Has been cancelled
7e9a573390
어제(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>
jihoson merged commit af5bfbac24 into main 2026-02-21 09:38:59 +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#192