이제 여기서 sGubun 이라는 값에 따라 서로 다른 데이터를 불러오도록 하면 되는데, 개발가이드에서는 다음과 같은 3개 유형에 대해 언급하고 있다.
0 : 주문체결 통보
1 : 국내주식 잔고통보
4 : 파생상품 잔고통보
여기서 우리는 0과 1, 두 개에 대해서만 데이터를 불러오도록 하면 된다.(물론 선옵 트레이더라면 4번도 사용하면 된다.) 여기서 주의해야 할 점은 sGubun은 데이터 형식이 문자열(string)이기 때문에 if문을 사용할 때 == 0이 아닌 == '0'과 같은 형식으로 작성해야 데이터를 제대로 처리할 수 있다.
앞서 제작한 OnReceiveChejanData 함수 내에서 맨 마지막 인자로 sFidList라는 값을 받아오는데, 사실 이 부분은 사용하지 않는다. for 문을 통해 데이터를 얻어오는 방법도 있기야 하겠지만, 여느 실시간 데이터 처리 방법과 통일하기 위해 그냥 피드 번호를 하나하나 입력해주도록 하자.
일단 기본적으로 sGubun이 0인 경우에는 주문 접수나 주문 체결 등의 데이터를 수신하게 되고, sGubun이 1인 경우에는 잔고 내 데이터에 있어 변동이 있는 경우에 데이터를 수신하게 된다.(잔고 내에 종목이 추가되거나 삭제되는 등의 변동만 포함할 뿐, 가격적 변동까지는 포함하지 않는다. 다시 말해, 실시간 잔고 데이터를 얻어오지는 못한다.)
여기서 8.19 주문체결과 8.20 잔고 데이터에는 9201, 912, 302, 27, 28이라는 다섯 개의 FId 번호에 대해서만 공통점을 갖고, 그 외의 데이터에 대해서는 서로 다른 FId 데이터가 반환된다.
GetChejandata() 함수로 데이터 불러오기
이제 위의 FId 번호를 참고하여, 본인이 사용하고자 하는 데이터들을 불러와서 사용하면 된다. 아래의 예시는 fid:9201, 계좌번호 데이터만 받아오도록 하는 코드에 해당한다.
def OnRecieveChejanData(self, sGubun, nItemCnt, sFidList):
if sGubun == "0": ## 체결, 접수 등의 데이터
acc_num self.kiwoom.dynamicCall("GetChejanData()", "9201") # 계좌번호
elif sGubun == "1": ## 잔고 데이터
acc_num self.kiwoom.dynamicCall("GetChejanData()", "9201") # 계좌번호