← 홈으로

주식 자동매매 파이썬 구현

주식 자동매매 파이썬 구현

개요

주식 자동매매(Algorithmic Trading 또는 Automated Stock Trading)란 사람이 직접 매매 버튼을 누르는 대신, 미리 정의된 규칙과 알고리즘에 따라 컴퓨터가 자동으로 주문을 실행하는 시스템이다. 파이썬(Python)은 풍부한 금융 데이터 라이브러리, 증권사 API와의 연동 용이성, 그리고 낮은 진입 장벽 덕분에 개인 투자자부터 기관 퀀트 트레이더까지 폭넓게 활용되고 있다.

한국에서는 키움증권 OpenAPI+, 한국투자증권 Open API, 대신증권 CYBOS Plus, 이베스트투자증권 xing API 등의 증권사 공개 API가 존재하며, 이를 파이썬과 연동하여 실시간 시세 수신, 조건 검색, 자동 주문까지 구현할 수 있다.

자동매매 시스템은 단순히 주문을 자동화하는 것에 그치지 않는다. 전략 설계, 백테스팅(Backtesting), 리스크 관리, 실시간 모니터링까지 포함하는 종합적인 소프트웨어 시스템이다.


핵심 개념

1. 증권사 API (Brokerage API)

자동매매의 출발점은 증권사 API와의 연결이다. API를 통해 현재가 조회, 호가 조회, 주문 제출, 체결 내역 확인 등을 프로그래밍 방식으로 수행할 수 있다.

  • 키움증권 OpenAPI+: 가장 널리 사용되는 국내 API로, Windows COM 방식으로 제공된다. PyQt5와 함께 사용하여 이벤트 기반 통신을 구현한다.
  • 한국투자증권 Open API: REST API와 WebSocket 방식을 지원하여 플랫폼 독립적으로 사용 가능하다.
  • LS증권(이베스트) xing API: 다양한 데이터 피드와 안정적인 연결로 알려져 있다.

2. 매매 전략 유형

자동매매의 핵심은 언제 사고, 언제 파는지를 결정하는 전략(Strategy)이다. 대표적인 전략 유형은 다음과 같다.

  • 이동평균 교차 전략 (Moving Average Crossover): 단기 이동평균선이 장기 이동평균선을 상향 돌파할 때 매수, 하향 돌파할 때 매도하는 전형적인 추세 추종 전략이다.
  • 모멘텀 전략 (Momentum Strategy): 일정 기간 동안 수익률이 높은 종목을 매수하고 낮은 종목을 매도하는 전략이다.
  • 평균 회귀 전략 (Mean Reversion): 가격이 장기 평균에서 크게 벗어났을 때 반대 방향으로 포지션을 잡는 전략이다.
  • 변동성 돌파 전략: 전일 변동폭의 일정 비율을 당일 시가에 더한 값을 돌파하면 매수하는 전략으로, 래리 윌리엄스가 고안한 기법이다.

3. 백테스팅 (Backtesting)

백테스팅이란 과거 데이터에 전략을 적용하여 수익성과 리스크를 사전에 검증하는 과정이다. 파이썬 생태계에서는 Backtrader, Zipline, bt, vectorbt 등의 프레임워크가 널리 사용된다.

백테스팅 시 주의해야 할 함정으로는 과최적화(Overfitting), 룩어헤드 바이어스(Look-ahead Bias, 미래 데이터를 현재 결정에 사용하는 오류), 생존자 편향(Survivorship Bias) 등이 있다.

4. 리스크 관리 (Risk Management)

자동매매에서 리스크 관리는 전략 자체만큼이나 중요하다. 주요 개념은 다음과 같다.

  • 손절매 (Stop-Loss): 손실이 일정 수준을 초과하면 자동으로 포지션을 청산한다.
  • 포지션 사이징 (Position Sizing): 켈리 공식이나 고정 비율 방식으로 종목당 투자 비중을 결정한다.
  • 최대 낙폭 (Maximum Drawdown): 전략의 최고점 대비 최대 손실 비율로, 전략의 위험도를 나타내는 핵심 지표다.

