파이썬 자동매매 개발, 키움증권 API, PyQt 기초

주식 거래는 점점 더 자동화되고 있으며, 많은 트레이더들이 알고리즘을 활용해 보다 효율적인 거래를 원하고 있습니다. 본 글에서는 파이썬을 사용하여 키움증권 API를 활용한 자동매매 시스템을 개발하는 기초를 배우고, PyQt를 사용하여 사용자 인터페이스를 만드는 방법을 소개하겠습니다.

1. 파이썬 소개 및 자동매매의 개념

파이썬은 다양한 분야에서 사용되는 고급 프로그래밍 언어입니다. 특히 데이터 분석, 머신러닝, 웹 개발 등에서 유용하게 사용됩니다. 자동매매는 지정된 알고리즘을 통해 거래를 자동으로 수행하는 시스템으로, 많은 투자자들에게 시간과 노력을 절약하게 해 줍니다.

2. 키움증권 API란?

키움증권 API는 키움증권에서 제공하는 프로그램과 사용자 간의 인터페이스를 정의합니다. 이를 통해 개발자는 주식 거래, 시세 정보 조회, 매매 주문 등을 프로그램matically 제어할 수 있게 됩니다. 키움증권 API를 사용하기 위해서는 먼저 키움증권 계좌를 개설하고, Open API 서비스를 신청해야 합니다.

2.1. Open API 신청 방법

  1. 키움증권 홈페이지에 접속하여 계좌를 개설합니다.
  2. Open API 신청 메뉴를 찾아 신청합니다.
  3. API 사용승인이 완료되면, API 인증키를 발급받게 됩니다.

3. 자동매매 시스템의 기본 구조

자동매매 시스템은 크게 다음과 같은 구성 요소로 나뉩니다:

  • 데이터 수집: 주식 시세 및 거래량 등 데이터를 수집합니다.
  • 전략 개발: 수집한 데이터를 기반으로 매매 전략을 수립합니다.
  • 주문 실행: 전략에 따라 자동으로 주문을 발행합니다.
  • 모니터링: 시스템의 상태 및 성과를 실시간으로 모니터링합니다.

4. 키움증권 API 사용법

아래는 키움증권 API를 사용하여 간단하게 주식 정보를 조회하는 예제 코드입니다.


import pythoncom
import win32com.client

# 키움증권 API 객체 초기화
def init_api():
    pythoncom.CoInitialize()
    return win32com.client.Dispatch("KHOPENAPI.KHOpenAPI")

# 주식 정보 조회
def get_stock_info(code):
    api = init_api()
    price = api.GetMasterLastPrice(code)
    name = api.GetMasterCodeName(code)
    return name, price

if __name__ == "__main__":
    stock_code = "005930"  # 삼성전자 코드
    stock_name, stock_price = get_stock_info(stock_code)
    print(f"{stock_name}의 현재 가격: {stock_price}원")

        

5. PyQt를 사용한 UI 개발

PyQt는 파이썬에서 Qt 프레임워크를 활용한 GUI 구축을 도와주는 라이브러리입니다. 이번 장에서는 기본적인 PyQt 애플리케이션을 만드는 방법을 설명하겠습니다.

5.1. PyQt 설치

PyQt는 pip를 통해 쉽게 설치할 수 있습니다. 다음과 같은 명령어로 설치합니다:

pip install PyQt5
        

5.2. 기본 PyQt 애플리케이션

아래는 기본적인 PyQt 애플리케이션 코드입니다.


import sys
from PyQt5.QtWidgets import QApplication, QWidget, QLabel, QVBoxLayout

class MyApp(QWidget):
    def __init__(self):
        super().__init__()
        self.init_ui()

    def init_ui(self):
        self.setWindowTitle('자동매매 시스템')
        
        layout = QVBoxLayout()
        label = QLabel('안녕하세요! 자동매매 시스템입니다.')
        layout.addWidget(label)
        
        self.setLayout(layout)
        self.show()

if __name__ == '__main__':
    app = QApplication(sys.argv)
    ex = MyApp()
    sys.exit(app.exec_())

        

6. 자동매매 시스템 구현하기

위의 내용을 바탕으로, 실제 자동매매 시스템을 구현해 보겠습니다. 예제에서는 단순한 이동 평균 전략을 사용합니다.

6.1. 이동 평균 전략

이동 평균 전략은 과거의 가격 데이터를 기반으로 일정 기간의 평균 가격을 계산하고, 현재 가격이 평균 가격을 초과하면 매수, 미만이면 매도하는 전략입니다.

6.2. 예제 코드


import numpy as np
import pandas as pd

# 과거 주가 데이터 가져오기 (임시 데이터)
def fetch_historical_data(code):
    # 주가 데이터가 pandas DataFrame 형태로 있다고 가정
    dates = pd.date_range('2023-01-01', periods=100)
    prices = np.random.randint(1000, 2000, size=(100,))
    return pd.DataFrame({'Date': dates, 'Close': prices}).set_index('Date')

# 매수/매도 전략
def trading_strategy(data, short_window=5, long_window=20):
    signals = pd.DataFrame(index=data.index)
    signals['price'] = data['Close']
    signals['short_mavg'] = data['Close'].rolling(window=short_window, min_periods=1).mean()
    signals['long_mavg'] = data['Close'].rolling(window=long_window, min_periods=1).mean()
    
    signals['signal'] = 0
    signals['signal'][short_window:] = np.where(signals['short_mavg'][short_window:] > signals['long_mavg'][short_window:], 1, 0)
    signals['positions'] = signals['signal'].diff()
    
    return signals

if __name__ == "__main__":
    stock_code = "005930"  # 삼성전자 코드
    historical_data = fetch_historical_data(stock_code)
    signals = trading_strategy(historical_data)
    
    print(signals.tail())  # 마지막 5일의 신호 출력

        

7. 마무리

본 글에서는 파이썬을 이용한 자동매매 시스템 개발의 기초, 키움증권 API 사용법, 그리고 PyQt를 통한 사용자 인터페이스 구축 방법에 대해 설명했습니다. 이 내용을 바탕으로 여러분만의 자동매매 시스템을 만들어보세요!