PYTHON/Kiwoom Open API

키움증권 Open API 개발 가이드 사용 설명서 (1)

  • -

키움증권에서는 자사의 Open API의 사용 방법에 대해 기본적인 가이드 자료를 제공하고 있다. 다만 기본적으로 제공하는 함수의 형태가 파이썬에서 사용하기가 다소 어려운 형태로 되어 있기 때문에, 개발 가이드를 본다고 하더라도 어떻게 사용해야 할지 잘 모르는 경우가 태반이다. 따라서 해당 포스팅에서는 개발 가이드를 어떻게 활용할 수 있는지, 그리고 어떤 함수는 개별적으로 작동하고 어떤 함수는 다른 함수와 함께 사용되는지에 대해 정리해보고자 한다.

 

TR 관련 함수

TR 관련 함수란 개발 가이드 자료 중 [5.4 OpenAPI 컨트롤 이벤트] 항목 안에 있는 함수로, 총 8가지의 함수를 제공하고 있다. 또한 이에 대해 "차트 컨트롤에서 발생하는 컨트롤 이벤트 목록은 다음과 같다."고 설명하고 있는데, 솔직히 무슨 말인지 잘 모르기도 하니 이렇게 이해하고 넘어가도록 하자. "서버로 정보를 요청했을 경우 서버는 이용자에게 해당 정보를 제공하게 된다. 이 때 서버에 요청한 정보에 대한 결과값(정보)을 서버가 요청자에게 보냈을 때 발생하는 것이 아래의 함수들이다. 즉, 아래의 이벤트가 발생하지 않았다면 정보 요청이 잘못된 것이며 아래 이벤트가 발생했을 때 특정 함수로 연결되게끔 구축해놓지 않는다면 그 어떠한 결과값도 얻어올 수 없다. 다시 말해, 아래의 함수들은 요청과 결과 사이를 이어주는 연결 다리 역할을 수행하는 이벤트다.

  • OnReceiveTrData : Tr 수신 시 발생하도록 하는 이벤트
  • OnReceiveRealData : 위의 OnReceiveTrData 함수와 동일한 기능을 하나, Real에서 알 수 있듯이, 실시간 데이터의 수신을 담당한다.
  • OnReceiveMsg : 수신 메시지 이벤트로, 특정 오류가 발생했을 때 이 함수로 받아오면 된다.
  • OnReceiveChejanData : 주문 접수 및 확인 수신 시 발생하는 이벤트
  • OnEventConnect : 통신의 연결 상태가 변경될 경우 발생하는 이벤트
  • OnReceiveRealCondition : 실시간으로 키움증권의 조건검색기에 종목이 편입되거나 이탈할 경우 발생하는 이벤트
  • OnReceiveTrCondition : 조회 시점 당시 조건검색기에 검색된 종목을 알려주는 이벤트
  • OnReceiveConditionVer : 사용자의 컴퓨터 내에 조회 시점의 조건검색기 내에 구축되어 있는 여러 조건들을 저장하도록 요청하는 이벤트

위의 함수들은 정보를 요청했을 때 해당 정보를 받아오기 위해 반드시 필요한 함수이기 때문에, 코드 구축 시 반드시 사용해야만 하는 함수들이다. 다시 말해, 정보를 암만 요청해봐도 정보를 받아오는 절차가 마련되어 있지 않다면 그 정보는 죽었다 깨어나도 이용할 수 없게 되니 사용해야 한다는 의미이다.

다음으로, TR 관련 함수를 어떻게 사용할 수 있는지에 대한 설명이 그 다음 장에서 바로 이어지고 있는데, 표를 보면 LONG이나 void, 또는 BSTR, LPCSTR 등등 파이썬을 사용하다보면 전혀 접할 수 없었던, 모르는 단어들이 많이 나온다. 겁먹지 말자. 파이썬에서는 그러한 LONG, void, BSTR 등등의 이상한 알파벳들을 빼고 보면 된다.

TR 이벤트를 처리하는 방법은 다음과 같다. 단순하게도, 특정 이벤트가 발생했을 경우 특정 함수로 연결되도록 하는 코드를 구축해주면 해당 이벤트가 발생했을 때 알아서 그 함수를 실행하게 된다. 
위의 OnEventConnect 이벤트를 예로 들어 보자. 앞서 이야기했듯이 해당 이벤트는 '통신 연결 상태가 변경될 경우' 발생하는 이벤트이기 때문에, '미접속 → 접속' 또는 '접속 → 미접속' 둘 중 한 가지 상황이 발생했을 때 해당 이벤트가 발생하게 된다. 즉, 처음에 Open API를 켜서 접속을 하게 되면 '미접속 → 접속'으로 변경된 것이기 때문에 OnEventConnect라는 이벤트가 발생하게 되고, 우리는 그 이벤트가 발생하게 될 경우에 DEF_name이라는 함수로 연결되도록 하는 구조를 갖춰주기만 하면, 해당 DEF_name이라는 함수 내에서 로그인과 관련된 여러 가지 정보들을 처리할 수 있게 된다.

self.kiwoom.OnReceiveTrData.connect(self.DEF_name)
self.kiwoom.OnReceiveReadlData.connect(self.DER_name)
self.kiwoom.OnReceiveMsg.coonect(self.DEF_name)
self.kiwoom.OnReceiveChejanData(self.DEF_name)
self.kiwoom.OnEvenctConnect.connect(self.DEF_name)
self.kiwoom.OnReceiveRealCondition.connect(self.DEF_name)
self.kiwoom.OnReceiveTrCondition.connect(self.DEF_name)
self.kiwoom.OnReceiveConditionVer.connect(self.DEF_name)

 


728x90

 

사용례 - LONG CommConnect() 함수와 OnEventConnect 이벤트의 사용 방법

[설명] 로그인이 성공하거나 실패할 경우 OnEventConnect 이벤트가 발생하고, 그 이벤트의 인자값으로 로그인 성공 여부를 알 수 있다.

즉, 위에서 살펴봤던 OnEventConnect 이벤트가 발생하게 될 경우 CommConnect 함수를 통해 로그인의 성공 또는 실패 여부를 확인할 수 있다는 것을 의미한다. 따라서, 이는 다음과 같은 코드를 구축함으로써 사용할 수 있다.

self.kiwoom.OnEventConnect.connect(self.DEF_name)

def DEF_name():
	justify = self.kiwoom.dynamicCall("CommConnect()")
	if justify == 0:
		print("로그인에 성공하였습니다.")
	elif justify != 0:
		print("로그인에 실패하였습니다.")

 

즉, OnEvenctConnect가 발생할 경우 DEF_name이라는 함수로 연결되도록 하고, DEF_name이라는 함수가 실행되면 그 안에서 CommConnect()라는 메소드를 사용하여 그 결과값을 반환하고, 그 결과값에 따라 로그인의 성공 여부를 나타내도록 하는 구조를 만들면 된다.
※ CommConnect 함수의 반환값은 개발 가이드 자료 내에서 로그인에 성공할 경우 0이라는 값을 반환하고, 로그인에 실패할 경우에는 0이 아닌 음수의 값을 반환한다고 설명하고 있다. 그렇기 때문에 우리도 해당 값이 0일 경우에는 로그인에 성공한 것으로, 0이 아닐 경우에는 로그인에 실패한 것으로 표시하도록 함으로써 로그인 여부를 확인할 수 있다. 

 

 


728x90
반응형
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.