kyu c5ef30b2be feat: 모의 자동매매 자동체결 + 손익/이력 조회
- score-engine: TRADE_SETTINGS.auto_execute(기본 True) — auto_trade_scan_job이 제안한
  pending 주문을 즉시 자동 체결(모의). 체결로직을 _fill_order로 추출(수동버튼/자동 공용).
  /trade/history: 체결이력+일별 실현/평가손익+보유 평가손익. (전부 DB 시뮬레이션, 실제 브로커 전송 없음)
- dashboard-api: /api/trade-history 프록시.
- 가드 그대로: 종목당10%·일일손실-3% halt·강력매수+두LLM일치+확신도4·손절-8%·익절+15%.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-03 13:16:30 +09:00
2026-05-20 21:53:56 +09:00

Trading AI

워렌 버핏 스타일 가치투자 관점의 한국 주식 AI 분석 파이프라인. 뉴스·공시·재무·기술적 지표·미증시 동조 시그널을 통합해 종목별 종합 점수와 매수/매도 추천을 산출하고 텔레그램으로 전달한다.


파이프라인

[뉴스 RSS/네이버] → 형태소(바른) → 임베딩(bge-m3) → 중복제거(Qdrant) → 분석(EXAONE)
                                                                       ↓
[DART 공시/재무]  →  재무비율(ROE·OPM·DR·FCF)  →  ┐
[네이버 주가]    →  기술지표(MA/RSI/MACD/볼밴)  →  ┤
[미국 ETF/페어]  →  섹터·페어 회귀 시그널       →  ┼→ 종합 스코어링 → 추천 → 텔레그램
[ECOS 매크로]    →  USD/KRW·국고채10년         →  ┤    (10공식 앙상블)
[그래프 신경망]  →  GAT 다음날 수익률 예측      →  ┘

서비스 구성 (Docker Compose)

서비스 포트 역할
news-collector 8787 뉴스 수집 + 형태소/임베딩/중복제거/EXAONE 분석
bareunaapi 5757 한국어 형태소분석 FastAPI 래퍼
bareun 5656/9902 바른 NLP gRPC 서버
dart-collector 8888 DART 공시/재무제표 수집
score-engine 8686 종합 점수 계산 + 텔레그램 브리핑
ta-engine 8484 기술적분석 (MA/RSI/MACD/볼밴/스토캐스틱)
aux-signal 8282 컨센서스·기관/외국인 수급·ECOS 매크로
us-market 8383 미증시 섹터 ETF·페어 회귀 시그널
graph-engine 9090 GAT 그래프 신경망 (graph_score)
kis-api 8585 네이버모바일 주가 + 매매시그널
dashboard-api 8989 대시보드 REST API + HTML
telegram-bot - /buy /sell /stock /deep /market 명령 처리
ollama 11434 EXAONE 3.5 7.8B 추론 + bge-m3 임베딩
n8n / worker 5678 워크플로우 자동화
postgres 5432 메인 DB
redis 6379 캐시·중복제거
qdrant 6333 뉴스 벡터 유사도 필터

점수 산출

종합점수 = 펀더멘털통합 × 0.24
        + 뉴스(catalyst 가중) × 0.18
        + 기술 × 0.15
        + DART 공시 × 0.10
        + 외국인 수급 × 0.14
        + 공매도 × 0.06
        + 가격 모멘텀 × 0.03
        + DCF 안전마진 × 0.10
        + 시장 레짐 보정 (±5~10)
        + 앙상블 보팅 (±18)   ← 10공식 매수/매도 합 × 학습 가중치

10공식 앙상블 보팅 (각 공식이 독립 신호 발신, 백테스트 회귀로 가중치 학습):

공식 출처 매수 신호 조건
매직포뮬러 Greenblatt ROC + EY ≥ 20
F-Score Piotroski 2000 7신호 ≥ 6
알트만 Z Altman 1968 Z ≥ 2.6
PEG Lynch GARP PER / 이익성장률 ≤ 1.5
12-1 모멘텀 AQR (Carhart) (P_-21 / P_-252) 1 ≥ 10%
Beneish M Beneish 1999 의심도 < 50 + CFO/NI > 1
GP/A Novy-Marx 2013 영업이익/총자산 ≥ 15%
G-Score Mohanram 2005 5신호 vs 섹터 중앙값 ≥ 4
Amihud Amihud 2002 비유동성 ≥ 100 (소형 알파)
BAB(베타) Frazzini-Pedersen β < 0.7 (저베타 알파)

버핏 가치투자 필터 (is_value_investable):

  • 영업이익 > 0
  • ROE ≥ 10%
  • 부채비율 ≤ 200%
  • PER ≤ 60
  • 시총 ≥ 100억
  • dart_corps.is_active = true (상장폐지 제외)

추천 등급 (점수 + 다수 공식 동의 강제):

  • 강력매수: ≥ 70 AND 매수 보팅 ≥ 3
  • 매수관심: ≥ 40 AND 매수 보팅 ≥ 1 AND 매도 보팅 < 2
  • 매도관심: ≤ −30 OR 매도 보팅 ≥ 3
  • 강력매도: ≤ −60 OR 매도 보팅 ≥ 4
  • 그 외 관망

