Header Ads Widget

키움 Open API로 자동 매매 환경 구성하기(with Python)



당신은 어떻게 투자를 하고 있는가?

이 글을 읽는 당신은 어떻게 주식 투자를 하는가? 하루종일 PC 화면을 들여다 보고 있는가? 혹은 스마트폰의 실시간 시세 창을 들여다 보고 있는가?

시스템 트레이딩을 구축하기 위한 준비물

시스템 트레이딩을 구축하려면 몇가지 필요한 준비물이 있다. 일단 가장 먼저 필요한 것은 "파이썬(Python)" 문법 지식과 코딩 기술이다. 파이썬은 최근 프로그래밍 언어중에서 문법적으로 간단하면서도 활용 범위가 넓은 꽤나 다방면에서 활용되는 언어라고 볼 수 있다.

파이썬은 최근에 빅 데이터 수집이나 가공, 시뮬레이션, 수치 연산, 웹 프로그래밍, GUI 프로그래밍, 서버 구현 등의 다양한 분야에 활동되는 언어이다. 이 "파이썬"을 사용하여 실시간으로 키움증권 API를 호출하여 시스템 트레이딩 구축이 가능하다.

파이썬에 대한 문법적 지식과 좀더 자세한 내용을 확인하려면 아래 링크를 참조한다.


파이썬을 익히기 위해 무료 동영상 강좌(유튜브) 혹은 시중에 판매하는 파이썬 서적을 구입해서 읽어봐도 무방하다. 파이썬은 프로그래밍을 어느정도 익힌 유저라면 누구나 쉽게 익힐 수 있다. 최근에 인기있는 프로그래밍 언어 중에서는 초보자들이 익히기 쉬운 언어이다.

다음에 "키움증권" 계좌가 필요하다. 시스템 트레이딩을 구축하기 위해서는 몇군데 증권사에서 지원하는 API를 이용하면 되는데 그중에서 "키움증권"의 Open API는 파이썬으로 API를 호출하여 사용하기에 적절하다. 또한 키움증권 Open API로 시스템 트레이딩을 구축하여 운영하는 유저들이 꽤 되기 때문에 관련 자료도 풍부하다.

키움증권에서도 Open API로 자동 매매를 하는 유저들을 위해서 API 관련 문서와 사후 서비스를 지원하고 있으니 시스템 트레이딩을 구축하려는 유저들과 초보 투자자들에게 비교적 유리하다고 볼 수 있다.

키움증권 계좌 개설하기

키움증권은 카카오뱅크와 마찬가지로 인터넷 금융기관이다. 따라서 계좌 개설도 별도의 지점을 찾지 않고 스마트폰만 있으면 어느 장소에서 편하게 계좌를 개설 할 수 있다.

키움증권 계좌가 없다면 스마트폰 앱을 다운로드 받아서 계좌를 개설하면 된다. 방법은 그리 어렵지 않으므로 여기서는 생략한다.

키움증권 Open API란?

주식,선물,옵션등의 상품을 키움증권의 이용자가 직접 API를 통해 프로그래밍을 하여 매매를 할 수 있는 서비스이다. 일반적으로 키움증권 계좌를 보유한 이용자는 "영웅문"이라는 HTS, MTS를 이용하여 수동으로 주식 매매를 하지만 Open API를 사용하면 이용자가 직접 Open API를 호출하여 조건에 맞게 프로그램으로 매매를 하는게 가능하다.

Open API는 OCX 컨트롤로 되어 있으며 비주얼 베이직, 웹, MFC 등으로 프로그래밍을 할 수 있지만 여기서는 앞에선 언급한대로 파이썬 라이브러리인 "PyQT"를 이용하여 Open API를 컨트롤 하는 방법에 대해 기술해 보기로 한다.

일단 Open API를 사용하려면 다음의 준비가 필요하다. 먼저 키움증권 Open API를 신청해야 하는데 키움증권 Open API 신청 절차는 아래 "키움증권 Open API 설치" 란을 참고할것.

다음으로 Open API를 통해 시스템 트레이딩 프로그램을 개발하기 위한 "파이썬 환경 구성"이 필요하다.

자동매매 파이썬 환경 구성은 아래 링크 글을 참고 할껏.



파이썬 추가 패키지 설치

키움증권 Open API를 호출하여 자신의 PC에 시스템 트레이딩을 구축하려면 추가적으로 파이썬 패키지를 설치해야 한다. 일단 가장 필요한 패키지는 "PyQT5" 이다.

