- #210: init_db()에 WAL 저널 모드 적용 (파일 DB에만, :memory: 제외)
- 대시보드(READ)와 거래루프(WRITE) 동시 접근 시 SQLite 락 오류 방지
- busy_timeout=5000ms 설정
- #213: RATE_LIMIT_RPS 기본값 2.0으로 통일 (.env.example이 5.0으로 잘못 표기됨)
- #216: .env.example 중요 변수 추가 및 정리
- KIS_BASE_URL 모의/실전 URL 주석 명시 (포트 29443 수정 포함)
- MODE, TRADE_MODE, ENABLED_MARKETS, PAPER_OVERSEAS_CASH 추가
- GEMINI_MODEL 업데이트 (gemini-pro → gemini-2.0-flash-exp)
- DASHBOARD 설정 섹션 추가
테스트 2개 추가 (WAL 파일 DB 적용, 메모리 DB 미적용 검증)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Reduce RATE_LIMIT_RPS from 10.0 to 5.0 to prevent "초당 거래건수를
초과하였습니다" (EGW00201) errors from KIS API.
Docker logs showed this was the most frequent error (70% of failures),
occurring when multiple stocks are scanned rapidly.
Changes:
- src/config.py: RATE_LIMIT_RPS 10.0 → 5.0
- .env.example: Update default and add explanation comment
Trade-off: Slower API throughput, but more reliable operation.
Can be tuned per deployment via environment variable.
Fixes: #43
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Add objective external data sources to enhance trading decisions beyond
market prices and user input.
## New Modules
### src/data/news_api.py
- News sentiment analysis with Alpha Vantage and NewsAPI support
- Sentiment scoring (-1.0 to +1.0) per article and aggregated
- 5-minute caching to minimize API quota usage
- Graceful degradation when APIs unavailable
### src/data/economic_calendar.py
- Track major economic events (FOMC, GDP, CPI)
- Earnings calendar per stock
- Event proximity checking for high-volatility periods
- Hardcoded major events for 2026 (no API required)
### src/data/market_data.py
- Market sentiment indicators (Fear & Greed equivalent)
- Market breadth (advance/decline ratios)
- Sector performance tracking
- Fear/Greed score calculation
## Integration
Enhanced GeminiClient to seamlessly integrate external data:
- Optional news_api, economic_calendar, and market_data parameters
- Async build_prompt() includes external context when available
- Backward-compatible build_prompt_sync() for existing code
- Graceful fallback when external data unavailable
External data automatically added to AI prompts:
- News sentiment with top articles
- Upcoming high-impact economic events
- Market sentiment and breadth indicators
## Configuration
Added optional settings to config.py:
- NEWS_API_KEY: API key for news provider
- NEWS_API_PROVIDER: "alphavantage" or "newsapi"
- MARKET_DATA_API_KEY: API key for market data
## Testing
Comprehensive test suite with 38 tests:
- NewsAPI caching, sentiment parsing, API integration
- EconomicCalendar event filtering, earnings lookup
- MarketData sentiment and breadth calculations
- GeminiClient integration with external data sources
- All tests use mocks (no real API keys required)
- 81% coverage for src/data module (exceeds 80% requirement)
## Circular Import Fix
Fixed circular dependency between gemini_client.py and cache.py:
- Use TYPE_CHECKING for imports in cache.py
- String annotations for TradeDecision type hints
All 195 existing tests pass. No breaking changes to existing functionality.
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>