구현 방법 및 실전 적용

환경 설정

# 주요 라이브러리 설치
# pip install pandas numpy matplotlib pyqt5 requests websocket-client

파이썬 3.8 이상을 권장하며, 키움증권 API 사용 시 32비트 파이썬 환경이 필요한 경우가 있다. 한국투자증권 REST API는 환경 제약 없이 사용 가능하다.

이동평균 교차 전략 구현 예시

import pandas as pd

def moving_average_crossover(df, short_window=5, long_window=20):
    df['SMA5'] = df['close'].rolling(window=short_window).mean()
    df['SMA20'] = df['close'].rolling(window=long_window).mean()
    df['signal'] = 0
    df.loc[df['SMA5'] > df['SMA20'], 'signal'] = 1   # 매수 신호
    df.loc[df['SMA5'] < df['SMA20'], 'signal'] = -1  # 매도 신호
    return df

한국투자증권 REST API 주문 예시

import requests

def place_order(token, account_no, stock_code, order_type, quantity, price):
    url = "https://openapi.koreainvestment.com:9443/uapi/domestic-stock/v1/trading/order-cash"
    headers = {
        "Authorization": f"Bearer {token}",
        "tr_id": "TTTC0802U",  # 현금 매수
        "Content-Type": "application/json"
    }
    body = {
        "CANO": account_no,
        "ACNT_PRDT_CD": "01",
        "PDNO": stock_code,
        "ORD_DVSN": "00",       # 지정가
        "ORD_QTY": str(quantity),
        "ORD_UNPR": str(price),
    }
    response = requests.post(url, headers=headers, json=body)
    return response.json()

시스템 아키텍처

실제 운영 가능한 자동매매 시스템은 다음의 구성 요소로 이루어진다.

  1. 데이터 수집 모듈: 실시간 시세 및 재무 데이터 수집
  2. 전략 실행 엔진: 신호 생성 및 주문 결정
  3. 주문 관리 시스템 (OMS): 주문 제출, 취소, 수정 관리
  4. 리스크 관리 모듈: 포지션 한도, 손절매 자동 실행
  5. 로깅 및 모니터링: 거래 기록 저장, 이상 감지 알림 (텔레그램 봇 연동 등)

스케줄링은 APScheduler 또는 schedule 라이브러리를 활용하며, 장 시작 전 데이터 로드, 장 중 신호 감지, 장 종료 후 성과 분석을 자동화한다.


장단점

장점

  • 감정 배제: 공포와 탐욕에 의한 비합리적 의사결정을 제거하고 규칙 기반 매매를 일관되게 실행한다.
  • 24시간 자동화: 사람이 화면 앞에 있지 않아도 설정된 조건에 따라 자동으로 거래가 이루어진다.
  • 빠른 실행 속도: 인간보다 훨씬 빠르게 시장 변화에 반응하여 주문을 제출할 수 있다.
  • 백테스팅 가능: 실거래 전에 과거 데이터로 전략의 유효성을 검증할 수 있다.
  • 다중 전략 동시 운용: 여러 전략을 병렬로 실행하여 포트폴리오를 다각화할 수 있다.

단점

  • 기술적 장애 위험: 네트워크 오류, API 서버 장애, 버그 등으로 인해 의도치 않은 손실이 발생할 수 있다.
  • 과최적화 위험: 과거 데이터에 지나치게 맞춰진 전략은 실전에서 성능이 크게 저하될 수 있다.
  • 시장 변화 대응 한계: 코드로 사전에 정의되지 않은 블랙스완 이벤트나 시장 구조 변화에 자동으로 적응하기 어렵다.
  • 초기 개발 비용: 안정적인 시스템을 구축하려면 상당한 개발 시간과 테스트가 필요하다.
  • API 제약 및 규제: 증권사마다 API 호출 횟수 제한, 지원 운영체제 제약 등이 존재하며, 관련 금융 규제를 준수해야 한다.

참고 자료


Source: https://www.youngju.dev/blog/finance/2026-03-08-finance-algorithmic-trading-system-python-architecture