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