Initial commit: Korean stock value-investing AI pipeline

- 19개 마이크로서비스 (news-collector, score-engine, ta-engine, dart-collector,
  aux-signal, us-market, graph-engine, telegram-bot, dashboard-api, kis-api 등)
- 가치투자 스코어링 + 10공식 앙상블 보팅 (매직포뮬러/F-Score/Altman/PEG/
  모멘텀/Beneish/GP-A/G-Score/Amihud/BAB)
- 뉴스 수집→형태소→임베딩→중복제거→AI분석 파이프라인
- 기술적분석 + GAT 그래프신경망 + 미증시 동조 시그널

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
kyu
2026-05-20 21:33:56 +09:00
commit 6d3b0bacc0
60 changed files with 17818 additions and 0 deletions
+9
View File
@@ -0,0 +1,9 @@
FROM python:3.11-slim
WORKDIR /app
RUN apt-get update && apt-get install -y curl unzip && rm -rf /var/lib/apt/lists/*
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
RUN mkdir -p /app/data /app/logs
EXPOSE 8888
CMD ["python", "-m", "uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8888", "--workers", "1", "--log-level", "info"]
@@ -0,0 +1,51 @@
# docker-compose.yml services: 블록 안에 추가
# ──────────────────────────────────────────
# DART 공시 수집기 172.30.0.17
# ──────────────────────────────────────────
dart-collector:
build:
context: ./dart-collector
dockerfile: Dockerfile
container_name: trading-dart-collector
restart: unless-stopped
ports:
- "8888:8888"
environment:
DART_API_KEY: "${DART_API_KEY}"
REDIS_HOST: redis
REDIS_PASSWORD: "${REDIS_PASSWORD}"
POSTGRES_HOST: "${POSTGRES_HOST}"
POSTGRES_PORT: "${POSTGRES_PORT}"
POSTGRES_DB: "${POSTGRES_DB}"
POSTGRES_USER: "${POSTGRES_USER}"
POSTGRES_PASSWORD: "${POSTGRES_PASSWORD}"
BAREUN_API_URL: "http://bareunaapi:5757"
OLLAMA_URL: "http://ollama:11434"
VLLM_URL: "http://vllm:8000"
QDRANT_URL: "http://qdrant:6333"
TZ: "Asia/Seoul"
networks:
trading-net:
ipv4_address: 172.30.0.17
depends_on:
redis:
condition: service_healthy
bareunaapi:
condition: service_healthy
deploy:
resources:
limits:
cpus: "2.0"
memory: 2G
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:8888/health"]
interval: 30s
timeout: 10s
retries: 5
start_period: 60s
logging:
driver: "json-file"
options:
max-size: "100m"
max-file: "10"
File diff suppressed because it is too large Load Diff
+11
View File
@@ -0,0 +1,11 @@
fastapi==0.111.0
uvicorn[standard]==0.30.1
httpx==0.27.0
redis==5.0.4
asyncpg==0.29.0
apscheduler==3.10.4
orjson==3.10.3
structlog==24.2.0
xmltodict==0.13.0
openpyxl==3.1.2
zipfile36==0.1.3