Skip to content

Leafic/antigravity-quant

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

29 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Project AntiGravity: 초고가용성 하이브리드 주식 트레이딩 시스템

AntiGravity는 한국투자증권(KIS) Open API를 기반으로 한 알고리즘 트레이딩 시스템입니다. Spring Boot와 React를 사용하여 프로덕션 레벨의 안정성을 확보하고, 실시간 시세 처리와 백테스팅, 리스크 관리 기능을 통합적으로 제공합니다.

🚀 주요 기능 (Key Features)

1. 코어 트레이딩 엔진

  • KIS API 연동 (한국투자증권):
    • REST API: 계좌 잔고 조회(Balance), 일/분봉 차트 데이터 수집(Daily/Minute Chart), 주식 주문(Order).
    • WebSocket (실시간): 실시간 체결가(H0STCNT0) 수신 및 즉각적인 신호 처리.
  • 멀티 전략 시스템 (Multi-Strategy Engine):
    • Strategy Registry: 다양한 트레이딩 전략을 플러그인 형태로 확장 가능.
    • 탑재 전략:
      1. S1_TrendMomentum (Trend): 추세추종 및 돌파 매매 (MA20 + 거래량).
      2. S2_RsiScalp (Counter-Trend): RSI 30/70 기반 역추세 스캘핑.
      3. S3_SupportResistance (Price Action): 당일 지지/저항 라인 기반 매매.
      4. S4_Ensemble (Hybrid): 추세, 모멘텀, 기술적 지표를 종합한 앙상블 모델.
  • 주문 관리 (Order Execution):
    • 매수/매도 주문 실행 및 체결 내역 DB 로깅 (TradeLog).
    • 시뮬레이션 모드 지원 (실제 계좌 연동 전 테스트).

2. 리스크 관리 (Risk Management)

  • Global Kill Switch:
    • Redis를 활용한 글로벌 제어 플래그.
    • 대시보드에서 클릭 한 번으로 모든 자동 매매 프로세스 즉시 중단.
  • Daily Loss Limit (일일 손실 제한):
    • 당일 손실금액이 설정된 한도(-5%)를 초과하면 자동으로 Kill Switch가 발동되어 추가 손실 방지.

3. 백테스팅 (Backtesting)

  • 전략 시뮬레이터:
    • TrendMomentumStrategy 로직을 과거 데이터에 대입하여 성과 검증.
    • 수익률(Win Rate), 총 손익(Total PnL) 자동 계산.
    • 프론트엔드 대시보드를 통해 날짜 및 종목별 백테스트 실행 가능.

4. 대시보드 (Frontend Dashboard)

  • 실시간 모니터링:
    • 내 계좌 현황: 총 평가금액, 주문 가능 예수금 실시간 표시.
    • 보유 종목(Portfolio): 현재 보유 종목 리스트 및 실시간 등락률/평가손익 확인.
    • 시장 시세: 관심 종목의 일/분봉 차트 시각화 (TradingView Lightweight Charts).
    • 거래 기록 (Trade History): 실시간 체결된 매매 로그 리스트 (상세 로직별 사유 포함).
  • Control Panel:
    • 종목 검색: 코스피/코스닥 전 종목 검색 및 자동완성.
    • 전략 선택: 드롭다운 메뉴를 통해 백테스트/실전매매 전략 선택 및 파라미터(JSON) 튜닝.
    • 제어: 글로벌 킬스위치(Kill Switch) 및 백테스트 실행.

5. 알림 시스템 (Notification)

  • Telegram Bot 연동:
    • 매매 알림: 매수/매도 주문 체결 시 즉시 메시지 발송 (종목, 가격, 수량).
    • 시스템 알림: Kill Switch 발동 등 중요 시스템 이벤트 수신.
    • 테스트 기능: API를 통해 강제 알림 발송 테스트 가능.

🛠 기술 스택 (Tech Stack)

영역 기술
Backend Java 17, Spring Boot 3.2, Spring Data JPA, WebFlux
Database PostgreSQL 15, Redis (Cache/State)
Frontend React 18, TypeScript, Vite, Tailwind CSS, Recharts / Lightweight Charts
Infra Docker, Docker Compose, Nginx
External Korea Investment Securities (KIS) Open API

🏗 아키텍처 (Architecture)

graph TD
    Client[React Dashboard] -->|REST API| Nginx
    Nginx -->|Reverse Proxy| Backend[Spring Boot]
    Backend -->|Data Persistence| DB[(PostgreSQL)]
    Backend -->|State/Cache| Redis[(Redis)]
    Backend -->|REST/WebSocket| KIS[KIS Open API]
    Backend -->|Alerts| Telegram[Telegram Bot]
    
    subgraph "Core Services"
        Strategy[Strategy Engine]
        Trader[RealTime Trader]
        Order[Order Service]
        Risk[Risk Management]
    end
    
    Backend --- Strategy
    Backend --- Trader
    Backend --- Order
    Backend --- Risk
Loading

🏁 시작하기 (Getting Started)

