4. [키움 openAPI] 종목코드, 기업명 받아오기
2020. 12. 9. 21:49ㆍAI트레이딩/키움API
728x90
반응형
로그인 이후 사용 할 수 있다
3. GetMasterCodeName
종목코드로 한글 기업명을 반환한다.
4. GetCodeListByMarket
종목 코드를 6자리 숫자로 반환해 준다.
- 주식 시장별 종목코드 리스트를 ';'로 구분해서 전달.
- 시장구분값을 ""공백으로하면 전체시장 코드리스트를 전달
- [시장구분값]
0 : 코스피
10 : 코스닥
3 : ELW
8 : ETF
50 : KONEX
4 : 뮤추얼펀드
5 : 신주인수권
6 : 리츠
9 : 하이얼펀드
30 : K-OTC
코드 설명
- class OpenAPI(QAxWidget):
OpenAPI class의 instance가 QAxWidget class가 제공하는 method를 호출할 수 있게 된다.
- setControl('KHOPENAPI.KHOpenAPICtrl.1')
COM 오브젝트를 생성하려면 setControl method를 사용하여 ProgID인 "KHOPENAPI.KHOpenAPICtrl.1"를 전달해 준다
- def comm_connect(self):
self.dynamicCall('CommConnect()')
OpenAPI class에서 로그인을 위해 comm_connect라는 method를 구현.
해당 method에서는 CommConnect()를 dynamicCall function을 통해 호출 한다.
- comm_connect 호출시 키움증권 로그인 창 -> 로그인 정보입력 -> 로그인정보 전송-> OnEventConnect 이벤트를 발생
- exec_
method를 호출해 이벤트 루프를 생성
키움증권 서버로부터 OnEventConnect 이벤트가 발생할 때까지 종료하지 않은 상태로 남아 있는다
- set_signal_slots
키움증권 서버로부터 발생한 이벤트와 이를 처리할 메서드를 연결하기 위해 _set_signal_slots 메서드를 추가한다.
이벤트 루프는 객체를 생성한 후 exec_ method를 호출하는 순간 생성
로그인 창이 나타나 사용자가 비밀번호를 입력해 정상적으로 로그인이 될 때까지 더는 파이썬 코드는 실행되지 않고 대기한다. 이것은 comm_connect method에서 QEventLoop 클래스를 통해 이벤트 루프를 생성했기 때문이다.
import sys
from PyQt5.QtWidgets import *
from PyQt5.QAxContainer import *
from PyQt5.QtCore import *
import pandas as pd
# get code & name from kiwoom API
TR_REQ_TIME = 0.2
class KiwoomAPI(QAxWidget):
def __init__(self):
print(f'openapi __name__:{__name__}')
super().__init__()
self._create_kiwoom_api_instance()
self._set_signal_slots()
# ////////////////////////////////////////////////////////////////
# // login ////////////////////////////////
# //////////////////////////////////////////////////////////////
def _create_kiwoom_api_instance(self):
""" PyQt의 QAxWidget class를 사용해 API instance 생성
"""
self.setControl('KHOPENAPI.KHOpenAPICtrl.1')
def _set_signal_slots(self):
try:
self.OnEventConnect.connect(self._on_event_connect)
print('_set_signal_slots')
except Exception as e:
ana_64bit = sys.maxsize > 2 ** 32
if ana_64bit:
print('******[Anaconda 64-bit]******* 32-bit 환경 필요')
else:
print(f'{e}')
def comm_connect(self, **kwargs):
"""로그인 요청 -> 키움증권 로그인창 띄워줌. 자동로그인 설정시 바로 로그인 진행
OnEventConnect() callback
:param kwargs:
:return: 0: 로그인 요청 성공
"""
lRet = self.dynamicCall('CommConnect()')
self.event = QEventLoop()
print("event loop 전")
self.event.exec_()
print("event loop 후")
print("lRet", lRet)
return lRet
def _on_event_connect(self, nErrCode, **kwargs):
"""로그인 처리 이벤트, 로그인 상태 전달
로그인 성공시 0, 음수면 실패
:param ErrCode: 0: 로그인 성공, 100: 사용자 정보교환 실패, 101: 서버접속 실패, 102: 버전처리 실패
:param kwargs:
:return:
"""
if nErrCode == 0:
print('[*----------[ 연결성공 ]----------*]')
elif nErrCode == -100:
print('********[사용자 정보교환 실패]********')
elif nErrCode == -101:
print('******** [서버접속 실패] ********')
elif nErrCode == -102:
print('******** [버전처리 실패] ********')
self.event.exit()
# ////////////////////////////////////////////////////////////////
# // Stock Code & Name ////////////////////////////////
# //////////////////////////////////////////////////////////////
def get_code_list_by_market(self, market):
code_list = self.dynamicCall('GetCodeListByMarket(QString)', market)
code_list = code_list.split(';')
return code_list[:-1]
def get_name_by_code(self, code):
name_list = self.dynamicCall("GetMasterCodeName(QString)", code)
return name_list
if __name__ == '__main__':
app = QApplication(sys.argv)
kiwoomapi = KiwoomAPI()
kiwoomapi.comm_connect()
# login 후 사용가능
code_list = kiwoomapi.get_code_list_by_market('0')
codelist = []
namelist = []
for code in code_list:
codelist.append(code)
namelist.append(kiwoomapi.get_name_by_code(code))
df = pd.DataFrame({'code': codelist, 'name': namelist})
print(df)
반응형
'AI트레이딩 > 키움API' 카테고리의 다른 글
키움증권 openAPI 개발가이드 정리 - 1 (통신처리, 로그인, 조회) (0) | 2020.12.27 |
---|---|
[키움증권 openAPI] QAxWidget 상속 정보 (0) | 2020.12.24 |
3. [키움증권 openAPI] OnEventConnect 로그인 성공 실패 (0) | 2020.12.09 |
1. 키움증권 open API 설치 및 접속 (0) | 2020.07.13 |
2. [키움증권 오픈 API] PyQt 파이썬(키움증권 연결 commConnect) (0) | 2020.07.13 |