fix: KR domestic ranking API returns empty on VTS — add fallback stock list #153

Closed
opened 2026-02-19 09:15:57 +09:00 by agentson · 0 comments
Collaborator

문제

KIS VTS(모의투자) 환경에서 국내 주식 랭킹 API(/uapi/domestic-stock/v1/quotations/volume-rank)가 빈 결과를 반환합니다.

스마트 스캐너는 해외 시장에는 build_overseas_symbol_universe()로 fallback 종목 리스트를 구성하지만,
국내 시장(KR)은 fallback_stocks=None으로 scan()을 호출합니다.

랭킹 API → 빈 결과 → if not fluct_rows: return [] → 항상 "No candidates" → 거래 없음.

재현

개장 후 로그:

Smart Scanner: Scanning Korea Exchange market
Smart Scanner: No candidates for Korea Exchange — no trades

(5분마다 반복, 종일 거래 없음)

원인

src/broker/kis_api.py fetch_market_rankings()data.get("output", [])[:limit] 가 항상 빈 리스트
src/analysis/smart_scanner.py line 128: if not fluct_rows: return []

수정 방향

  1. .envKR_FALLBACK_STOCKS 설정 추가 (기본값: 삼성전자, SK하이닉스 등 주요 종목)
  2. src/config.pyKR_FALLBACK_STOCKS: str 필드 추가
  3. src/main.py에서 KR 시장 scan() 호출 시 fallback 전달 (해외와 동일한 패턴)
  4. 테스트 추가
## 문제 KIS VTS(모의투자) 환경에서 국내 주식 랭킹 API(`/uapi/domestic-stock/v1/quotations/volume-rank`)가 빈 결과를 반환합니다. 스마트 스캐너는 해외 시장에는 `build_overseas_symbol_universe()`로 fallback 종목 리스트를 구성하지만, 국내 시장(KR)은 `fallback_stocks=None`으로 scan()을 호출합니다. 랭킹 API → 빈 결과 → `if not fluct_rows: return []` → 항상 "No candidates" → 거래 없음. ## 재현 개장 후 로그: ``` Smart Scanner: Scanning Korea Exchange market Smart Scanner: No candidates for Korea Exchange — no trades ``` (5분마다 반복, 종일 거래 없음) ## 원인 `src/broker/kis_api.py` `fetch_market_rankings()` → `data.get("output", [])[:limit]` 가 항상 빈 리스트 → `src/analysis/smart_scanner.py` line 128: `if not fluct_rows: return []` ## 수정 방향 1. `.env`에 `KR_FALLBACK_STOCKS` 설정 추가 (기본값: 삼성전자, SK하이닉스 등 주요 종목) 2. `src/config.py`에 `KR_FALLBACK_STOCKS: str` 필드 추가 3. `src/main.py`에서 KR 시장 scan() 호출 시 fallback 전달 (해외와 동일한 패턴) 4. 테스트 추가
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: jihoson/The-Ouroboros#153