bug: KR 세션별 거래소 미분리 — 스크리닝/주문/이중상장 우선순위 미처리 #409
Reference in New Issue
Block a user
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
현상
2026-03-04 08:20 KST, NXT_PRE 세션에서 0001A0 BUY 텔레그램 알림 수신.
실제 계좌 확인 시 주문 자체가 없었음.
원인 분석
로그 및 KIS 공식 문서(
docs/한국투자증권_오픈API_전체문서_20260221_030000.xlsx) 검토 결과,세션별 거래소 분리가 전혀 되어 있지 않아 3가지 버그가 연쇄 발생.
Bug 1: 스크리닝 — 세션과 무관하게 KRX만 조회
fetch_market_rankings에서FID_COND_MRKT_DIV_CODE가 항상"J"(KRX) 하드코딩.NXT_PRE / NXT_AFTER 세션에서도 KRX 랭킹을 가져옴.
KIS 공식 문서 기준:
"J"= KRX"NX"= NXTFHPST01710000,FHPST01700000모두NX지원필요 동작: NXT_PRE / NXT_AFTER →
"NX", KRX_REG →"J"Bug 2: 주문 — EXCG_ID_DVSN_CD 미지정으로 KRX 기본값 전송
send_order바디에EXCG_ID_DVSN_CD없음 → KIS 기본값 KRX으로 라우팅.NXT_PRE 세션에서 NXT 종목에 주문을 넣어도 KRX로 전송됨.
KRX 프리마켓 수신 시작(08:20) 후
rt_cd=0반환되나, 거래소 매칭에서 드롭.봇은 성공으로 판단 → 텔레그램 알림 오발송 + 유령 포지션 DB 기록.
필요 동작: 세션 기준으로
"KRX"또는"NXT"명시Bug 3: 이중 상장 종목 — 거래소 우선순위 미고려
KRX + NXT 동시 상장 종목의 경우, 어느 거래소로 주문할지 판단 로직 없음.
스프레드·유동성 비교 또는 SOR(Smart Order Routing) 활용 필요.
재현 조건
NXT_PRE(08:00 ~ 08:50 KST)수정 방향
"J""J"/"NX"분기관련 파일
src/broker/kis_api.py—fetch_market_rankings,send_ordersrc/core/order_policy.py—classify_session_idsrc/analysis/smart_scanner.py—_scan_domesticStatus: OBSERVING (blocked by runtime anomalies)
Observed At: 2026-03-04 10:22 KST, 2026-03-04 01:22 UTC
Environment: live
What was done:
feature/issue-409-kr-session-exchange-routing기준으로 런타임 재시작 시도scripts/run_overnight.sh재시작 후 live process 생존 확인 시도.venv/bin/python -m src.main --mode=live --dashboard) 후 관측 루프 시작Observed:
session=KRX_REG)runtime_verify_monitor.sh도 no-match 경로에서 조기 종료되어 24h unattended 관측이 실패Evidence:
data/overnight/run_manual_issue409_20260304_102209.logdata/overnight/manual_issue409_monitor_20260304_102231.logdata/overnight/runtime_verify_20260304_101940.logLinked anomaly tickets:
Next: