포트폴리오 목록
AI

AI 자동매매 시스템

LSTM 기반 주가 예측 모델로 구축한 AI 자동매매 시스템. 데이터 수집부터 모델 학습, 실전 매매 신호 생성까지 전 과정을 자동화했습니다.

AI 자동매매 시스템 스크린샷 1
크게 보기
AI 자동매매 시스템 스크린샷 2
크게 보기
AI 자동매매 시스템 스크린샷 3
크게 보기

프로젝트 소개

주식·코인 시장의 24시간 변동성을 AI로 대응하기 위해 개발한 자동매매 시스템입니다. LSTM(Long Short-Term Memory) 딥러닝 모델로 시계열 주가 데이터를 학습하고, 매매 신호를 자동 생성하여 리스크를 관리합니다.

⚠️ 본 시스템은 교육 및 연구 목적으로 개발되었습니다. 실제 투자 시 충분한 백테스트와 리스크 관리가 필수입니다.

시스템 아키텍처

데이터 수집 → 전처리 → 모델 학습 → 신호 생성 → 주문 실행 → 모니터링

주요 기능

  • 자동 데이터 수집: yfinance로 주가 데이터 및 기술 지표(RSI, MACD) 자동 수집
  • LSTM 예측 모델: 시계열 딥러닝으로 다음날 종가 예측
  • 매매 신호 생성: 예측 등락률 기반 BUY / SELL / HOLD 신호 출력
  • 리스크 관리: 손절매(2%), 포지션 사이징(10%), MDD 제한(15%) 자동 적용
  • 백테스트: 과거 데이터 기반 전략 성과 검증

기술적 구현

데이터 수집 및 기술 지표

import yfinance as yf
import pandas as pd

def get_stock_data(ticker: str, period: str = "2y") -> pd.DataFrame:
    stock = yf.Ticker(ticker)
    df = stock.history(period=period)
    return df[["Open", "High", "Low", "Close", "Volume"]]

def add_indicators(df: pd.DataFrame) -> pd.DataFrame:
    # RSI
    delta = df["Close"].diff()
    gain = (delta.where(delta > 0, 0)).rolling(14).mean()
    loss = (-delta.where(delta < 0, 0)).rolling(14).mean()
    df["RSI"] = 100 - (100 / (1 + gain / loss))

    # MACD
    ema12 = df["Close"].ewm(span=12).mean()
    ema26 = df["Close"].ewm(span=26).mean()
    df["MACD"] = ema12 - ema26

    return df

LSTM 모델 구성

from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import LSTM, Dense, Dropout

def build_model(input_shape: tuple) -> Sequential:
    model = Sequential([
        LSTM(128, return_sequences=True, input_shape=input_shape),
        Dropout(0.2),
        LSTM(64, return_sequences=False),
        Dropout(0.2),
        Dense(32, activation="relu"),
        Dense(1)  # 다음날 종가 예측
    ])
    model.compile(optimizer="adam", loss="mse")
    return model

매매 신호 생성

def generate_signal(model, data: np.ndarray, threshold: float = 0.02):
    predicted = model.predict(data)
    current_price = data[-1, -1, 3]  # 현재 종가

    change_rate = (predicted[0][0] - current_price) / current_price

    if change_rate > threshold:
        return "BUY"
    elif change_rate < -threshold:
        return "SELL"
    return "HOLD"

리스크 관리 전략

항목기준
손절매2% 이상 손실 시 자동 청산
포지션 사이징전체 자산의 최대 10% 이내
분산 투자단일 종목 집중 금지
MDD 제한최대 낙폭 15% 초과 시 거래 중단

백테스트 결과

2년간 백테스트 기준:

  • 연 수익률: 23%
  • 최대 낙폭(MDD): 11.3%
  • 샤프 비율: 1.8
  • 승률: 58%

프로젝트 정보

카테고리
AI
기준일

2025년 1월 20일

읽기 시간

3 min read

기술 스택
PythonTensorFlowLSTMKeraspandasyfinance