Kiwoom method

CommConnect

CommConnect 메서드는 인자를 갖지 않으며 반환 값을 통해 로그인 성공 여부를 확인.

1
self.kiwoom.dynamicCall("CommConnect()")

CommRqData

TR을 서버로 송신

GetConnectState

현재 접속 상태를 반환하는 메서드
메서드의 리턴 값을 확인함으로 서버 접속 상태를 확인 가능.

1
2
3
4
if self.kiwoom.dynamicCall("GetConnectState()") == 0:
self.statusBar().showMessage("Not connected")
else:
self.statusBar().showMessage("Connected")

OnEventConnect

OnEventConnect 함수의 인자로 nErrCode라는 정숫값이 입력되는데
해당 값이 0이면 로그인 성공, 음수이면 로그인 실패.

PyQt에서 OpenAPI+의 이벤트를 처리하려면 이벤트 함수의 원형을 참조해서 해당 이벤트를 처리할 메서드를 구현해야 함.

1
2
3
def event_connect(self, err_code):
if err_code == 0:
self.text_edit.append("로그인 성공")

OnReceiveTrData

서버와 통신 후 서버로 부터 데이터를 전달받은 시점에 발생.
이벤트는 총 9개의 인자가 전달됨.

1
2
def receive_trdata(self, screen_no, rqname, trcode, recordname, prev_next, data_len, err_code, msg1, msg2):
pass

OnReceiveRealData

실시간 데이터를 받는 곳으로 주식시장이 열려있는 동안에만 발동 됨.
가격이나 거래량, 호가상태등이 변동 할 때 이벤트가 발생(setrealreg이용)

OnReceiveChejanData

체결 데이터를 받은 시점을 알려준다.

1
self.OnReceiveChejanData.connect(self._receive_chejan_data)

CommGetData

더 이상 지원하지 않을 함수(2017년 11월 25일 현재는 지원)

TR 데이터, 실시간 데이터, 체결잔고 데이터 등을 얻어올 수 있음.
CommGetData 메서드는 OpenAPI+가 제공하는 메서드이므로 이를 파이썬에서 사용하려면 dynamicCall 메서드를 사용해야 함.
그리고 OpenAPI+에는 수많은 TR이 있으므로 CommGetData의 첫 번째 인자와 세 번째 인자에 TR 명과 Request 명을 입력하여 어떤 TR에 대한 데이터를 얻고자 하는지 알려줘야 함.

1
2
3
4
5
6
7
def receive_trdata(self, screen_no, rqname, trcode, recordname, prev_next, data_len, err_code, msg1, msg2):
if rqname == "opt10001_req":
name = self.kiwoom.dynamicCall("CommGetData(QString, QString, QString, int, QString)", trcode, "", rqname, 0, "종목명")
volume = self.kiwoom.dynamicCall("CommGetData(QString, QString, QString, int, QString)", trcode, "", rqname, 0, "거래량")

self.text_edit.append("종목명: " + name.strip())
self.text_edit.append("거래량: " + volume.strip())

위의 코드에서 receive_trdata 메서드는 OnReceiveTrData 이벤트가 발생할 때마다 자동으로 호출.
어떤 TR 요청에 의해 OnReceiveTrData 이벤트가 발생했는지를 확인하기 위해 먼저 사용자 Request 명(rqname)을 확인.
앞서 CommRqData를 통해 서버에 TR을 송신 할 때 Request 명으로 opt10001_req을 설정했으므로 receive_trdata 메서드에서는 rqname 값이 opt10001_req인지 확인.

GetCommData

GetCommRealData

GetLoginInfo

계좌 개수, 계좌 번호, 사용자 ID, 사용자명등의 정보를 얻어올 수 있음.

1
account_num = self.kiwoom.dynamicCall("GetLoginInfo(QString)", ["ACCNO"])

GetCodeListByMarket

종목 코드 목록을 얻어오는 메서드.
메서드의 인자로 시장 구분 코드를 문자열로 넘겨주면 메서드의 리턴 값으로 해당 시장에 속해 있는 종목들의 종목 코드 목록을 반환.

1
ret = self.kiwoom.dynamicCall("GetCodeListByMarket(QString)", ["0"])

GetMasterCodeName

종목 코드로부터 한글 종목명을 얻기 위해 사용

1
2
3
4
kospi_code_name_list = []
for x in kospi_code_list:
name = self.kiwoom.dynamicCall("GetMasterCodeName(QString)", [x])
kospi_code_name_list.append(x + " : " + name)

GetRepeatCnt

1
2
3
def _get_repeat_cnt(self, trcode, rqname):
ret = self.dynamicCall("GetRepeatCnt(QString, QString)", trcode, rqname)
return ret

SendOrder

주식 주문에 대한 정보를 서버로 전송.
다만, 증권사 서버에 주문 요청을 했다고 해서 즉시 체결되는 것이 아니므로 이벤트 루프를 사용해 대기하고 있어야 함.
총 9개의 인자를 받음

1
2
3
def send_order(self, rqname, screen_no, acc_no, order_type, code, quantity, price, hoga, order_no):
self.dynamicCall("SendOrder(QString, QString, QString, int, QString, int, int, QString, QString)",
[rqname, screen_no, acc_no, order_type, code, quantity, price, hoga, order_no])

GetChejanData

체결잔고 데이터를 반환.

1
2
3
def get_chejan_data(self, fid):
ret = self.dynamicCall("GetChejanData(int)", fid)
return ret

get_chejan_data 메서드는 함수 인자인 FID 값을 통해 서로 다른 데이터를 얻을 수 있음.
더 자세한 FID 정보는 개발 가이드 8.19절을 참조.

FID 설명
9203 주문번호
302 종목명
900 주문수량
901 주문가격
902 미체결수량
904 원주문번호
905 주문구분
908 주문/체결시간
909 체결번호
911 체결량
10 현재가, 체결가, 실시간 종가

SetInputValue

1
2
def set_input_value(self, id, value):
self.dynamicCall("SetInputValue(QString, QString)", id, value)

파이썬으로 배우는 알고리즘 트레이딩

Share