빠른 시작

사전 요구사항

  • Ubuntu 22.04, Docker / Docker Compose
  • GPU 2장 (GPU0: EXAONE 추론용 ≥12GB / GPU1: bge-m3 임베딩용 ≥8GB)
  • NAS NFS 마운트 (/mnt/nas) — PostgreSQL 데이터 영속화용

환경변수

.env 파일 생성 (예시):

POSTGRES_HOST=postgres
POSTGRES_PORT=5432
POSTGRES_DB=trading_ai
POSTGRES_USER=kyu
POSTGRES_PASSWORD=...

REDIS_PASSWORD=...
REDIS_MAX_MEMORY=2gb

DART_API_KEY=...
ECOS_API_KEY=...
FINNHUB_API_KEY=...

TELEGRAM_BOT_TOKEN=...
TELEGRAM_CHAT_ID=...

OLLAMA_NUM_PARALLEL=4
QDRANT_COLLECTION=news_vectors
QDRANT_VECTOR_SIZE=1024

실행

docker compose up -d
docker compose ps                       # 전체 상태
docker logs trading-score-engine -f     # 로그 추적

초기 데이터 로딩

# DART 기업목록 수집
curl -X POST http://localhost:8888/collect/corps

# 다년치 사업보고서 백필 (F-Score·PEG용, years≥2 필수)
curl -X POST 'http://localhost:8888/collect/financials?count=3000&years=10&annual_only=true'

# 섹터 정보 채우기
curl -X POST http://localhost:8888/collect/sectors

# 점수 수동 재계산
curl -X POST http://localhost:8686/score/calculate

# 백테스트 기반 공식 가중치 학습
curl -X POST 'http://localhost:8686/learn-weights?days=90'

주요 API

추천 / 랭킹

# 오늘의 추천 종목
docker exec trading-postgres psql -U kyu -d trading_ai -c "
  SELECT s.stock_code, d.corp_name, s.total_score, s.recommendation,
         s.magic_score, s.f_score, s.buy_votes, s.sell_votes
  FROM stock_scores s JOIN dart_corps d ON d.stock_code=s.stock_code
  WHERE d.is_active=true AND s.score_date=CURRENT_DATE
  ORDER BY s.total_score DESC LIMIT 10;"

# REST
curl http://localhost:8686/recommendations
curl http://localhost:8686/stock/005930        # 삼성전자
curl http://localhost:8686/backtest            # 추천 성과 백테스트
curl http://localhost:8484/technical/005930    # 기술분석
curl http://localhost:8989/api/summary         # 대시보드 요약

학습 / 예측

curl -X POST 'http://localhost:8686/learn-weights?days=90'
curl     http://localhost:8686/learn-weights
curl -X POST  http://localhost:8686/learn-pricing
curl     http://localhost:8686/predict-price/005930

데이터베이스 핵심 테이블

테이블 설명
news_analysis 분석된 뉴스 (sentiment / intensity / catalyst)
news_raw 수집/분석 분리용 임시 저장소
dart_corps DART 기업목록 (is_active=true 필터 필수)
dart_financials 재무제표 + 비율 (ROE / OPM / DR / FCF)
stock_scores 일별 종합 점수 + 10공식 신호 + 가중치
stock_technical 기술지표 + 매매신호
weight_config 공식별 학습 가중치 (자동 갱신)
pricing_model 30일 수익률 회귀/RF 모델 메타

상세 스키마는 CLAUDE.md 참고.


디렉토리 구조

trading/
├── CLAUDE.md                  # 프로젝트 상세 가이드 (Claude Code용)
├── docker-compose.yml         # 전체 서비스 정의
├── init-db.sql                # 초기 스키마
├── news-collector/            # 뉴스 수집·분석
├── bareunaapi/                # 형태소분석 래퍼
├── dart-collector/            # DART 공시·재무
├── score-engine/              # 종합 스코어링
├── ta-engine/                 # 기술적 분석
├── aux-signal/                # 컨센서스·수급·매크로
├── us-market/                 # 미증시 동조 시그널
├── graph-engine/              # GAT 그래프 신경망
├── kis-api/                   # 주가 수집
├── dashboard-api/             # 대시보드 REST
├── telegram-bot/              # 텔레그램 봇
└── scripts/                   # 설치/상태 스크립트

주의사항

  • 모든 추천 쿼리에 WHERE d.is_active=true 필수 (상장폐지 제외).
  • NAS fstab은 반드시 한 줄, nfsvers=3 옵션 필수.
  • Ollama 단일 컨테이너가 GPU0·GPU1을 동시 사용. runtime: nvidia 필요.
  • .env / pg_backup/ / models/ 등 민감 자산은 .gitignore 처리됨.

라이선스

내부 프로젝트.

S
Description
Korean stock value-investing AI pipeline
Readme 2.3 MiB
Languages
Python 80.5%
HTML 16.3%
JavaScript 1.4%
Shell 1.4%
Dockerfile 0.4%