아나콘다를 설치하였다면 Windows 에서 PyQT5 패키지 설치는 꽤나 간단하다. 아나콘다 Prompt 를 실행시킨 후에 pip 을 이용하여 설치하면 된다. pip은 아나콘다를 설치하면 자동으로 설치가 되니 별도로 설치하거나 할 필요가 없다. pip 을 이용하여 파이썬 패키지를 쉽게 설치하고 삭제가 가능하다.

Prompt 에서 아래와 같이 입력한다.
pip install pyqt5

위와 같이 입력하면 PyQT5 패키지가 간단하게 설치가 완료될 것이다.



무언가 에러가 발생한 듯 하지만 pip 버전 문제로 인한 에러 메세지이니 무시하자. pyqt5 패키지 설치가 성공했다는 메시지가 뜬다면 pyqt5 패키지 설치가 완료된 것이다.

이후에 필요한 패키지들은 필요할때마다 언급하도록 한다.

32 Bit 가상 환경 설정

키움증권의 Open API를 파이썬으로 호출하여 사용하려면 아나콘다를 32 bit 환경에서 설치해서 사용해야 정상적으로 동작한다. 일반적으로 64 bit 환경에서 사용하는 경우가 많으므로 64 bit 아나콘다를 설치하였지만 64 bit 아나콘다에서는 Open API의 정상적인 사용이 불가능하다.

따라서 32 bit 용을 사용해야 하는데, 이때 2가지 방법이 있다. 첫번째는 PC에 32/64 bit 용 아나콘다를 전부 설치하는 것이고 두번째는 64 bit 용을 설치한 후에 32 bit 가상 환경을 구동하는 방법이다.

32 bit 가상 환경을 구동하면 32 bit/64 bit 라이브러리를 동시에 이용가능하므로 32 bit 가상 환경으로 설정하여 사용하는게 편리하다.

먼저 아나콘타 프롬프트를 실행한다. 그런 다음에 아래와 같이 커맨드를 입력한다.

set CONDA_FORCE_32BIT=1
conda create -n py38_32 python=3.8.5 anaconda

맨위의 커맨드는 아나콘다를 32 bit 환경으로 일시적으로 바꿔준다. 그 아래 명령어는 32 bit 가상 환경 파일들을 py38_32 라는 폴더에 설치한다는 의미이다.


python 항목은 파이썬의 버전을 입력해준다. 설치된 파이썬 정보를 보려면 프롬프트 창에서 위와 같이 입력하면 된다. 가상 환경 설정 및 설치가 된 후에는 다음과 같이 명령어를 입력해 주면 가상 환경으로 진입하게 된다.



# 32 bit 가상환경 활성화
activate py38_32
# 32 bit 가상환경 비 활성화
deactivate

위의 그림같이 나온다면 32 bit 가상 환경이 정상적으로 활성화 된것이다. 이 상태에서 Open API 를 호출하여 사용이 가능하다. 다시 원래대로 64 bit 환경으로 복귀하려면 "deactivate"를 입력하면 된다.

파이썬 에디터 사용

키움증권 Open API를 호출하여 시스템 트레이딩을 구축하려면 파이썬 코딩을 해야 한다. 따라서 코딩을 하기 위해서는 아무래도 "에디터"를 사용하는게 호율적인 코딩을 위해서 반드시 필요하다. 에디터는 추천할 만한 에디터가 많이 있지만 여기서는 "파이참(Pycharm)" 과 "VS Code" 정도를 추천한다.

파이참은 안드로이드 스튜디오를 개발하고 배포하는 회사인 Jet Brains 사가 개발하였다. 파이썬 개발 에디터로는 최고의 기능과 성능을 보여준다. 파이참은 에디터보단 IDE에 가까운 편이다.

만약 당신이 파이썬을 처음 다뤄봤다면 "파이참"이 좋은 도구가 될 수 있다. 파이참은 개인에 한해서 무료로 사용이 가능하니 다운로드 하여 설치하여 사용하면 유용하다.


위의 링크는 파이참 다운로드 링크이니, 위 링크에 접속하여 다운로드 하여 설치해도 무방하다. 커뮤니티 버전을 설치해도 대부분의 기능 사용이 가능하다.

하지만 파이참은 괜찮은 IDE이지만 다소 무거운 것이 흠이다. 그래서 필자의 경우에는 좀더 가벼운 것을 선호하는 편이이서 "VS Code"를 사용하고 있다.

