파이썬 자동매매 개발, 키움증권 API, 기본 정보 요청하기

안녕하세요! 이번 포스트에서는 파이썬을 이용하여 자동매매 시스템을 개발하는 방법 중 하나인 키움증권 API를 이용해 기본 정보를 요청하는 방법에 대해 알아보겠습니다. 주식 거래에 관심 있는 많은 분들이 매매를 자동화하고자 하여 이 주제를 선택하신 것이라 생각됩니다.

1. 키움증권 API란?

키움증권 API는 키움증권에서 제공하는 프로그램을 통해 주식 매매 및 정보를 조회할 수 있는 인터페이스입니다. 이 API를 이용하면 키움증권 계좌에 접근하여 주식 거래 및 정보를 자동으로 가져올 수 있습니다. 특히, 파이썬을 사용하면 간편하게 요청하고 응답을 처리할 수 있어 많은 개발자들이 선호하고 있습니다.

2. 개발 환경 설정하기

키움증권 API를 사용하기 위해서는 다음의 사전 준비가 필요합니다:

  • 키움증권 계좌 개설
  • 키움증권 OpenAPI+에 가입
  • 키움증권 API 설치 및 환경설정
  • Python 및 필요 청구 라이브러리 설치

2.1 키움증권 OpenAPI+ 설치

키움증권에서 제공하는 OpenAPI+ 프로그램을 다운로드 받아 설치합니다. 설치 후 API 사용을 위해 로그인을 해야 합니다.

2.2 Python 설치

Python이 설치되어 있지 않다면 공식 홈페이지를 통해 다운로드하고 설치해 주세요.

2.3 필요한 라이브러리 설치

pip install pyqt5

키움증권 API는 Qt 라이브러리를 사용하므로, PyQt5를 설치해야 합니다.

3. 키움증권 API 접속하기

키움증권 API에 접속하기 위해서는 우선 키움 API를 초기화해야 합니다. 이를 위해 다음과 같은 코드를 작성할 수 있습니다.

import sys
from PyQt5.QtWidgets import QApplication
from kiwoom import Kiwoom

app = QApplication(sys.argv)
kiwoom = Kiwoom()
kiwoom.CommConnect()  # 로그인 창 띄우기

이 코드는 PyQt5를 사용하여 로그인하기 위한 팝업 창을 생성합니다. 사용자가 자신의 계정으로 로그인하면 API에 접근할 수 있습니다.

4. 기본 정보 요청하기

로그인 후 기본적인 주식 정보를 요청하기 위해서는 GetMasterCodeName 메소드를 사용합니다. 이 메소드를 통해 주식의 코드에 대한 이름을 조회할 수 있습니다.

code = "005930"  # 삼성전자
name = kiwoom.GetMasterCodeName(code)
print(name)  # 삼성전자

4.1 주식 정보 조회 예제

다음 코드는 여러 주식의 코드를 입력받아 그에 대한 이름을 출력하는 예제입니다.

codes = ["005930", "000660", "035420", "051910"]  # 삼성전자, SK하이닉스, NAVER, LG생활건강
for code in codes:
    name = kiwoom.GetMasterCodeName(code)
    print(f"{code}: {name}")

5. 추가적인 정보 요청하기

기본적인 주식 정보를 조회하는 것 외에도 다른 정보를 요청할 수 있습니다. 예를 들어, 현재가, 시가, 고가, 저가 등의 정보를 요청할 수 있습니다. 이를 위해 GetMasterLastPrice, GetMasterOpen, GetMasterHigh, GetMasterLow 메소드를 사용할 수 있습니다.

current_price = kiwoom.GetMasterLastPrice(code)
open_price = kiwoom.GetMasterOpen(code)
high_price = kiwoom.GetMasterHigh(code)
low_price = kiwoom.GetMasterLow(code)

print(f"{code} 현재가: {current_price}, 시가: {open_price}, 고가: {high_price}, 저가: {low_price}")

6. 정리

