PYTHON/Kiwoom Open API

키움증권 Open API 작동 과정

  • -

키움증권의 경우 Open API를 제공하고 있으며, 실제로 사용할 함수의 종류는 키움증권 사이트 내 '개발 가이드' 파일 또는 'KOA Studio'라는 프로그램을 통해 확인할 수 있다. 이번 글에서는 이 함수들을 파이썬 내에서 구축하는 방법과 정확히 어떤 절차를 거쳐 함수들이 실행되는지에 대해 살펴보고자 한다.

 

어떤 정보가 궁금하신데요? - Set Input Value 함수와 Comm Rq Data 함수

1. Set Input Value   (입력 값 설정)
[설명] Tran 입력 값을 서버 통신 전에 입력한다.
[용례] SetInputValue (아이템명, 입력 값)

2. Comm Rq Data   (Command Request Data, 데이터 요청 명령 실행)
[설명] Tran을 서버로 전송한다.
[용례] CommRqData(사용자구분명, tr코드, 연속조회여부, 화면번호)

이 내용을 보면 확인할 수 있듯이, 키움증권의 Open API는 Set Input Value라는 함수를 통해 조회하고자 하는 정보가 요구하는 정보를 입력한 후, Comm Rq Data라는 함수를 통해 그 정보를 서버로 전송하는 절차로 구성되어 있다. 그렇다면 정확하게 어떤 정보를 요구하는지 그리고 그를 Comm Rq Data 내에서 어떻게 요청할 수 있는지 등에 대해 아는 것이 중요한데, 이는 앞서 이야기했던 KOA Studio라는 프로그램 내에서 확인할 수 있다. 아래의 사진으로 이해해보자.

KOA Studio 내 화면

위의 사진을 보면 'opt10001 : 주식기본정보요청'이라는 내용 밑에 INPUT과 종목코드라는 부분이 있는데, 여기서 opt10001이 앞서 이야기했던 tr코드에 해당되는 부분이고 INPUT 내의 종목코드가 바로 SetInputValue라는 함수를 통해 값을 입력해야 하는 변수에 해당되는 부분이다. 그리고 그 아래의 OUTPUT은 SetInputValue와 CommRqData 두 개의 함수를 갖고 정보를 요청했을 때 얻어올 수 있는 정보들을 나타낸다.

따라서 위의 opt10001에 대한 정보를 요청하기 위해서는 다음과 같은 코드가 필요하다.

SetInputValue(QString, QString), "종목코드", 005930
CommRqData(QString, QString, int, QStirng), opt10001, opt10001, 0, 화면번호

물론 위의 코드만으로 실행되지는 않는다. 앞서 클래스 설정 및 로그인 설정 등과 같이 다양한 코드들을 구축해야 작동하는 것이 Open API님이시다.  이제 이 부분까지 완료했다면 키움증권 서버와 다음과 같은 대화를 나눈 상태가 된다.

사용자 : "저 정보좀 요청하려구요."
키움증권 : "네. 어떤 종목의 정보를 요청하시겠습니까?"
사용자 : "아 005930이요."
키움증권 : "네. 확인되셨습니다. 사용자님께서 필요하신 정보를 갖고 있는 trcode도 말씀해주시기 바랍니다."
사용자 : "요청할 tr코드는 opt10001입니다."

여기까지 대화를 읽었다면 이 다음에 어떤 대화가 나와야 하는지도 어렵지 않게 알 수 있다. 잘 모르겠다면 수능 영어 문제를 어떻게 풀었는지 한 번 생각해보자. 답은 단순하다!

키움증권 : "네. opt10001의 경우에는 종목명, 결산월, 액면가, 자본금, 상장주식, 상한가, 하한가, 기준가 등 수십가지의 정보를 제공하는 tr코드입니다만, 어떤 정보가 필요하실까요?"
사용자 : "다 필요없고, 거래량이나 좀 알려줘봐요."

 

거래량이나 좀 알려줘봐요. - GetCommData

1. GetCommData
[설명] 수신 데이터를 반환한다.
[용레] GetCommData(tr코드, record명, 연속조회 여부, 아이템명)

앞의 과정에서 종목코드 : 005930, trcode : opt10001이라는 값을 입력했으니 Open API는 이제 OUTPUT에 들어 있는 여러 값들을 다 불러온 상태로 대기 중이다. 그러니 이제는 사용자가 묻는 정보를 알려줄 것이다. 

위의 사진을 보면 알 수 있듯이, opt10001의 경우에는 종목코드 하나만 입력하면 여러 정보들을 다 알려주는데, 본인은 맨 밑에 있는 거래량을 조회하고자 한다. 이 경우에는 앞에서 보았던 용례와 같이, 다음과 같은 코드가 필요하다.

GetCommData(QString, QString, int, QString), opt10001, recordname, 연속조회 여부, 거래량

 

물론 이 GetCommData를 실행하기 위해선 receive_trcode라는 별도의 함수가 필요하다. 즉, CommRqData 내에서 입력했던 trcode인 opt10001을 요청하고, 키움증권 서버에서 opt10001이라는 trcode가 가진 정보들을 반환해주었을 때 trcode = opt10001인 상태로 정보가 돌아오게 되는데, opt10001인 경우에 GetCommData를 실행하도록 해야 오류 없는 정보를 받아올 수 있다. 예를 들어 요청한 trcode는 opt10001인데 GetCommData에서 opt10001이 포함하지 않고 있는 아이템명(예를 들면 opt10003이 갖고 있는 정보인 누적 거래량 및 누적 거래대금 등)을 받아오려 한다면 오류가 발생하기 때문이다.

다음 글에서는 요청한 trcode가 opt10001인 경우에 특정 함수를 실행하도록 하고, 그 함수 안에서 opt10001이 가지고 있는 정보를 불러오는 코드를 구축할 예정이다.

 

 


728x90
반응형
Contents

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

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