문서 중복·드리프트를 구조적으로 방지하기 위해 SSOT 원칙을 문서 체계에 적용한다. 신규: - docs/README.md: 문서 라우팅/역할/읽기 순서/SSOT 정의 (상대경로 링크) - scripts/validate_docs_sync.py: 가변 수치 하드코딩 금지 + 누락 엔드포인트 검사 수정: - CLAUDE.md: 문서 진입점 추가, SmartScanner 세부 동작 → architecture.md 링크 - README.md: 문서 네비게이션 섹션 추가, 고정 수치/파일별 케이스 수 제거 - docs/commands.md: validate_docs_sync.py 명령 추가; 중복 엔드포인트 2행 제거 - docs/testing.md: 테스트 총량 고정값 → pytest --collect-only -q 동적 확인으로 전환 - docs/ouroboros/82_doc_restructure_plan.md: draft → active, 실행 현황으로 전환 - .gitea/PULL_REQUEST_TEMPLATE.md: Docs Sync 체크리스트 추가 - .gitea/workflows/ci.yml + .github/workflows/ci.yml: validate_docs_sync 단계 추가 검증: - python3 scripts/validate_docs_sync.py: PASS Closes #350
7.2 KiB
The Ouroboros
AI-powered trading agent for global stock markets with self-evolution capabilities.
Documentation Entry
문서 우선순위/역할은 docs/README.md를 기준으로 한다.
Quick Start
# Setup
pip install -e ".[dev]"
cp .env.example .env
# Edit .env with your KIS and Gemini API credentials
# Test
pytest -v --cov=src
# Run (paper trading)
python -m src.main --mode=paper
# Run with dashboard
python -m src.main --mode=paper --dashboard
Telegram Notifications (Optional)
Get real-time alerts for trades, circuit breakers, and system events via Telegram.
Quick Setup
- Create bot: Message @BotFather on Telegram →
/newbot - Get chat ID: Message @userinfobot →
/start - Configure: Add to
.env:TELEGRAM_BOT_TOKEN=1234567890:ABCdefGHIjklMNOpqrsTUVwxyz TELEGRAM_CHAT_ID=123456789 TELEGRAM_ENABLED=true - Test: Start bot conversation (
/start), then run the agent
Full documentation: src/notifications/README.md
What You'll Get
- 🟢 Trade execution alerts (BUY/SELL with confidence)
- 🚨 Circuit breaker trips (automatic trading halt)
- ⚠️ Fat-finger rejections (oversized orders blocked)
- ℹ️ Market open/close notifications
- 📝 System startup/shutdown status
Interactive Commands
With TELEGRAM_COMMANDS_ENABLED=true (default), the bot supports 9 bidirectional commands: /help, /status, /positions, /report, /scenarios, /review, /dashboard, /stop, /resume.
Fail-safe: Notifications never crash the trading system. Missing credentials or API errors are logged but trading continues normally.
Smart Volatility Scanner (Optional)
Python-first filtering pipeline that reduces Gemini API calls by pre-filtering stocks using technical indicators.
How It Works
- Fetch Rankings — KIS API volume surge rankings (top 30 stocks)
- Python Filter — RSI + volume ratio calculations (no AI)
- Volume > 200% of previous day
- RSI(14) < 30 (oversold) OR RSI(14) > 70 (momentum)
- AI Judgment — Only qualified candidates (1-3 stocks) sent to Gemini
Configuration
Add to .env (optional, has sensible defaults):
RSI_OVERSOLD_THRESHOLD=30 # 0-50, default 30
RSI_MOMENTUM_THRESHOLD=70 # 50-100, default 70
VOL_MULTIPLIER=2.0 # Volume threshold (2.0 = 200%)
SCANNER_TOP_N=3 # Max candidates per scan
Benefits
- Reduces API costs — Process 1-3 stocks instead of 20-30
- Python-based filtering — Fast technical analysis before AI
- Evolution-ready — Selection context logged for strategy optimization
- Fault-tolerant — Falls back to static watchlist on API failure
Trading Mode Integration
Smart Scanner behavior and mode integration are defined in docs/architecture.md.
Documentation
- Workflow Guide — Git workflow policy and agent-based development
- Command Reference — Common failures, build commands, troubleshooting
- Architecture — System design, components, data flow
- Context Tree — L1-L7 hierarchical memory system
- Testing — Test structure, coverage requirements, writing tests
- Agent Policies — Prime directives, constraints, prohibited actions
- Requirements Log — User requirements and feedback tracking
- Live Trading Checklist — 모의→실전 전환 체크리스트
Core Principles
- Safety First — Risk manager is READ-ONLY and enforces circuit breakers
- Test Everything — 80% coverage minimum, all changes require tests
- Issue-Driven Development — All work goes through Gitea issues → feature branches → PRs
- Agent Specialization — Use dedicated agents for design, coding, testing, docs, review
Requirements Management
User requirements and feedback are tracked in docs/requirements-log.md:
- New requirements are added chronologically with dates
- Code changes should reference related requirements
- Helps maintain project evolution aligned with user needs
- Preserves context across conversations and development cycles
Project Structure
src/
├── analysis/ # Technical analysis (RSI, volatility, smart scanner)
├── backup/ # Disaster recovery (scheduler, cloud storage, health)
├── brain/ # Gemini AI decision engine (prompt optimizer, context selector)
├── broker/ # KIS API client (domestic + overseas)
├── context/ # L1-L7 hierarchical memory system
├── core/ # Risk manager (READ-ONLY)
├── dashboard/ # FastAPI read-only monitoring (endpoint details: docs/commands.md)
├── data/ # External data integration (news, market data, calendar)
├── evolution/ # Self-improvement (optimizer, daily review, scorecard)
├── logging/ # Decision logger (audit trail)
├── markets/ # Market schedules and timezone handling
├── notifications/ # Telegram alerts + bidirectional commands (9 commands)
├── strategy/ # Pre-market planner, scenario engine, playbook store
├── db.py # SQLite trade logging
├── main.py # Trading loop orchestrator
└── config.py # Settings (from .env)
tests/ # Test suite (details: docs/testing.md)
docs/ # Extended documentation
Key Commands
pytest -v --cov=src # Run tests with coverage
ruff check src/ tests/ # Lint
mypy src/ --strict # Type check
python -m src.main --mode=paper # Paper trading
python -m src.main --mode=paper --dashboard # With dashboard
python -m src.main --mode=live # Live trading (⚠️ real money)
# Gitea workflow (requires tea CLI)
YES="" ~/bin/tea issues create --repo jihoson/The-Ouroboros --title "..." --description "..."
YES="" ~/bin/tea pulls create --head feature-branch --base main --title "..." --description "..."
Markets Supported
- 🇰🇷 Korea (KRX)
- 🇺🇸 United States (NASDAQ, NYSE, AMEX)
- 🇯🇵 Japan (TSE)
- 🇭🇰 Hong Kong (SEHK)
- 🇨🇳 China (Shanghai, Shenzhen)
- 🇻🇳 Vietnam (Hanoi, HCM)
Markets auto-detected based on timezone and enabled in ENABLED_MARKETS env variable.
Critical Constraints
⚠️ Non-Negotiable Rules (see docs/agents.md):
src/core/risk_manager.pyis READ-ONLY — changes require human approval- Circuit breaker at -3.0% P&L — may only be made stricter
- Fat-finger protection: max 30% of cash per order — always enforced
- Confidence 임계값 (market_outlook별, 낮출 수 없음): BEARISH ≥ 90, NEUTRAL/기본 ≥ 80, BULLISH ≥ 75
- All code changes → corresponding tests → coverage ≥ 80%
Contributing
See docs/workflow.md for the complete development process.
TL;DR:
- Create issue in Gitea
- Create feature branch:
feature/issue-N-description - Implement with tests
- Open PR
- Merge after review