← 전체 프로젝트

AI · DATA · QUANT진행 중

퀀트 트레이딩 시스템

trading-bot

국내와 미국 주식을 같은 이벤트 기반 엔진으로 백테스트하고, 모의투자 상태를 파일로 보존하며, 백테스트 수치가 좋아 보여도 실제로 돈을 넣어도 되는지를 따로 판정하도록 만든 시스템입니다.

기간2026 — 현재
기술 스택Python · Parquet · Backtest · Quant
상태진행 중
저장소공개
PythonParquetBacktestPoint-in-TimeDART

개요

KOSPI/KOSDAQ와 미국 주식을 같은 이벤트 기반 엔진으로 백테스트하고, 모의투자 상태를 파일로 보존하며, 이후 실전 브로커를 붙일 수 있게 만든 프로젝트입니다. v1(백테스트·모의투자) 완료 후 퀀트 투자 시스템으로 확장하고 있습니다.

실수하지 않게 만드는 데 집중한 부분

금융 데이터는 조용히 틀리기 쉽습니다. 결과가 그럴듯해 보이는데 실제로는 미래 정보를 봤거나 오래된 가격에 매매한 경우가 많습니다. 그래서 방어 장치를 설계의 중심에 뒀습니다.

  • Point-in-Time 저장소 — 모든 레코드에 available_at(그 데이터를 실제로 알 수 있게 된 날)을 함께 저장하고, 백테스트는 그 날짜 이전 데이터를 볼 수 없습니다. 미래 정보 유입(look-ahead bias) 차단
  • signal_id 멱등성 원장 — 같은 신호가 재실행돼도 중복 주문이 나가지 않습니다
  • 가격 신선도 가드 — 캐시가 기본 3거래일보다 오래되면 리밸런싱을 건너뜁니다. 수집이 멈춘 채 옛날 가격에 매매하는 것을 막습니다
  • 전략 상태 영속화 — 보유일 카운터가 프로세스 재시작 후에도 복구됩니다
  • 거래소 캘린더 — KR/US 공휴일·조기폐장·지연개장을 세션 클록에 반영
  • 종가 신호는 다음 거래일 시가 체결 — 당일 종가로 당일 체결하는 비현실적 가정을 배제

전략 승격 판정

백테스트 수치가 좋아 보여도 실제로 자금을 넣어도 되는지는 별개 문제입니다. 승격 기준 6개(Walk-forward 승률, 연 회전율, 비용 2배 검정 등)를 실제로 재서 합격·불합격을 판정하는 명령을 따로 만들었습니다.

측정하지 못한 항목은 통과가 아니라 "측정 불가"로 남깁니다. 판정 결과는 저장소 문서에 그대로 기록했고, 현재 테마 멀티팩터 전략은 기준 미달로 모의투자 승격 보류 상태입니다.

구현 범위

  • 백테스트 엔진 — MARKET/LIMIT/STOP/MOC 체결, DAY 만료, 슬리피지, KR/US 수수료 모델, 리스크 제한
  • 연구 프레임워크 — forward return 라벨, Spearman IC, 분위수 분석, Walk-forward, 실험 기록, 팩터 채택 게이트
  • 팩터 — 3·6·12개월(및 12-1) 모멘텀, 수급·가치 팩터, 표준화·가중결합, 200일선 국면 필터
  • 가치투자 프레임워크 — FCFF DCF 엔진, CAPM식 요구수익률·IRR·최대매수가, 시나리오 3-튜플, 역산 DCF. 네트워크 의존 0의 순수 코어
  • 데이터 파이프라인 — KRX 수급·밸류에이션, DART 재무, 시장·거시 시리즈 수집과 품질 검사
  • 리포트 — 자산곡선·드로다운 차트가 포함된 단일 HTML 리포트와 체결 내역 CSV

초보자도 쓸 수 있는 GUI

CLI를 모르는 사람도 쓸 수 있도록 Tkinter GUI를 함께 만들었습니다(추가 의존성 없음).

  • 종목을 이름으로 검색 (예: "삼성전자" → 005930 자동 변환)
  • 실행 전 시세 데이터 자동 받기 — data update를 따로 몰라도 됩니다
  • 백테스트 완료 시 HTML 리포트 자동 열기
  • .bat 더블클릭이면 가상환경 구성까지 자동 수행

CLI와 GUI는 동일한 실행 로직을 공유합니다.