VS Code는 마이크로소프트에서 개발하여 공급하는 오픈소스 에디터이다. 에디터라고 하지만 수많은 언어들을 지원하고 빠르고 가벼운 장점을 지닌다. 에디터 기능에 충실하면서 파이썬 코딩에도 괜찮은 에디터라고 볼 수 있다. 또한 누구나 무료로 사용이 가능하다.

자신이 좀더 가볍고 빠른 에디터를 선호한다면 VS Code를 사용하는 것도 괜찮다고 볼 수 있다. 다운로드 하여 설치하려면 아래 링크를 클릭하면 된다.


키움증권 Open API 설치

파이썬 개발 환경 구축이 어느정도 완성이 되었으며 이제 "키움증권 Open API" 모듈과 KOA Studio를 다운로드 한다. 키움증권 Open API는 일단 현재 Windows 환경에서만 사용이 가능하다. 리눅스나 다른 환경에서는 사용이 다소 어려운 편이다.

키움증권 홈페이지의 Open API 페이지로 접속 한다.


맨 처음 할 일은 Open API 서비스를 신청하는 것이다. 기존 계좌를 가지고 있거나 새로 계좌를 개설했더라도 별도로 Open API 서비스를 신청을 해야 사용이 가능하다.


키움증권의 Open API 페이지에서 위의 빨간색 네모 안의 "사용 신청하러 가기" 를 클릭한다. 그러면 쉽게 Open API 서비스 신청이 가능하다. 

신청이 완료되었다면 Open API 모듈을 다운로드 받아 설치한다. 위 그림의 2번째 스탭에서 "Open API+ 모듈"을 다운로드 받아 설치를 하면 된다.


Open API 모듈 설치 파일을 실행하면 위와 같이 대상 폴더를 선택하라고 나온다. "다음"을 눌러서 설치해도 무방하다.


설치는 매우 간단하다. 디폴트로 C:\OpenAPI 라는 폴더가 생성되며 설치가 완료된다. 다음으로는 원활한 트레이딩 시스템 개발을 위해 "KOA Studio"를 다운로드 한다.

KOA Studio는 Open API의 기능상 점검을 위해 사전에 테스트를 해 볼 수 있는 툴이다. 파이썬 코딩으로 API를 호출하도록 코딩을 하였으나 잘 동작하지 않거나 오류가 날 경우에 KOA Studio로 확인이 가능하다.

다운로드를 받은 후에 압축을 푼 후 Open API를 설치한 폴더에 복사해서 붙여놓으면 된다.


위의 그림같이 KOA Studio 실행 파일과 KOALoader.dll 파일을 복사하기만 하면 된다. KOA Studio 를 실행하면


위와 같이 KOA Studio 가 실행되는 것을 볼 수 있다. 여기서 Open API를 한번 접속해 보자. 파일 - Open API 접속을 클릭한다.


접속을 하면 키움증권 접속 로그인 화면이 나타난다.


여기서 고객 ID와 비밀번호를 입력하면 된다. 참고로 KOA Studio는 모의투자만 접속이 가능하다. 아마도 Open API 테스트를 위해서 실제 계좌를 액세스 하지 못하게 해놓은 듯 하다. 모의 투자 신청은 이 다음에 설명한다.


모의 투자 계좌로의 로그인이 정상적으로 진행되면 위와 같이 업데이트가 진행되면서 접속이 완료된다.

KOA Studio 에서 신청한 모의 투자 계좌로 접속을 하면 TR을 테스트 해 볼 수 있다. KOA Studio 의 왼쪽 목록에서 TR 목록을 클릭해보면 Open API에서 지원하는 다양한 TR 목록을 볼 수 있다. 이들 TR이 API들이며 이 API 들을 파이썬 코드로 호출하여 얻은 데이터를 바탕으로 "자동 매매" 혹은 "시스템 트레이딩" 구현이 가능하다.

간단하게 KOA Studio로 TR을 호출하여 어떤 결과가 나타나는지 확인해 보자. TR중에 "opt10001"인 주식기본정보 요청 기능 TR을 선택한다.


opt10001 TR을 클릭하면 위의 그림과 같이 오른쪽 상단에 종목코드를 입력할 수 있는 칸이 나타난다. 여기서 조회하려는 종목코드를 입력하고 "조회" 버튼을 누르면 아래에 "조회 데이터"가 출력이 된다. 위의 종목은 삼성전자이다.

삼성전자의 여러 정보들이 하단의 출력창에 표시되는 것을 알 수 있다. 이걸 통해 API 가 정상 동작하는지 여부를 확인할 수 있다.

