키움증권 Open API는 기본적으로 싱글 데이터와 멀티 데이터로 구분되는데, 이 중 멀티 데이터를 사용하고자 할 때 필요한 것이 GetRepeatCnt() 함수이다. 멀티 데이터란 기본적으로 반복적인 데이터 조회를 통해 데이터를 반환받을 수 있는 것으로, 가장 대표적인 것이 주가 차트 데이터가 있다. 하나 하나 데이터를 조회하면서 1월 1일의 데이터, 1월 2일의 데이터, 1월 3일의 데이터를 한 번씩 조회하면서 데이터를 받아오기 때문이다.
여기서 바로 조회하고자 하는 데이터의 개수를 반환하는 것이 바로 GetRepeatCnt() 함수이다. 다시 말해, GetRepeatCnt()함수의 결과값이 3이라면 3번에 걸쳐 데이터를 조회하게 되고 결과값이 10이라면 1월 1일부터 1월 10일까지의 데이터가 존재한다고 이해하면 된다.
다만 이 GetRepeatCnt() 함수 역시 다양한 위치에서 사용되기 때문에, 하나의 함수로 제작한 후에 필요할 때마다 불러오는 것이 좋다. 아래처럼 작성하면 되는데, 중요한 점은 trcode와 recordname을 하나의 인자로 전달해주어야 한다는 것이다.
trcode와 recordname은 어디서 많이 본 것 같은 느낌이 들 것이다. 바로 OnReceiveTrData 이벤트가 발생했을 때 scrno, rqname, trcode, recordname, prenext라는 다섯 개의 값을 전달받게 되고, 우리는 이 중에서 trcode와 recordname을 opt10001()과 같은 함수에 인자로 전달해줌(opt10001(trcode, recordname))으로써 함수를 실행할 수 있었다. 다시 말해, GetRepeatCnt()역시 그와 같은 방식으로 사용된다는 것이다.
그렇다면 구체적인 사용례를 살펴보도록 하자. 가장 대표적인 것이 차트 데이터 조회이다. 차트 데이터를 조회하는 Trasaction 이름은 opt10080이니, opt10080이라는 함수 하에 GetRepeatCnt() 함수를 사용해보도록 하자. 그 전에 앞서 GetRepeatCnt()의 구체적인 기능을 살펴보기 위해, GetRepeatCnt() 함수를 제외한 채로 opt10080 함수를 제작했다.
def opt10080(self, trcode, recordname):
open = self._getcommrqdata(trcode, recordname, 0, "시가")
high = self._getcommrqdata(trocde, recordname, 0, "고가")
위 코드를 실행했을 때 반환받을 수 있는 값은 단순하게도 가장 최근 거래일의 시가와 고가일 뿐이다. 왜냐하면 우리는 단 한 번만 데이터를 조회하겠다는 의미로 세 번째 자리에 '0'을 전달해주었기 떄문이다. 그렇다면 최근 거래일이 아닌 그 전 날의 시가와 고가를 얻어오기 위해서는 0의 자리에 1을 입력해주면 되는 간단한 일이다.
def opt10080(self, trcode, recordname):
open = self._getcommrqdata(trcode, recordname, 1, "시가")
high = self._getcommrqdata(trocde, recordname, 1, "고가")
그렇다면 차트 데이터를 조회하기 위해서는 아래처럼 오늘 변수, 어제 변수를 모두 입력하고 0, 1, 2, 3, 4, 5, 6, 7, 8....을 입력하는 방식으로 제작해야 할까? 도대체 오늘을 기준으로 해당 종목이 상장한 날까지 정확히 며칠치의 데이터가 존재하는지도 모르는데 마지막 숫자로 어떤 숫자를 전달해주어야 할지는 어떻게 알까? 절대 알 수 없다.
def opt10080(self, trcode, recordname):
repeat = self._getrepeatcnt(trcode, recordname)
for i in range(repeat):
open = self._getcommrqdata(trcode, recordname, i, "시가")
high = self._getcommrqdata(trocde, recordname, i, "고가")
self._getrepeatcnt()에 trcode와 recordname을 하나의 인자로 전달해준 후에 그 결과값을 repeat이라는 변수에 저장한 후, repeat을 대상으로 for문을 제작하는 것이다. for문을 제작함으로써 self._getcommrqdata의 세 번째 인자 자리에 0이나 1과 같은 숫자가 아닌 알파벳 i를 넣어주면 알아서 0부터 마지막 숫자까지 올라가면서 데이터를 반복적으로 조회한다.
그리고, 마지막 숫자가 되면 조회를 알아서 멈추게 된다.
그렇다면
다음과 같이 정리할 수 있겠다. GetRepeatCnt() 함수는 여러 개의 데이터가 존재할 때 사용함으로써 데이터 조회를 간편하게 진행할 수 있는(데이터 조회를 위해서 반드시 사용해야만 하는) 하나의 방법이고 이 GetRepeatCnt()는 바로 KOAstudio 내에서 데이터 결과값 중 [멀티 데이터]라고 표시되어 있는 Transaction Code에서 반드시 사용해야 한다는 것이다.