EthiBot/아이디어

강화학습으로 주식 트레이딩 AI 만들기 - PPO 알고리즘 활용기

EthiStudio 2026. 1. 28. 13:54

🤖 강화학습으로 주식 트레이딩 AI 만들기

PPO 알고리즘과 Gymnasium 환경으로 구축하는 자동매매 시스템

📅 2026년 1월 ⏱️ 15분 읽기 💻 Python • SB3 • AI강화학습 • KIS

💡 개발 배경

주식 거래에서 감정을 배제하고 일관성 있는 의사결정을 내리기 위해 강화학습 기반의 트레이딩 시스템을 개발하고 있습니다. 기존의 규칙 기반 전략이 아닌, 실제 시장 데이터에서 스스로 학습하는 AI 에이전트를 통해 더 유연하고 적응력 있는 매매 시스템을 구현하고자 합니다.

🎯 프로젝트 개요

이 프로젝트는 강화학습(Reinforcement Learning)을 활용하여 실시간 주식 시장에서 매수/매도 결정을 내리는 AI 트레이딩 시스템입니다. Proximal Policy Optimization(PPO) 알고리즘을 사용하여 에이전트를 학습시키고, 한국투자증권 API를 통해 실제 거래를 수행하는 자동매매 봇을 구현하고 있습니다.

PPO
학습 알고리즘
7
State Features
3
Actions

🛠️ 기술 스택

Stable-Baselines3

PyTorch 기반의 강화학습 라이브러리로, PPO 알고리즘 구현에 사용. 안정적이고 검증된 알고리즘을 제공합니다.

Gymnasium

OpenAI Gym의 후속 프로젝트로, 표준화된 강화학습 환경을 제공. 커스텀 트레이딩 환경을 구현했습니다.

PPO Algorithm

Proximal Policy Optimization - 학습 안정성이 뛰어난 정책 그래디언트 알고리즘. 복잡한 의사결정 문제에 적합합니다.

PyQt5 GUI

학습 모니터링과 실시간 거래 관리를 위한 데스크톱 애플리케이션 인터페이스를 제공합니다.

🧠 강화학습 환경 설계

State Space (관찰 공간)

AI 에이전트가 시장을 판단하기 위해 다음 7가지 특성을 관찰합니다:

  • 가격 변동률 - 전봉 대비 현재 가격 변화율
  • 이평선 이격도 - 20일 이동평균선 대비 현재 가격 위치
  • RSI (정규화) - 0~1 범위로 정규화된 상대강도지수
  • MACD 히스토그램 - 모멘텀 지표
  • 포지션 보유 여부 - 현재 주식 보유 상태 (0 또는 1)
  • 손익률 - 보유 중인 경우 매수가 대비 현재 수익률
  • 거래대금 (로그 스케일) - 로그 스케일로 정규화된 거래대금
observation_space = spaces.Box(
    low=np.array([-1.0, -1.0, 0.0, -np.inf, 0.0, -1.0, 0.0]),
    high=np.array([1.0, 1.0, 1.0, np.inf, 1.0, 5.0, np.inf]),
    dtype=np.float32
)

Action Space (행동 공간)

에이전트는 매 스텝마다 3가지 행동 중 하나를 선택합니다:

  • 0: Hold - 현재 상태 유지
  • 1: Buy - 매수 (보유 중이 아닐 때만 실행)
  • 2: Sell - 매도 (보유 중일 때만 실행)

보상 함수 (Reward Function)

학습의 핵심인 보상 함수는 다음 요소들을 고려하여 설계했습니다:

  1. 로그 수익률 기반 보상 - 자산 가치 변화에 대한 안정적인 학습
  2. 거래 빈도 페널티 - 과도한 매매를 방지하기 위한 작은 비용 부과
  3. 손실 페널티 강화 - -3% 이상 손실 시 중간 페널티, -5% 이상 손실 시 강한 페널티를 부여하여 손절 유도
  4. 보상 범위 제한 - [-10, 10] 범위로 클리핑하여 학습 안정성 확보

🎓 모델 학습 프로세스

하이퍼파라미터 설정

PPO 모델의 최적 성능을 위해 다음 파라미터를 사용합니다:

  • Learning Rate: 0.0003
  • N Steps: 2048 (롤아웃 스텝 수)
  • Batch Size: 64
  • N Epochs: 10 (각 롤아웃마다 학습 반복)
  • Gamma: 0.99 (할인율)
  • GAE Lambda: 0.95
  • Clip Range: 0.2

Champion/Challenger 시스템

모델 버전 관리를 위해 ModelManager 클래스를 구현했습니다. 새로 학습된 모델(Challenger)이 기존 최고 모델(Champion)보다 높은 성능을 보이면 자동으로 승급시키는 시스템입니다.

  • 통합 ZIP 파일로 모든 종목의 Best 모델 관리
  • 성능 기록부(Registry)를 통한 스코어 추적
  • 학습 중 체크포인트 자동 저장 (10,000 스텝마다)
  • 평가 콜백을 통한 최고 성능 모델 자동 저장

🚀 실시간 트레이딩 전략

학습된 모델은 AIStrategy 클래스를 통해 실제 거래 시스템에 통합됩니다. 실시간으로 시장 데이터를 받아 State를 구성하고, 모델의 예측을 바탕으로 매수/매도 결정을 내립니다.

주요 기능

  • 종목별 모델 캐싱 - 각 종목에 특화된 모델을 메모리에 캐싱하여 빠른 추론
  • 통합 챔피언 모델팩 우선 로드 - 최고 성능 모델 자동 적용
  • 실시간 State 생성 - KIS API에서 받은 분봉/일봉 데이터로 기술적 지표 계산
  • 결정론적 추론 - 학습 시와 달리 실전에서는 확률적 행동이 아닌 최적 행동 선택

📊 백테스팅 엔진

실제 거래 전 모델의 성능을 검증하기 위해 BacktestEngine을 구현했습니다. 과거 데이터를 사용하여 가상 계좌에서 모델의 거래 성과를 시뮬레이션합니다.

🎯 백테스팅 특징

  • SQLite 데이터베이스에서 과거 차트 데이터 로드
  • 가상 계좌를 통한 잔고/포지션 관리
  • 거래 비용, 슬리피지 등 실제 거래 조건 반영
  • TensorBoard를 통한 학습 진행 상황 시각화

🔮 향후 개선 방향

  • 멀티모달 학습 - 뉴스 감성 분석, 거래량 패턴 등 추가 피처 통합
  • 포트폴리오 최적화 - 여러 종목 간 자금 배분 학습
  • Ensemble 전략 - 여러 모델의 예측을 결합하여 안정성 향상
  • A2C, SAC 등 다른 RL 알고리즘 실험
  • 실시간 재학습 파이프라인 - 최신 시장 데이터로 모델 지속 업데이트

💭 마치며

강화학습을 통한 트레이딩 시스템 개발은 매우 도전적이지만 흥미로운 작업입니다. 단순히 백테스팅 성과가 좋다고 해서 실전에서도 성공한다는 보장은 없지만, 시장 변화에 적응하며 학습하는 AI의 가능성은 무궁무진합니다.

앞으로도 지속적으로 모델을 개선하고, 다양한 시장 상황에서의 성능을 검증하며 안정적이고 수익성 있는 자동매매 시스템을 만들어가겠습니다.