이번 포스트에서는 키움증권 API를 이용해 기본 정보를 요청하는 방법에 대해 살펴보았습니다. API를 통해 다양한 정보를 손쉽게 가져와 자동매매 로직에 활용할 수 있습니다. 다음 포스트에서는 실시간 주식 정보를 가져오는 방법과 이를 이용한 자동매매 시스템의 기본 구조에 대해 설명할 예정입니다. 여러분의 많은 관심 부탁드립니다!

7. 참고 자료

파이썬 자동매매 개발, 키움증권 API, 계좌 정보 가져오기

주식 자동매매 시스템을 개발하는 것은 요즘 주식 투자자들 사이에서 매우 인기 있는 주제입니다. 이러한 시스템은 컴퓨터 프로그램을 사용하여 자동으로 주식을 매매하는 메커니즘을 의미합니다. 본 강좌에서는 파이썬을 이용한 자동매매 개발의 첫 단계로, 키움증권 API를 사용하여 계좌 정보를 가져오는 방법을 알아보겠습니다.

1. 키움증권 API란?

키움증권 API는 키움증권의 Open API를 통해 제공되는 서비스로, 주식, 선물 및 옵션 거래뿐만 아니라 계좌 정보, 시세 정보 등을 프로그램을 통해 조회하고 트레이딩할 수 있는 기능을 제공합니다. 이 API를 통해 투자자는 다양한 전략을 자동으로 실행할 수 있습니다.

2. 키움증권 API 사용 준비하기

키움증권 API를 사용하기 위해서는 다음의 준비가 필요합니다.

  1. 키움증권 계좌 개설: 키움증권에 계좌를 개설해야 합니다.
  2. Open API 신청: 키움증권에서 Open API를 사용할 수 있도록 신청합니다.
  3. API 환경 설정: API를 사용할 컴퓨터에서 환경을 설정해야 합니다.

2.1 Open API 신청 방법

키움증권 홈페이지에 로그인 후, Open API 서비스 신청을 통해 API 사용 권한을 요청할 수 있습니다. 요청이 승인되면 API 키를 발급받게 됩니다. 이를 통해 API에 접근할 수 있습니다.

2.2 API 환경 설정

API를 사용하기 위해서는 Python에서 HTTP 요청을 보내고 받을 수 있는 패키지가 필요합니다. 우리는 주로 pywin32 라이브러리를 사용하여 윈도우의 COM 객체와 상호작용할 것입니다. 이 라이브러리는 다음과 같은 방법으로 설치할 수 있습니다.

pip install pywin32

3. 계좌 정보 가져오기

이제 키움증권 API를 통해 계좌 정보를 가져오는 방법을 실제 코드와 함께 알아보겠습니다.

3.1 키움증권 API 로그인

API를 사용하기 위해서는 먼저 로그인을 해야 합니다. 다음의 코드는 PyQt5를 사용하여 로그인 창을 띄우고 로그인 상태를 확인하는 방법입니다.

import os
import sys
import pythoncom
import win32com.client

from PyQt5 import QtWidgets

class Kiwoom:
    def __init__(self):
        self.app = QtWidgets.QApplication(sys.argv)
        self.khw = win32com.client.Dispatch("KH OPENAPI")  # 키움 API 객체 생성
        self.khw.OnEventConnect.connect(self._on_event_connect)

    def login(self):
        self.khw.CommConnect()  # 로그인 요청

    def _on_event_connect(self, err_code):
        if err_code == 0:
            print("로그인 성공")
        else:
            print("로그인 실패")

if __name__ == "__main__":
    kiwoom = Kiwoom()
    kiwoom.login()
    pythoncom.PumpThreads()  # 이벤트 루프 유지

3.2 계좌 정보 가져오기

로그인을 성공적으로 했다면 이제 계좌 정보를 가져올 수 있습니다. 키움증권 API를 통해 계좌 정보를 조회하는 방법은 아래와 같습니다.

class Kiwoom:
    # 이전 코드 이어서
    def get_account_info(self):
        account_list = self.khw.GetLoginInfo("ACCNO")  # 계좌번호 조회
        print("계좌 목록:", account_list)

        # 모든 계좌 정보 요청하기
        for account in account_list.split(';'):
            if account:
                print("계좌번호:", account)

if __name__ == "__main__":
    kiwoom = Kiwoom()
    kiwoom.login()
    pythoncom.PumpThreads()
    kiwoom.get_account_info()  # 계좌 정보 가져오기

위의 코드에서는 사용자의 계좌 목록을 가져오고, 각 계좌 번호를 출력합니다. GetLoginInfo 메서드를 사용하여 계좌 정보를 가져올 수 있습니다. 이후 이 정보를 바탕으로 필요한 다른 정보를 조회하거나 매매를 진행할 수 있습니다.

4. 계좌 별 자산 정보 조회하기

각 계좌의 자산 정보를 조회하는 방법을 알아보겠습니다. 계좌에서 보유한 주식의 수량, 평가 금액 등을 확인할 수 있습니다.

class Kiwoom:
    # 이전 코드 이어서
    def get_account_assets(self):
        # 자산 정보 요청 (AT: 평가금액/현재가)
        self.khw.SetInputValue("계좌번호", "입력할 계좌번호")
        self.khw.SetInputValue("비밀번호", "")  # 비밀번호
        self.khw.SetInputValue("상담유형", "0")  # 0: 일반, 1: 현물, 2: 선물, 3: 옵션
        self.khw.CommRcvData("010101", 0)  # 요청

if __name__ == "__main__":
    kiwoom = Kiwoom()
    kiwoom.login()
    pythoncom.PumpThreads()
    kiwoom.get_account_assets()  # 자산 정보 가져오기

5. 결론

이번 강좌에서는 키움증권 API를 활용하여 계좌 정보를 가져오는 방법을 설명하였습니다. 앞으로 더 나아가 매매 기능 구현, 시세 조회 기능 등을 추가하여 본인만의 자동매매 시스템을 개발하는 방법을 배울 수 있습니다. 다음 강좌에서는 실제 매매를 위한 추가적인 기능을 구현해보겠습니다.

6. 참고 자료

파이썬 자동매매 개발, 키움증권 API, 계좌 개설 및 모듈 설치

자동매매 시스템은 빠르게 발전하고 있는 금융 기술 분야 중 하나입니다. 많은 트레이더들이 거래의 효율성을 높이기 위해 알고리즘 기반의 자동매매 시스템을 개발하고 있습니다. 이 글에서는 파이썬을 이용한 자동매매 개발에 필요한 키움증권 API 사용법부터 계좌 개설, 모듈 설치까지 자세히 설명하겠습니다.

1. 키움증권 계좌 개설하기

자동매매 시스템을 개발하기 위해서는 우선 증권 계좌를 개설해야 합니다. 키움증권의 계좌를 개설하는 방법은 다음과 같습니다.

1.1. 키움증권 홈페이지 방문

키움증권의 공식 홈페이지(https://www.kiwoom.com)에 접속하여 ‘계좌 개설’ 메뉴를 클릭합니다.

1.2. 온라인 계좌 개설

온라인으로 계좌를 개설하기 위해서는 본인 인증이 필요합니다. 공인인증서를 준비하고, 신분증(주민등록증, 운전면허증)을 준비합니다.

1.3. 정보 입력 및 서류 제출

필요한 개인 정보를 입력하고, 증권 계좌의 종류를 선택합니다. 이후 신분증을 인증하고, 제출 서류를 전송합니다.

1.4. 계좌 개설 완료

모든 절차가 완료되면, 약 1~2일 이내에 계좌가 개설됩니다. 계좌가 개설되고 나면, 자동매매 프로그램을 위해 API를 사용할 수 있는 자격을 얻게 됩니다.

2. 키움증권 OPEN API 설치하기

키움증권의 API를 사용하기 위해서는 특정 프로그램이 필요합니다. 이 프로그램은 키움의 홈페이지에서 다운로드할 수 있습니다.

2.1. OPEN API 다운로드

키움증권 OPEN API는 ‘다운로드’ 메뉴에서 찾을 수 있습니다. SDK와 관련된 여러 파일을 다운로드합니다.

2.2. 사용자 매뉴얼 확인

키움증권은 OPEN API를 사용하기 위한 사용자 매뉴얼을 제공합니다. 매뉴얼을 통해 API의 기능과 사용법을 익힐 수 있습니다.

2.3. 환경 설정

다운로드한 파일을 적절한 위치에 압축 해제한 후, 환경변수 설정을 해야 합니다. Windows 사용자라면 ‘내 컴퓨터’ > ‘속성’ > ‘고급 시스템 설정’ > ‘환경 변수’에서 시스템 변수에 다음과 같이 추가합니다:

PATH : C:\Kiwoom\OpenAPI\

2.4. API 인증키 발급

키움증권의 API을 사용하기 위해서는 인증키가 필요합니다. 이 인증키는 키움증권의 고객센터에 문의하여 발급받을 수 있습니다.

3. Python 및 필요한 라이브러리 설치

이번 섹션에서는 파이썬과 관련 라이브러리를 설치하는 방법에 대해 알아보겠습니다.

3.1. Python 설치

Python은 공식 웹사이트(https://www.python.org/downloads/)에서 설치할 수 있습니다. 설치 과정에서 ‘Add Python to PATH’ 옵션을 체크합니다.

3.2. PyQt5 및 numpy 라이브러리 설치

자동매매 프로그램의 UI를 구축하기 위해 PyQt5가 필요합니다. 또한 Numpy를 사용하여 데이터 처리를 합니다. 아래의 명령어를 CMD에서 입력하여 설치합니다:

pip install PyQt5 numpy

4. 키움증권 API와 Python 연동하기

이제 키움증권 API를 사용하여 실제 매매 프로그램을 개발해보겠습니다.

4.1. API 클래스 정의

먼저, 키움증권의 OpenAPI를 호출하기 위해 클래스를 정의합니다.

import sys
from PyQt5.QtWidgets import QApplication
from PyQt5.QAxContainer import QAxWidget

class Kiwoom:
    def __init__(self):
        self.app = QApplication(sys.argv)
        self.kw_app = QAxWidget('KWOpenAPI.KWOpenAPICtrl.1')
        self.kw_app.OnEventConnect.connect(self.event_connect)

    def event_connect(self, err_code):
        if err_code == 0:
            print("연결 성공")
        else:
            print(f"연결 실패: {err_code}")

    def login(self):
        self.kw_app.dynamicCall("CommConnect()")

if __name__ == "__main__":
    kiwoom = Kiwoom()
    kiwoom.login()
    sys.exit(kiwoom.app.exec_())

4.2. 매매 요청 함수 추가

매매 요청을 위한 함수를 추가합니다.

def buy(self, code, qty):
    self.kw_app.dynamicCall("SendOrder(QString, QString, QString, int, QString, int, double, QString)", "buy", "YOUR_ACCOUNT", code, qty, "", "0", "0", "0")

4.3. 프로그램 실행 및 테스트

전체 코드를 실행하여 매매 연결이 잘 되는지 확인합니다. 이 과정에서 환경 설정이 잘 되어 있어야 하며, 키움증권의 API가 제대로 작동해야 합니다.

if __name__ == "__main__":
    kiwoom = Kiwoom()
    kiwoom.login()
    # 매매 테스트
    kiwoom.buy("005930", 1)  # 삼성전자 한 주 매수
    sys.exit(kiwoom.app.exec_())

5. 결론

이 글에서는 파이썬을 이용한 자동매매 개발을 위한 키움증권 API의 계좌 개설, 모듈 설치, API 연동 기초에 대해 설명했습니다. 실제 매매를 실행하기 위해서는 더 많은 테스트와 안정성 확보가 필요합니다. 또한, 실제 매매 시 위험 관리와 더불어 다양한 매매 전략이 필요합니다.

다음 글에서는 더욱 발전된 자동매매 시스템의 구현, 데이터 분석 및 알고리즘 개선에 대해 알아보겠습니다.

독자 여러분이 성공적인 자동매매 시스템을 구축하기를 바랍니다!

파이썬 자동매매 개발, 키움증권 API, 개발 환경 구축

최근 주식 투자에 대한 관심이 높아짐에 따라, 많은 투자자들이 자동매매 시스템을 구축하고자 합니다. 특히, 파이썬은 강력한 라이브러리와 사용 용이성 덕분에 많은 개발자들에게 사랑받고 있습니다. 이번 글에서는 파이썬을 활용한 자동매매 개발 과정과 키움증권 API를 이용한 개발 환경 구축 방법에 대해 자세히 설명하겠습니다. 이 글을 읽고 나면 자신만의 자동매매 프로그램을 만들기 위한 기초적인 이해를 돕는 한편, 실질적인 개발 예제 또한 제공받을 수 있을 것입니다.

1. 자동매매 시스템이란?

자동매매 시스템은 사용자의 지시 없이 컴퓨터 프로그램이 시장 데이터를 분석하고, 매매를 자동으로 실행하도록 설계된 시스템입니다. 이는 트레이더가 시장에서 감정에 휘둘리지 않고 일관된 투자 결정을 내려줄 수 있도록 돕습니다. 자동매매 시스템은 특정 알고리즘 기반으로 매매 신호를 생성하고, 이를 통해 매수 또는 매도 결정을 내립니다. 이 시스템은 프로그래밍 지식과 거래 전략이 결합되어야 성공적으로 운영될 수 있습니다.

2. 키움증권 API란?

키움증권 API는 키움증권에서 제공하는 프로그램을 통해 주식, 선물, 옵션 등 다양한 금융 상품에 대한 트레이딩을 가능하게 하는 도구입니다. 이 API는 사용자에게 실시간 데이터, 거래 실행, 잔고 확인, 수익률 분석 등 다양한 기능을 제공합니다. 키움증권 API를 사용하면 손쉽게 자신의 매매 시스템을 개발하고 운영할 수 있습니다.

3. 개발 환경 구축하기

3.1. 사전 준비 사항

자동매매 시스템을 개발하기 위해서는 다음과 같은 사전 준비가 필요합니다.

  • Python 설치: Python 3.6 이상의 버전을 다운로드하여 설치합니다.
  • 키움증권 계좌 개설: 키움증권에 계좌를 개설하고 API 사용 신청을 합니다.
  • Python 라이브러리 설치: 다음 라이브러리를 사용하여 개발할 것입니다.
    • pykiwoom: 키움증권 API를 파이썬에서 사용할 수 있도록 도와주는 라이브러리
    • pandas: 데이터 분석 및 조작을 위한 라이브러리
    • numpy: 수치 계산을 위한 라이브러리
    • matplotlib: 데이터 시각화를 위한 라이브러리

3.2. Python 설치

파이썬을 설치하기 위해 [python.org](https://www.python.org/downloads/)에서 운영체제에 맞는 설치 파일을 다운로드하여 설치합니다. 설치 후, 명령 프롬프트 또는 터미널을 열고 `python –version` 명령어를 입력하여 설치가 제대로 되었는지 확인합니다.

3.3. 라이브러리 설치

앞서 언급한 라이브러리들을 설치하기 위해 pip를 사용합니다. 명령 프롬프트에서 다음 명령어를 차례대로 입력합니다.

        pip install pykiwoom
        pip install pandas
        pip install numpy
        pip install matplotlib
    

3.4. 키움증권 API 설정

키움증권 API를 사용하기 위해서는 키움증권 HTS인 ‘영웅문’을 설치하고 로그인해야 합니다. 로그인 후 ‘옵션’ – ‘API 설정’ 메뉴를 통해 API 사용을 신청할 수 있습니다. 신청이 완료되면, API 키를 발급받을 수 있습니다.

4. 기본적인 매매 시스템 만들기

이제 개발 환경이 준비되었으니, 기본적인 매매 시스템을 구현해보겠습니다. 자동매매 시스템의 기본 구조는 다음과 같습니다.

  1. 시장 데이터를 수집
  2. 알고리즘에 따라 매매 신호 생성
  3. 매매 실행
  4. 결과 기록 및 분석

4.1. 데이터 수집

먼저, 키움증권 API를 사용하여 주식 데이터를 수집해보겠습니다. 다음은 pykiwoom을 사용하여 특정 종목의 데이터를 요청하는 예제입니다.

        
        from pykiwoom.kiwoom import Kiwoom
        import pandas as pd

        kiwoom = Kiwoom()
        kiwoom.CommConnect()

        # 종목 코드 설정
        code = "005930"  # 삼성전자

        # 데이터 요청
        df = kiwoom.get_master_last_price(code)  # 현재가 요청
        print(df)
        
    

4.2. 매매 신호 생성

이제 기본적인 매매 알고리즘을 설정하겠습니다. 예를 들어, 단순 이동 평균(SMA)을 기준으로 매매 신호를 생성해볼 수 있습니다.

        
        def generate_signal(data):
            data['SMA_5'] = data['close'].rolling(window=5).mean()
            data['SMA_20'] = data['close'].rolling(window=20).mean()
            data['signal'] = 0
            data['signal'][5:] = np.where(data['SMA_5'][5:] > data['SMA_20'][5:], 1, 0)  # 매수 신호
            return data
        
    

4.3. 거래 실행

신호를 기반으로 거래를 실행하는 코드를 아래와 같이 작성할 수 있습니다.

        
        def execute_trade(signal):
            if signal == 1:
                # 매수 실행
                kiwoom.SendOrder("buysignal", "0101", code, 1, 0, 0, "03", "")
            elif signal == 0:
                # 매도 실행
                kiwoom.SendOrder("sellsignal", "0101", code, 1, 0, 0, "03", "")
        
    

5. 전체 시스템 통합

마지막으로, 위의 모든 요소를 하나의 프로그램으로 통합해보겠습니다. 주기적으로 시장 데이터를 수집하고, 신호를 생성하여 매매를 실행하도록 하겠습니다.

        
        import time

        while True:
            # 데이터 수집
            data = kiwoom.get_market_data(code)
            
            # 매매 신호 생성
            signal_data = generate_signal(data)
            latest_signal = signal_data['signal'].iloc[-1]
            
            # 거래 실행
            execute_trade(latest_signal)
            
            # 30초 대기
            time.sleep(30)
        
    

6. 결론

이번 글에서는 파이썬을 사용하여 키움증권 API를 이용한 기본적인 자동매매 시스템을 구축하는 방법에 대해 알아보았습니다. 이 과정에서 데이터 수집, 매매 신호 생성, 거래 실행까지의 흐름을 살펴보았습니다. 본 대본을 바탕으로 각자 자신만의 보다 복잡하고 정교한 매매 시스템을 개발하는 데 도움이 되었기를 바랍니다. 프로그래밍과 투자에 대한 깊은 이해를 바탕으로 다양한 전략을 시도해보시기 바랍니다.

추후에 더 나아가 머신러닝, 데이터 분석 기법 등을 활용하여 자동매매 시스템을 고도화하는 방법에 대한 글도 준비할 예정입니다. 많은 관심 부탁드립니다!

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

최근 주식 시장의 자동매매 시스템은 많은 투자자들 사이에서 주목받고 있습니다.
특히 파이썬(Python)은 그 간결함과 강력한 라이브러리들 덕분에 금융 데이터 처리 및 자동 매매 시스템
개발에 적합한 언어로 자리 잡았습니다. 이번 글에서는 키움증권 API를 활용한 자동매매
시스템 개발 방법과 사용자 인터페이스를 구축하기 위한 PyQt의 활용에 대해 알아보겠습니다.

1. 자가 진단: 왜 자동매매 시스템인가?

자동매매 시스템은 인간의 감정이나 순간의 판단에서 벗어나,
사전에 설정한 알고리즘에 따라 자동으로 매매를 수행할 수 있게 해줍니다.
이는 거래의 일관성을 유지하고 거래 시간을 최적화함으로써
수익을 극대화할 수 있는 가능성을 높입니다.

2. 키움증권 API 개요

키움증권 API는 키움증권에서 제공하는 프로그램적으로 매매를 수행할 수 있도록
도와주는 도구입니다. 이 API를 통해 사용자들은 실시간으로
주식 데이터를 조회하고, 주문을 생성하며, 거래 내역을 관리할 수 있습니다.

2.1. 키움 API 설치

키움 API를 사용하기 위해서는 먼저 키움증권의 Open API+를 설치해야 합니다.
설치 후, 다음과 같은 단계를 통해 API를 설정할 수 있습니다.

1. 키움증권의 홈페이지에서 'Open API+'를 다운로드합니다.
2. 설치 후, '키움증권 Open API' 폴더 안의 'OPKorea_1.2.0.exe'를 실행합니다.
3. API 키와 비밀번호를 입력하여 인증을 진행합니다.
4. API가 정상적으로 작동하는지 확인합니다.

2.2. 키움 API의 주요 기능

  • 주식 종목 검색
  • 실시간 시세 조회
  • 주문 및 매매 체결
  • 거래 내역 조회
  • 포트폴리오 관리

3. 파이썬과 키움증권 API 연동

파이썬을 사용하여 키움증권 API를 연동하기 위해서는 PyQt5와 같은 GUI 프레임워크를 병행하여
사용할 수 있습니다. 키움 API와 PyQt5를 활용한 예제 코드를 살펴보겠습니다.

3.1. PyQt5 설치하기

pip install PyQt5
pip install PyQt5-tools

3.2. 키움 API를 통한 로그인 구현하기

아래는 키움증권 API에 로그인하는 기본 코드입니다.

import sys
from PyQt5.QtWidgets import QApplication, QMainWindow, QPushButton
from PyQt5.QtCore import pyqtSlot
import win32com.client

class Kiwoom(QMainWindow):
    def __init__(self):
        super().__init__()
        self.setWindowTitle("키움증권 자동매매 시스템")
        self.setGeometry(300, 300, 400, 300)
        self.login_button = QPushButton("로그인", self)
        self.login_button.clicked.connect(self.login)
        self.login_button.resize(100, 40)
        self.login_button.move(150, 130)

        self.kiwoom = win32com.client.Dispatch("KHOpenAPI.KHOpenAPICtrl.1")
    
    @pyqtSlot()
    def login(self):
        self.kiwoom.CommConnect()

if __name__ == "__main__":
    app = QApplication(sys.argv)
    kiwoom = Kiwoom()
    kiwoom.show()
    sys.exit(app.exec_())

4. 실시간 주식 데이터 조회

이제 로그인 기능을 추가한 후, 실시간 데이터 조회 기능을 추가해 보겠습니다.
실시간 시세를 조회하기 위해서는 데이터 요청을 위한 함수를 작성해야 합니다.

class Kiwoom(QMainWindow):
    # ... 이전 코드 생략 ...
    def retrieve_stock_data(self, stock_code):
        self.kiwoom.SetInputValue("종목코드", stock_code)
        self.kiwoom.CommRqData("주식기본정보", "opt10001", 0, "0101")

    def OnReceiveTrData(self, scrno, rqname, trcode, recordname, prevnext, 
                       dataLength, errorCode, message, splm):
        print("데이터 수신")
        self.current_price = self.kiwoom.GetCommData(trcode, rqname, 0, "현재가")
        print(f"현재가: {self.current_price.strip()}")

4.1. 실시간 데이터 수신 기능 추가

위에서 돌아가는 기본 코드에 `OnReceiveTrData` 메서드를 추가하였습니다.
이 메서드에서는 수신된 데이터의 처리 로직을 구현하게 됩니다.

5. 주문 기능 구현

이제 간단한 주문 기능을 추가해 보겠습니다.
매수, 매도 주문을 처리하기 위한 코드 예제를 살펴보겠습니다.

def buy_stock(self, stock_code, quantity):
    self.kiwoom.SetInputValue("종목코드", stock_code)
    self.kiwoom.SetInputValue("주문수량", quantity)
    self.kiwoom.SetInputValue("가격", 0)  # 시장가
    self.kiwoom.SetInputValue("주문구분", 1)  # 매수
    self.kiwoom.CommRqData("주식주문", "opt00001", 0, "0101")

def sell_stock(self, stock_code, quantity):
    self.kiwoom.SetInputValue("종목코드", stock_code)
    self.kiwoom.SetInputValue("주문수량", quantity)
    self.kiwoom.SetInputValue("가격", 0)  # 시장가
    self.kiwoom.SetInputValue("주문구분", 2)  # 매도
    self.kiwoom.CommRqData("주식주문", "opt00001", 0, "0101")

6. GUI 디자인 최적화

PyQt5를 사용하여 좀 더 직관적이고 사용하기 쉬운 GUI를 설계할 수 있습니다.
다양한 위젯을 사용하여 사용자 경험을 높일 수 있습니다.

self.quantity_input = QLineEdit(self)
self.quantity_input.move(150, 50)
self.quantity_input.resize(100, 30)

self.stock_code_input = QLineEdit(self)
self.stock_code_input.move(150, 90)
self.stock_code_input.resize(100, 30)

self.buy_button = QPushButton("매수", self)
self.buy_button.move(150, 130)
self.buy_button.clicked.connect(self.on_buy_click)

6.1. 주문 버튼 클릭 이벤트 처리

def on_buy_click(self):
    stock_code = self.stock_code_input.text()
    quantity = int(self.quantity_input.text())
    self.buy_stock(stock_code, quantity)

7. 자동매매 알고리즘 개발

이제 자동매매의 핵심인 알고리즘을 구현해 보겠습니다.
간단한 전략을 예제로 들면, 이동 평균 교차 전략을 사용할 수 있습니다.

def moving_average_strategy(self):
    short_window = 5
    long_window = 20
    prices = self.get_past_prices(stock_code)

    short_ma = prices[-short_window:].mean()
    long_ma = prices[-long_window:].mean()

    if short_ma > long_ma:
        self.buy_stock(stock_code, 1)
    elif short_ma < long_ma:
        self.sell_stock(stock_code, 1)

7.1. 과거 가격 데이터 가져오기

def get_past_prices(self, stock_code):
    # 과거 가격 데이터를 가져오는 메서드 구현
    pass

8. 종료 및 지속적 거래

자산을 관리할 때에는 주문이 체결된 후 거래 내역을 모니터링하고,
필요한 조치를 취하는 것이 매우 중요합니다. 거래가 완료된 후에는
포트폴리오를 업데이트하는 절차가 필요합니다.

def update_portfolio(self):
    # 포트폴리오 상태 업데이트 메서드 구현
    pass

결론

본 글에서는 키움증권 API를 사용하여 파이썬으로 간단한 자동매매 시스템을
구현하는 방법을 살펴보았습니다. PyQt를 통해 사용자 인터페이스를 추가함으로써
더욱 직관적이고 사용하기 쉬운 시스템을 만들 수 있었습니다.
다음으로는 이 기초 위에 더 복잡하고 다양한 알고리즘을 추가하여
개인화된 자동매매 시스템을 만드는 것을 추천합니다.