파이썬 자동매매 개발, 키움증권 API, Open API+ 로그인하기

최근 금융 시장에서 자동매매는 트레이더들 사이에서 인기를 끌고 있습니다. 특히, 파이썬은 간결한 문법과 다양한 라이브러리 덕분에 자동매매 시스템 개발에 적합한 언어로 자리 잡고 있습니다. 본 글에서는 키움증권의 Open API를 이용하여 자동매매를 위한 초기 세팅 및 로그인 방법에 대해 다룰 것입니다.

1. 키움증권 Open API란?

키움증권 Open API는 사용자가 제공하는 다양한 트레이딩 기능을 활용하여 프로그램적으로 매매를 실행할 수 있는 인터페이스입니다. 개발자는 이 API를 통해 주식, 선물, 옵션 등 다양한 금융 상품에 접근하고, 매매 주문 및 실시간 데이터를 받을 수 있습니다.

1.1 API의 장점

  • 자동매매 시스템 개발 용이
  • 실시간 시장 데이터 수집
  • 개발자 커뮤니티 지원
  • 다양한 프로그래밍 언어 호환

2. 사전준비

키움증권 Open API를 사용하기 위해서는 몇 가지 사전 준비가 필요합니다. 키움증권 계정 및 API 키 발급이 필요합니다.

2.1 키움증권 계정 생성

키움증권 홈페이지를 방문하여 계정을 생성합니다. 계정 생성 후, API 관련 메뉴를 통해 필요한 설정을 진행합니다.

2.2 API 키 발급

로그인 이후, API 신청서 작성을 통해 API 키를 발급받습니다. 이는 API 사용 시 필수적으로 필요합니다.

2.3 Python 환경 세팅

Python 개발 환경을 준비합니다. Anaconda 또는 Visual Studio Code를 추천합니다. 필요한 라이브러리는 다음과 같습니다.

pip install pyqt5
pip install pandas
pip install numpy

3. 키움증권 Open API+ 로그인하기

API를 사용하기 전에 먼저 로그인을 해야 합니다. 아래 코드는 API에 로그인하는 과정을 보여주는 예제입니다.

3.1 키움 API 모듈 import

import win32com.client
import pythoncom

3.2 로그인 관련 함수 정의

로그인을 위한 콜백 함수를 정의합니다. 이는 API와의 이벤트 처리에 필요합니다.


class Kiwoom:
    def __init__(self):
        self.tr = win32com.client.Dispatch("KHOPENAPI.KHOpenAPICtrl.1")
        self.login_event_slot()

    def login_event_slot(self):
        self.tr.OnEventConnect.connect(self.login_event)

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

3.3 로그인 실행

if __name__ == "__main__":
    app = QtWidgets.QApplication([])
    kiwoom = Kiwoom()
    kiwoom.tr.CommConnect()
    app.exec_()

위 코드를 실행하면 키움증권 로그인 창이 나타납니다. 로그인 후, 성공적으로 연결되면 “로그인 성공”이라는 메시지가 출력됩니다.

4. 종목 코드 얻기

로그인 후 원하는 종목의 코드를 얻기 위해 다음 코드를 추가합니다.


def get_code_list(self):
    code_list = self.tr.GetCodeListByMarket(0)  # 0: 코스피
    return code_list.split(';')

위 함수를 통해 코스피에 상장된 종목들의 코드를 가져올 수 있습니다.

4.1 종목 코드 출력

if __name__ == "__main__":
    # 기존 코드 ...
    code_list = kiwoom.get_code_list()
    print("코스피 종목 코드 리스트:", code_list)

5. 주식 주문하기

이제 주문을 할 수 있도록 하는 코드를 작성합니다. 아래는 매수 주문을 수행하는 예제입니다.


def buy_stock(self, code, quantity):
    self.tr.SendOrder("주문명", "130", "종목코드", quantity, 0, "00", "0", "0", "")

위의 함수에서는 시장가로 주식을 매수하는 예제를 보여줍니다.

5.1 매수 주문 실행

if __name__ == "__main__":
    # 기존 코드 ...
    kiwoom.buy_stock("005930", 1)  # 삼성전자 1주 매수

6. 매도 주문하기

매도 주문도 유사한 방식으로 진행됩니다.


def sell_stock(self, code, quantity):
    self.tr.SendOrder("매도주문", "130", "종목코드", -quantity, 0, "00", "0", "0", "")

주문 시, 수량값을 음수로 입력하여 매도하게 됩니다.

6.1 매도 주문 실행

if __name__ == "__main__":
    # 기존 코드 ...
    kiwoom.sell_stock("005930", 1)  # 삼성전자 1주 매도

7. 실시간 데이터 수신

Trading에서 중요한 부분 중 하나는 실시간 데이터 수신입니다. 아래는 실시간 데이터를 수신하는 방법을 설명합니다.


def setup_signal(self):
    self.tr.OnReceiveRealData.connect(self.receive_real_data)

def receive_real_data(self, code, real_type, real_data):
    print(f"종목: {code}, 실시간 데이터: {real_type}, 데이터: {real_data}")

이 함수를 통해 실시간 데이터를 처리할 수 있습니다.

7.1 실시간 데이터 수신 실행

if __name__ == "__main__":
    # 기존 코드 ...
    kiwoom.setup_signal()
    kiwoom.tr.SetRealReg("0001", "005930", "20", "0")  # 삼성전자의 실시간 등록

8. 결론

이번 글에서는 키움증권 Open API를 활용하여 파이썬으로 자동매매를 위한 초기 설정 및 로그인 방법을 알아보았습니다. 이외에도 다양한 기능들이 많으니 필요한 기능을 추가해 나가며 자신만의 자동매매 시스템을 구축해보길 바랍니다. 지속적인 학습과 실험을 통해 자신만의 매매 전략을 개발할 수 있습니다.

도움이 되는 자료