이번에는 모의 투자 계좌의 예수금 현황을 조회해보자. 예수금 조회 TR은 "opw00001"을 사용하면 된다. 예수금 조회 TR 같은 계좌 정보가 필요한 TR의 경우에는 Open API Tray 아이콘을 클릭하여 미리 "계좌비밀번호"를 저장해 줘야 한다.


위와 같이 트레이 아이콘을 살펴보면 Open API 아이콘이 보인다. 이걸 오른쪽 마우스 버튼을 누르면 위와 같이 "계좌비밀번호 저장" 메뉴가 나타난다. 클릭하면


위의 그림과 같이 계좌 비밀번호를 저장할 수 있다. 계좌 번호를 확인한 후 비밀번호 입력란에 비밀번호를 입력한다. 모의 투자 계좌는 "0000"을 입력하면 된다. (실제 계좌는 본인이 설정한 비밀번호를 저장해놔야 한다.)

비밀번호 등록이 끝났으면 KOA Studio 로 가서 "opw00001" TR 메뉴로 이동한다.


여기서 모의 투자 계좌에 있는 예수금을 확인하려면 오른쪽 상단의 계좌번호와 비밀번호를 입력하고 "조회" 버튼을 누르면 된다. 계좌번호는 모의 투자 계좌의 경우 8자리로 확인이 되지만 실제 필요한 계좌번호는 10자리이다. 모의 투자 계좌 번호 8자리 + 11 을 해서 총 10자리의 계좌 번호를 입력해 주면 된다. 이는 실제 파이썬 코드에서도 동일하게 사용하면 된다.

비밀번호는 모의 투자 계좌이므로 "0000"을 입력하면 된다. 그러면 위와 같이 출력란에 예수금과 각종 데이터들이 출력이 될 것이다. 위 화면을 봤을때 계좌에 있는 1억원이 표시되는 것을 확인할 수 있다.

이상으로 KOA Studio로 TR 조회 하는 법에 대해 간단히 알아봤다. 이외에도 TR은 다양하며 자동 매매 시스템을 구축할때 필요한 TR을 파이썬 코드로 호출하여 사용하면 된다. 어떤 것을 사용할지는 본인의 머릿속으로 그리면 될 것이다.

KOA Studio는 Open API로 자동매매 시스템을 구현할때 필요한 개발 도구이므로 필요할때 마다 사용하면 된다.

상시 모의 투자 신청하기

Open API 를 사용하여 시스템 트레이딩을 하려면 아무래도 테스트가 필요할 것이다. 이런 유저들을 위해 키움증권에서는 상시 모의 투자 서비스를 제공하고 있다. 모의 투자는 실제 자신의 현금을 사용하지 않고도 마치 실제 투자를 하는 것 과 같이 주식 장이 열릴때 가상의 자산으로 주식 매매를 할 수 있다.


상시모의투자를 하기 위해서는 위 서비스를 신청하면 된다. 신청은 간단하며 Open API 테스트를 위해 3개월로 신청하면 된다.


일단 위의 그림에서 기존 계좌를 개설한 유저라면 "참가 신청하기" 버튼을 클릭하면 된다.


Open API를 테스트 해보기 위해서는 "주식" 매매를 테스트 해볼 것이므로 주식 참가에 체크하고 투자원금과 투자기간을 설정하면 된다. 그런 다음에 하단으로 창을 내려보면


필명, 투자경력, 직업 등을 입력해주면 된다. 유저가 적절히 입력하고 나서 "참가신청"을 누르면 참가 신청이 완료된다.


모의 투자 계좌는 신청 즉시 개설이 완료되며 위와 같이 투자원금과 투자 기간이 표시된다. 투자 기간이 지나면 다시 모의투자 신청을 해주면 된다. Open API를 테스트 하면서 모의 투자 계좌를 적절히 이용할 수 있다.

키움증권 Open API로 계좌 로그인 하기

여기까지 진행하였다면 자신의 키움증권 계좌를 통해 Open API를 사용하여 "자동 트레이딩 시스템"을 구축할 수 있는 모든 준비가 끝난 것이다. 이제 파이썬 프로그래밍을 통해 차근차근 구축을 시작하면 된다.

파이썬 자동 매매 시스템 구축중에 가장 기본적인 것은 일단 파이썬 코드로 자신의 키움증권 계좌에 "로그인"을 하는 것이다. 로그인 처리를 해야 Open API를 호출하여 사용할 수 있고 자동 매매가 가능해진다.

