카테고리 없음

[Python] 키움증권 OpenAPI를 이용한 종목코드 및 종목명 요청 코드 설명

indigenthuman 2024. 9. 7. 14:21

키움증권 OpenAPI를 이용한 종목코드 및 종목명 요청 코드 설명

이번 글에서는 키움증권 OpenAPI를 통해 종목코드 및 종목명을 요청하는 코드에 대해 설명합니다. 이 코드는 PyQt5를 사용하여 키움증권 API에 연결한 후, 코스피와 코스닥 시장에서 종목코드와 종목명을 가져오는 기능을 구현한 예시입니다.

1. Kiwoom 클래스 설정

키움증권 OpenAPI와 상호작용하기 위해 QAxWidget 클래스를 상속받은 Kiwoom 클래스를 정의합니다. 이 클래스는 API와의 연결, 계좌번호 요청, 종목코드 요청 및 종목명을 처리하는 메서드를 포함하고 있습니다.

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

class Kiwoom(QAxWidget):
    def __init__(self):
        super().__init__()
        self._make_kiwoom_instance()
        self._set_signal_slots()
        self._comm_connect()
        self.account_number = self.get_account_number()

    def _make_kiwoom_instance(self):
        self.setControl("KHOPENAPI.KHOpenAPICtrl.1")

    def _set_signal_slots(self):
        self.OnEventConnect.connect(self._login_slot)

    def _login_slot(self, err_code):
        if err_code == 0:
            print("connected")
        else:
            print("not connected")
        self.login_event_loop.exit()

    def _comm_connect(self):
        self.dynamicCall("CommConnect")
        self.login_event_loop = QEventLoop()
        self.login_event_loop.exec_()

2. 종목코드 요청 함수

키움증권 API에서 제공하는 GetCodeListByMarket 메서드를 호출하여 특정 시장의 종목코드를 가져옵니다. 시장 구분은 market_type을 통해 이루어지며, 0은 코스피, 10은 코스닥 시장을 나타냅니다. 반환된 종목코드 리스트는 문자열로 ;로 구분되어 있으며, 이를 분리하여 사용합니다.

def get_code_list_by_market(self, market_type):
    code_list = self.dynamicCall("GetCodeListByMarket(QString)", market_type)
    code_list = code_list.split(';')[:-1]  # 마지막 빈 문자열 제거
    return code_list
  • market_type: "0"은 코스피, "10"은 코스닥 시장을 나타냅니다.
  • split(';')[:-1]: 반환된 종목코드 리스트는 ;로 구분되어 있으며 마지막에 빈 문자열이 포함되므로 이를 제거합니다.

3. 종목명 요청 함수

종목코드를 통해 해당 종목의 이름을 요청하는 함수입니다. GetMasterCodeName 메서드를 사용해 종목코드를 인자로 전달하면, 해당 종목의 이름을 반환합니다.

def get_master_code_name(self, code):
    code_name = self.dynamicCall("GetMasterCodeName(QString)", code)
    return code_name
  • code: 종목코드를 전달하면, 해당 종목의 이름을 반환합니다.

4. 코드 실행 예시

코스피와 코스닥 시장의 종목코드를 가져오고, 각각의 종목명을 출력하는 예시입니다.

from api.Kiwoom import *
import sys

app = QApplication(sys.argv)
kiwoom = Kiwoom()

# 코스피 종목코드와 이름 출력
kospi_code_list = kiwoom.get_code_list_by_market("0")
print(kospi_code_list)
for code in kospi_code_list:
    code_name = kiwoom.get_master_code_name(code)
    print(code, code_name)

# 코스닥 종목코드와 이름 출력
kosdaq_code_list = kiwoom.get_code_list_by_market("10")
print(kosdaq_code_list)
for code in kosdaq_code_list:
    code_name = kiwoom.get_master_code_name(code)
    print(code, code_name)

app.exec_()

5. 실행결과

이 코드를 실행할 경우 다음과 같이 코스피, 코스닥의 종목 코드와 종목 이름이 출력됩니다.

결론

이 코드는 키움증권 OpenAPI를 통해 코스피 및 코스닥 시장에서 종목코드와 종목명을 요청하고 출력하는 간단한 예시입니다. 이를 통해 각 시장의 종목에 대한 정보를 쉽게 조회할 수 있으며, 자동매매 프로그램 개발의 기초로 활용할 수 있습니다.