[화면번호] 화면번호는 서버에 조회나 주문등 필요한 기능을 요청할때 이를 구별하기 위한 키값으로 이해하시면 됩니다. 0000(혹은 0)을 제외한 임의의 숫자를 사용하시면 되는데 갯수가 200개로 한정되어 있기 때문에 이 갯수를 넘지 않도록 관리하셔야 합니다. 만약 사용하는 화면번호가 200개를 넘는 경우 조회결과나 주문결과에 다른 데이터가 섞이거나 원하지 않는 결과를 나타날 수 있습니다.
화면번호(스크린번호)는 "05_키움 OPEN API에 TR 요청하기(feat. 예수금과 계좌잔고 받아오기)"에서 살펴본 내용이다.
[이벤트] 시세조회나 조건검색요청등 관련함수 호출로 요청하면 서버에서 이를 처리해서 결과를 OpenAPI의 특정함수를 호출해서 알려주는데 이 함수를 이벤트라고 합니다.
조회를 예로 들면 SetInputValue(), CommRqData()함수로 조회를 하면 조회결과를 만들어서 OpenAPI로 전달하고 조회한 사용자의 OnReceiveTRData를 호출하게 됩니다.
이벤트는 일반함수와 구별하기 위해 이름앞에 On~에 있으며 OnEventConnect, OnReceiveTRData, OnReceiveRealData등이 있습니다. 로그인, 조회, 주문, 조건검색등 기능별로 함수와 이벤트가 분류되어 있으니 용도에 맞는 함수와 이벤트를 사용해야 합니다.
SetInputValue(), CommRqData(), OnReceiveTRData, OnEventConnect, OnReceiveTRData, OnReceiveRealData 등 코딩하면서 봤던 함수와 이벤트 이름들이 다 여기에 기인한 것들이다.
사용 목적과 이유를 모르고 코딩할 때는 궁금한 게 많았는데, 작동 원리를 확인하니 마음이 편해진다.
이런 내용들이 "KOA-개발가이드-키움OPenAPI"에 다 있었는데, 안본게 후회된다. 이제라도 봐서 다행이다. 그때 봤다면,,,, 지금처럼 무슨 말인지 이해를 했을까??
"def event_slots"에 예수금을 받기 위한 이벤트를 만들어 준다(self.OnReceiveTrData.connect(self.trdata_slot)). "OnReceiveTrData"는 위 KOA에서 살펴봤다.
"def detail_account_info(self):"는 예수금 TR 요청을 위한 공간이다.
SetInputValue로 넘길 값을 형태를 지정해주고 dynamicCall로 데이터를 전송한다. 넘겨야 하는 데이터는 위 KOA에서 예수금 조회할 때 넘긴 것과 동일하다.
넘길 데이터를 다 입력했으면, 조회할 데이터는 이벤트 내부에서 OPEN API 조회 함수인 "CommRqData()"를 호출해서 서버로 전송한다. 이때 함께 전송할 자료는 요청이름(각자 네이밍 가능), TR번호, preNext, 화면번호(스크린넘버-하단에 별도 설명)이다.
조회 후 결과가 도착하기 전에 다음 코드가 실행되지 않도록 PyQt의 Event Loop를 열어준다.
"def detail_account_mystock(self, sPrevNext="0"):"는 예수금 조회와 같은 내용이다. 다만, 계좌평가잔고내역을 요청하는 코드이다.
"def trdata_slot(self, sScrNo, sRQName, sTrCode, sRecordName, sPrevNext):"로 TR 데이터 슬롯을 열어준다. 예수금과 계좌평가잔고 코드를 입력한다. 각 요청한 TR을 받은 뒤 열어둔 Event Loop를 닫아준다.
코드 실행 결과
아.... 길다....
위에서 넘어간 화면번호(스크린넘버)는 키움 OPEN API가 TR 요청에 의해 데이터를 넘겨주면서 그룹을 지어서 넘겨준다. 그 그룹의 이름을 "화면번호(스크린넘버)"라고 부른다. [1]
화면번호(스크린넘버)는 0과 0000을 제외한 4자리 숫자로 구성하여 200개까지 만들 수 있다.
그리고 각 화면번호(스크린넘버)에는 100개의 TR 요청 결과를 담을 수 있다.
TR 요청을 중구난방으로 하게 되면, 관리가 안되니 일종의 grouping 기능을 넣어준 것이라 해석된다.
예를 들어, 코스피200의 일봉을 요청하는데
화면번호 1000번 : 전자통신 30 종목
화면번호 2000번 :화학 40 종목
화면번호 3000번 :바이오 60 종목
화면번호 4000번 :제조 70개 종목
등으로 그룹을 지어 결과를 저장할 수 있는 방식이다.
화면번호(스크린넘버)는 삭제할 수 있고, 삭제되면 거기에 포함된 TR 요청은 모두 삭제되는 등 관리적 기능도 포함되어 있다.