파이썬은 C++ 이나 자바와 마찬가지로 "객제지향" 프로그래밍이 가능한 언어이다. 따라서 자주 사용하는 기능은 "클래스"화 해서 사용하면 매우 유용하게 사용할 수 있다. 키움증권 Open API 관련된 함수(파이썬에선 매서드)를 클래스로 작성하여 이용하면 편리하다.

계좌 로그인을 비롯하여 Open API 와 관련된 매서드들을 여기서는 kiwoom.py 라는 소스에 작성해 보도록 한다.

먼저 Open API를 사용하려면 PyQT5 관련 라이브러리를 import 한다.


from PyQt5.QAxContainer import *
from PyQt5.QtCore import *
소스 파일의 최상단에 위와 같이 PyQT5 관련 라이브러리를 import 하는 구문을 작성한다. 


class Kiwoom(QAxWidget): # Kiwoom 클래스 선언, QAxWidget 클래스 상속
	def __init__(self):  # __init__ 매소드 선언

Kiwoom 이라는 클래스를 선언하고 Kiwoom 클래스에 QAxWidget 이라는 클래스를 상속하였다. 이 외에 관련된 설명은 파이썬 문법 책이나 위에 링크한 "점프 투 파이썬" 강의 자료를 참고하면 된다. 문법적 자세한 설명은 여기서는 생략한다.

Kiwoom 클래스를 호출하면 __init__ 매소드에서 자동으로 구문이 실행된다. "__init__" 매소드에 이벤트 루프 함수를 호출하고 로그인 시그널을 호출하면 로그인 창이 출력되게 된다. 로그인 창에서 자신의 아이디와 비밀번호를 입력하면 Open API에 접속이 완료된다. Open API 로그인까지 동작하는 코드는 아래와 같다.


import sys
from PyQt5.QAxContainer import *
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *

class Kiwoom(QAxWidget):
    def __init__(self):
        super().__init__()
        print("[Kiwoom] Open API start....")

        # QEventLoop 클래스 저장
        self.login_event_loop = QEventLoop()

        self.getOCXInstance()  # OCX to Python
        self.eventSlots()      # Signal Slot 
        self.signalLoginCommConnect() # 로그인 요청 함수

    def getOCXInstance(self):
        # 키움 OpenAPI API 호출
        self.setControl("KHOPENAPI.KHOpenAPICtrl.1")

    def eventSlots(self):
        # 로그인 관련 이벤트 연결
        self.OnEventConnect.connect(self.loginSlot)

    def signalLoginCommConnect(self):
        # 로그인 요청 시그널
        self.dynamicCall("CommConnect()")
        # 이벤트 루프 실행
        self.login_event_loop.exec_()

    def loginSlot(self, err_code):
        if err_code ==  0:
            print("[Kiwoom] Open API Connected.")
        else:
            print("[Kiwoom] Open API is not connect.")

        self.login_event_loop.exit()


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


위 코드는 간단하게 Open API의 접속 까지의 동작을 구현한 코드이다. Kiwoom 클래스를 호출하면 Open API 를 호출하여 로그인을 시도한다.  로그인 창에서 아이디와 비밀번호를 입력하면 loginSlot( ) 매소드에서 err_code를 받아서 0이면 Open API 접속이 성공하고 그렇지 않으면 접속되지 않았다고 메시지를 표시한뒤 프로그램이 종료된다.


위 코드를 실행하면 위와 같이 접속이 완료되고 종료되는 것을 볼 수 있다.

이후에 파이썬 코드로 자동 매매 시스템을 구현하면서 Open API와 관련된 함수(매소드)를 구현할때는 kiwoom.py 에 추가를 하면 된다. 파이썬도 객제 지향 프로그래밍이 가능하기 때문에 Kiwoom 클래스에 관련 매소드를 추가하고 나서 다른 파이썬 코드에서 재 활용이 가능하다.

이상으로 키움 Open API 를 사용하여 기본적인 자동매매 환경 구성에 대하여 알아보았다. 여기까지 준비가 되었으면 이제 파이썬을 사용하여 주식 자동 매매인 시스템 트레이딩을 본격적으로 시작할 수 있는 환경을 갖춘 셈이다. 

추후 포스트에는 자동 매매시에 필요한 계좌 정보 조회, 예수금 조회 등에 대하여 기술해 보도록 하겠다.

댓글 쓰기

0 댓글