키움증권의 경우 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라는 프로그램 내에서 확인할 수 있다. 아래의 사진으로 이해해보자.
위의 사진을 보면 'opt10001 : 주식기본정보요청'이라는 내용 밑에 INPUT과 종목코드라는 부분이 있는데, 여기서 opt10001이 앞서 이야기했던 tr코드에 해당되는 부분이고 INPUT 내의 종목코드가 바로 SetInputValue라는 함수를 통해 값을 입력해야 하는 변수에 해당되는 부분이다. 그리고 그 아래의 OUTPUT은 SetInputValue와 CommRqData 두 개의 함수를 갖고 정보를 요청했을 때 얻어올 수 있는 정보들을 나타낸다.
따라서 위의 opt10001에 대한 정보를 요청하기 위해서는 다음과 같은 코드가 필요하다.
물론 위의 코드만으로 실행되지는 않는다. 앞서 클래스 설정 및 로그인 설정 등과 같이 다양한 코드들을 구축해야 작동하는 것이 Open API님이시다. 이제 이 부분까지 완료했다면 키움증권 서버와 다음과 같은 대화를 나눈 상태가 된다.
사용자 : "저 정보좀 요청하려구요." 키움증권 : "네. 어떤 종목의 정보를 요청하시겠습니까?" 사용자 : "아 005930이요." 키움증권 : "네. 확인되셨습니다. 사용자님께서 필요하신 정보를 갖고 있는 trcode도 말씀해주시기 바랍니다." 사용자 : "요청할 tr코드는 opt10001입니다."
여기까지 대화를 읽었다면 이 다음에 어떤 대화가 나와야 하는지도 어렵지 않게 알 수 있다. 잘 모르겠다면 수능 영어 문제를 어떻게 풀었는지 한 번 생각해보자. 답은 단순하다!
키움증권 : "네. opt10001의 경우에는 종목명, 결산월, 액면가, 자본금, 상장주식, 상한가, 하한가, 기준가 등 수십가지의 정보를 제공하는 tr코드입니다만, 어떤 정보가 필요하실까요?" 사용자 : "다 필요없고, 거래량이나 좀 알려줘봐요."
거래량이나 좀 알려줘봐요. - GetCommData
1. GetCommData [설명] 수신 데이터를 반환한다. [용레] GetCommData(tr코드, record명, 연속조회 여부, 아이템명)
앞의 과정에서 종목코드 : 005930, trcode : opt10001이라는 값을 입력했으니 Open API는 이제 OUTPUT에 들어 있는 여러 값들을 다 불러온 상태로 대기 중이다. 그러니 이제는 사용자가 묻는 정보를 알려줄 것이다.
위의 사진을 보면 알 수 있듯이, opt10001의 경우에는 종목코드 하나만 입력하면 여러 정보들을 다 알려주는데, 본인은 맨 밑에 있는 거래량을 조회하고자 한다. 이 경우에는 앞에서 보았던 용례와 같이, 다음과 같은 코드가 필요하다.
물론 이 GetCommData를 실행하기 위해선 receive_trcode라는 별도의 함수가 필요하다. 즉, CommRqData 내에서 입력했던 trcode인 opt10001을 요청하고, 키움증권 서버에서 opt10001이라는 trcode가 가진 정보들을 반환해주었을 때 trcode = opt10001인 상태로 정보가 돌아오게 되는데, opt10001인 경우에 GetCommData를 실행하도록 해야 오류 없는 정보를 받아올 수 있다. 예를 들어 요청한 trcode는 opt10001인데 GetCommData에서 opt10001이 포함하지 않고 있는 아이템명(예를 들면 opt10003이 갖고 있는 정보인 누적 거래량 및 누적 거래대금 등)을 받아오려 한다면 오류가 발생하기 때문이다.
다음 글에서는 요청한 trcode가 opt10001인 경우에 특정 함수를 실행하도록 하고, 그 함수 안에서 opt10001이 가지고 있는 정보를 불러오는 코드를 구축할 예정이다.