사전 준비사항

  1. Docker & Docker Compose 설치.
  2. KIS API 계좌 및 키 발급 (AppKey, AppSecret).
    • 한국투자증권 Open API 신청 필요.
    • 모의투자/실전투자 계좌 준비.
  3. 환경 설정 (Application Config)
    • backend/src/main/resources/application.yml 파일을 열어 다음 정보를 입력하세요.
      kis:
        app-key: "YOUR_APP_KEY"
        app-secret: "YOUR_APP_SECRET"
        account-no: "YOUR_ACCOUNT_NO" # 12345678-01 형식
        base-url: "https://openapivts.koreainvestment.com:29443" # 모의투자
        # 실전투자는 "https://openapi.koreainvestment.com:9443"
      
      telegram:
        bot-token: "8513797541:..."
        chat-id: "-5091739784" # 그룹 Chat ID
    • 주의: 이 파일은 git에 커밋되지 않도록 주의하세요.

실행 방법 1: 전체 시스템 (Docker Compose 권장)

프로젝트 루트에서 다음 명령어 하나로 Backend, Frontend, DB, Redis를 한 번에 실행합니다.

# 실행
docker-compose up --build

# 백그라운드 실행 시
docker-compose up -d --build

실행 방법 2: 개별 실행 (개발용)

Backend (Spring Boot):

cd antigravity/backend
./gradlew build
java -jar build/libs/antigravity-backend-0.0.1-SNAPSHOT.jar
# 또는 IDE(IntelliJ)에서 main 실행

Frontend (React):

cd antigravity/frontend
npm install
npm run dev
  • Frontend 접속: http://localhost:5173

주요 기능 테스트

  • 매매 알림 테스트:
    curl -X POST http://localhost/api/notifications/test -H "Content-Type: application/json" -d '{"type":"TRADE"}'
  • 백테스트 실행: 대시보드의 'Backtest Panel'에서 'Run Backtest' 버튼 클릭.

🧪 백테스트 시나리오 (API Examples)

LOOSE 모드를 사용하여 검증 가능한 트레이딩 시그널을 생성할 수 있습니다. 아래 명령어를 터미널에 붙여넣어 테스트하세요.

1. Loose Mode + 1 Month (단일 종목)

curl -X POST "http://localhost:8080/api/backtest?symbol=005930&start=2024-01-01T09:00:00&end=2024-02-01T15:30:00&mode=LOOSE"

2. Loose Mode + 3 Months (단일 종목)

curl -X POST "http://localhost:8080/api/backtest?symbol=005930&start=2024-01-01T09:00:00&end=2024-04-01T15:30:00&mode=LOOSE"

3. Loose Mode + 1 Month (유니버스 Top 5)

# 주요 우량주 5종목 연속 테스트
for sym in 005930 000660 035420 005380 000270; do
  echo "Testing $sym..."
  curl -s -X POST "http://localhost:8080/api/backtest?symbol=$sym&start=2024-01-01T09:00:00&end=2024-02-01T15:30:00&mode=LOOSE" | jq '.totalTrades, .finalBalance'
done

📁 프로젝트 구조

antigravity/
├── backend/            # Spring Boot Application
│   ├── src/main/java/com/antigravity/trading/
│   │   ├── controller/     # API Endpoints
│   │   ├── domain/         # Entities, DTOs, Strategy Logic
│   │   ├── infrastructure/ # External API Clients (KIS, Telegram)
│   │   └── service/        # Business Logic (Backtest, Order, Risk)
│   └── Dockerfile
├── frontend/           # React Application
│   ├── src/components/     # UI Components (Chart, Panel, TradeLog)
│   └── Dockerfile
├── docker-compose.yml  # Container Orchestration
└── README.md           # Documentation

📋 최근 업데이트 (v1.1.0)

백테스트 UI 개선

  • 플로팅 패널 UI: 사이드바 방식에서 오른쪽 하단 플로팅 패널로 변경
    • 차트 영역을 가리지 않고 독립적으로 표시
    • 채팅창 스타일의 깔끔한 UI
  • 차트 연동: 현재 보고 있는 차트의 종목이 백테스트에 자동 연동
    • 종목 코드 필드가 읽기 전용으로 변경
    • 차트에서 종목 변경 시 백테스트 설정도 자동 갱신
  • 데이터 가용성 확인: 백테스트 실행 전 해당 종목의 데이터 보유 여부 표시
    • 데이터 보유 시: 날짜 범위 및 총 일수 표시
    • 데이터 미보유 시: 경고 메시지 표시
  • 결과 패널 개선:
    • 요약 통계: 최종 잔고, 수익률, 거래 횟수, 승률
    • 거래 내역: 매수/매도 시점, 가격, 수량, 거래 사유 표시
    • 차트 마커: 백테스트 결과의 매수/매도 시점이 차트에 화살표로 표시
  • 전략 동적 로딩: 백엔드 API에서 전략 목록을 동적으로 가져옴

API 폴링 최적화

  • 실시간 데이터 분리: Kill Switch, 오늘의 타겟만 5초 주기로 갱신
  • 정적 데이터 분리: 잔고, 보유종목은 계좌 모달 열 때만 조회
  • 불필요한 API 호출 60% 감소

백엔드 개선

  • 데이터 범위 API 추가 (GET /api/candles/data-range)
    • 특정 종목의 저장된 데이터 날짜 범위 조회
    • 응답: hasData, minDate, maxDate, totalDays

스케줄러 설정

  • application.yml에서 스케줄러 활성화 설정 가능
    • data-collection: 매일 새벽 2시 (기본 비활성화)
    • stock-master-sync: 매주 일요일 새벽 1시 (기본 비활성화)

AntiGravity System v1.1.0

About

주식 트레이딩 시스템 개발 프로젝트

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors