fix: 잔액 부족 주문 실패 후 무한 재시도 (MLECW 사례) #179

Closed
opened 2026-02-20 08:51:22 +09:00 by agentson · 0 comments
Collaborator

문제

잔액 부족으로 주문이 실패한 종목을 매 사이클(60초)마다 계속 재시도함.

관찰된 로그

20:43 WARNING: 모의투자 주문가능금액이 부족합니다. [BUY MLECW NASD qty=44964]
20:44 WARNING: 모의투자 주문가능금액이 부족합니다. [BUY MLECW NASD qty=44964]
20:45 WARNING: 모의투자 주문가능금액이 부족합니다. [BUY MLECW NASD qty=50200]
20:46 WARNING: 모의투자 주문가능금액이 부족합니다. [BUY MLECW NASD qty=50200]
... (20분 이상 지속, qty도 들쭉날쭉)
20:59 WARNING: 모의투자 주문가능금액이 부족합니다. [BUY MLECW NASD qty=53282]

원인

  • Scenario Engine이 매 사이클 MLECW에 BUY(confidence=80) 매칭
  • 주문 실패 후 해당 종목을 일시 제외하는 cooldown 메커니즘 없음
  • 잔액 부족 에러(rt_cd=1)를 일반 오류와 동일하게 처리

추가 이상: qty 불안정

같은 종목의 수량이 매 사이클마다 변동 (44964→50200→55493→52709→58823):

  • 잔고 API 응답 변동 또는 position sizing 계산 불안정 가능성

영향

  • 매 사이클마다 불필요한 KIS API 호출 발생
  • 로그 노이즈로 실제 문제 파악 어려움
  • Rate limit 압박 증가 (실제로 초당 거래건수 초과 에러도 발생 중)

수정 방안

  1. Cooldown 메커니즘: 잔액 부족 실패 시 해당 종목을 N분간 BUY 제외
  2. 잔액 사전 확인: 주문 전 현재 잔액으로 affordable 여부 검증 (이미 quantity <= 0 체크가 있으나 불충분)
  3. qty 안정화: position sizing 함수의 cash 계산 로직 검토

관련 코드

  • src/main.py:623-633 (_determine_order_quantity)
  • src/main.py:690-698 (주문 실패 처리)
  • src/strategy/scenario_engine.py (MLECW BUY 매칭 조건)
## 문제 잔액 부족으로 주문이 실패한 종목을 **매 사이클(60초)마다** 계속 재시도함. ## 관찰된 로그 ``` 20:43 WARNING: 모의투자 주문가능금액이 부족합니다. [BUY MLECW NASD qty=44964] 20:44 WARNING: 모의투자 주문가능금액이 부족합니다. [BUY MLECW NASD qty=44964] 20:45 WARNING: 모의투자 주문가능금액이 부족합니다. [BUY MLECW NASD qty=50200] 20:46 WARNING: 모의투자 주문가능금액이 부족합니다. [BUY MLECW NASD qty=50200] ... (20분 이상 지속, qty도 들쭉날쭉) 20:59 WARNING: 모의투자 주문가능금액이 부족합니다. [BUY MLECW NASD qty=53282] ``` ## 원인 - Scenario Engine이 매 사이클 MLECW에 BUY(confidence=80) 매칭 - 주문 실패 후 해당 종목을 일시 제외하는 cooldown 메커니즘 없음 - 잔액 부족 에러(`rt_cd=1`)를 일반 오류와 동일하게 처리 ## 추가 이상: qty 불안정 같은 종목의 수량이 매 사이클마다 변동 (44964→50200→55493→52709→58823): - 잔고 API 응답 변동 또는 position sizing 계산 불안정 가능성 ## 영향 - 매 사이클마다 불필요한 KIS API 호출 발생 - 로그 노이즈로 실제 문제 파악 어려움 - Rate limit 압박 증가 (실제로 `초당 거래건수 초과` 에러도 발생 중) ## 수정 방안 1. **Cooldown 메커니즘**: 잔액 부족 실패 시 해당 종목을 N분간 BUY 제외 2. **잔액 사전 확인**: 주문 전 현재 잔액으로 affordable 여부 검증 (이미 `quantity <= 0` 체크가 있으나 불충분) 3. **qty 안정화**: position sizing 함수의 cash 계산 로직 검토 ## 관련 코드 - `src/main.py:623-633` (`_determine_order_quantity`) - `src/main.py:690-698` (주문 실패 처리) - `src/strategy/scenario_engine.py` (MLECW BUY 매칭 조건)
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: jihoson/The-Ouroboros#179