From 0659cc0aca3f924ad862bac39076c2b77f57fee1 Mon Sep 17 00:00:00 2001 From: agentson Date: Tue, 17 Feb 2026 05:57:56 +0900 Subject: [PATCH] docs: reflect overseas ranking integration and volatility-first selection --- docs/architecture.md | 41 +++++++++++++++++++++++++++++----------- docs/requirements-log.md | 28 +++++++++++++++++++++++++++ 2 files changed, 58 insertions(+), 11 deletions(-) diff --git a/docs/architecture.md b/docs/architecture.md index 30d5d62..0410ec5 100644 --- a/docs/architecture.md +++ b/docs/architecture.md @@ -69,6 +69,10 @@ High-frequency trading with individual stock analysis: - `get_next_market_open()` finds next market to open and when - 10 global markets defined (KR, US_NASDAQ, US_NYSE, US_AMEX, JP, HK, CN_SHA, CN_SZA, VN_HNX, VN_HSX) +**Overseas Ranking API Methods** (added in v0.10.x): +- `fetch_overseas_rankings()` — Fetch overseas ranking universe (fluctuation / volume) +- Ranking endpoint paths and TR_IDs are configurable via environment variables + ### 2. Analysis (`src/analysis/`) **VolatilityAnalyzer** (`volatility.py`) — Technical indicator calculations @@ -82,14 +86,20 @@ High-frequency trading with individual stock analysis: **SmartVolatilityScanner** (`smart_scanner.py`) — Python-first filtering pipeline -- **Step 1**: Fetch volume rankings from KIS API (top 30 stocks) -- **Step 2**: Calculate RSI and volume ratio for each stock -- **Step 3**: Apply filters: +- **Domestic (KR)**: + - **Step 1**: Fetch volume rankings from KIS API (top 30 stocks) + - **Step 2**: Calculate RSI and volume ratio for each stock + - **Step 3**: Apply filters: - Volume ratio >= `VOL_MULTIPLIER` (default 2.0x previous day) - RSI < `RSI_OVERSOLD_THRESHOLD` (30) OR RSI > `RSI_MOMENTUM_THRESHOLD` (70) -- **Step 4**: Score candidates by RSI extremity (60%) + volume surge (40%) -- **Step 5**: Return top N candidates (default 3) for AI analysis -- **Fallback**: Uses static watchlist if ranking API unavailable + - **Step 4**: Score candidates by RSI extremity (60%) + volume surge (40%) +- **Overseas (US/JP/HK/CN/VN)**: + - **Step 1**: Fetch overseas ranking universe (fluctuation rank + volume rank bonus) + - **Step 2**: Compute volatility-first score (max of daily change% and intraday range%) + - **Step 3**: Apply liquidity bonus from volume ranking + - **Step 4**: Return top N candidates (default 3) +- **Fallback (overseas only)**: If ranking API is unavailable, uses dynamic universe + from runtime active symbols + recent traded symbols + current holdings (no static watchlist) - **Realtime mode only**: Daily mode uses batch processing for API efficiency ### 3. Brain (`src/brain/`) @@ -363,11 +373,13 @@ High-frequency trading with individual stock analysis: │ ▼ ┌──────────────────────────────────┐ - │ Smart Scanner (Python-first) │ - │ - Fetch volume rankings (KIS) │ - │ - Get 20d price history per stock│ - │ - Calculate RSI(14) + vol ratio │ - │ - Filter: vol>2x AND RSI extreme │ + │ Smart Scanner (Python-first) │ + │ - Domestic: fluctuation rank │ + │ + volume rank bonus │ + │ + volatility-first scoring │ + │ - Overseas: ranking universe │ + │ + volatility-first scoring │ + │ - Fallback: dynamic universe │ │ - Return top 3 qualified stocks │ └──────────────────┬───────────────┘ │ @@ -568,6 +580,13 @@ S3_REGION=... NEWS_API_KEY=... NEWS_API_PROVIDER=... MARKET_DATA_API_KEY=... + +# Overseas Ranking API (optional override; account-dependent) +OVERSEAS_RANKING_ENABLED=true +OVERSEAS_RANKING_FLUCT_TR_ID=HHDFS76200100 +OVERSEAS_RANKING_VOLUME_TR_ID=HHDFS76200200 +OVERSEAS_RANKING_FLUCT_PATH=/uapi/overseas-price/v1/quotations/inquire-updown-rank +OVERSEAS_RANKING_VOLUME_PATH=/uapi/overseas-price/v1/quotations/inquire-volume-rank ``` Tests use in-memory SQLite (`DB_PATH=":memory:"`) and dummy credentials via `tests/conftest.py`. diff --git a/docs/requirements-log.md b/docs/requirements-log.md index 8522657..81a82f8 100644 --- a/docs/requirements-log.md +++ b/docs/requirements-log.md @@ -111,3 +111,31 @@ - 이전 시도(2개 커밋)는 기존 내용을 과도하게 삭제하여 폐기, main 기준으로 재작업 **이슈/PR:** #131, PR #134 + +### 해외 스캐너 개선: 랭킹 연동 + 변동성 우선 선별 + +**배경:** +- `run_overnight` 실운영에서 미국장 동안 거래가 0건 지속 +- 원인: 해외 시장에서도 국내 랭킹/일봉 API 경로를 사용하던 구조적 불일치 + +**요구사항:** +1. 해외 시장도 랭킹 API 기반 유니버스 탐색 지원 +2. 단순 상승률/거래대금 상위가 아니라, **변동성이 큰 종목**을 우선 선별 +3. 고정 티커 fallback 금지 + +**구현 결과:** +- `src/broker/overseas.py` + - `fetch_overseas_rankings()` 추가 (fluctuation / volume) + - 해외 랭킹 API 경로/TR_ID를 설정값으로 오버라이드 가능하게 구현 +- `src/analysis/smart_scanner.py` + - market-aware 스캔(국내/해외 분리) + - 해외: 랭킹 API 유니버스 + 변동성 우선 점수(일변동률 vs 장중 고저폭) + - 거래대금/거래량 랭킹은 유동성 보정 점수로 활용 + - 랭킹 실패 시에는 동적 유니버스(active/recent/holdings)만 사용 +- `src/config.py` + - `OVERSEAS_RANKING_*` 설정 추가 + +**효과:** +- 해외 시장에서 스캐너 후보 0개로 정지되는 상황 완화 +- 종목 선정 기준이 단순 상승률 중심에서 변동성 중심으로 개선 +- 고정 티커 없이도 시장 주도 변동 종목 탐지 가능