PYTHON/Kiwoom Open API

키움증권 Open API - 체결 데이터 및 잔고 관리하기 (1)

  • -

키움증권에서 제공하는 개발 가이드 내 실시간 데이터 FID 리스트를 살펴보면 여러 가지 FID들이 제공되고 있지만, 8.19 주문 체결과 8.20 잔고는   OnReceiveRealData  이벤트가 아닌   OnReceiveChejanData  내에서 처리해야한다.

 

 

OnRecieveChejanData 이벤트 처리하기

이 부분은 여타 이벤트 처리 방법과 크게 다르지 않다. 키움증권 내에서 발생하는 이벤트는 아래의 7가지로, 그 외에 발생하는 이벤트는 존재하지 않는다. 따라서 아래 7개의 이벤트만 실행할 함수와 연결해주면 된다.

self.kiwoom.OnReceiveTrData.connect(self.receive_trdata)  
self.kiwoom.OnReceiveRealData.connect(self.receive_realdata) 
self.kiwoom.OnReceiveTrCondition.connect(self.OnReceiveTrCondition)
self.kiwoom.OnReceiveConditionVer.connect(self.OnReceiveConditionVer)  
self.kiwoom.OnReceiveMsg.connect(self.OnReceiveMsg) 
self.kiwoom.OnReceiveRealCondition.connect(self.OnReceiveRealCondition) 
self.kiwoom.OnReceiveChejanData.connect(self.receive_chejandata)

 

 

OnReceiveChejanData 함수 제작하기

OnReceiveChejanData 함수는 sGubun, nItemCnt, sFidList라는 3개의 데이터를 인자로 전달 받아 그 안에서 데이터를 처리하게 된다.

def OnRecieveChejanData(self, sGubun, nItemCnt, sFidList):
    pass

 

이제 여기서   sGubun  이라는 값에 따라 서로 다른 데이터를 불러오도록 하면 되는데, 개발가이드에서는 다음과 같은 3개 유형에 대해 언급하고 있다.

  • 0 : 주문체결 통보
  • 1 : 국내주식 잔고통보
  • 4 : 파생상품 잔고통보

여기서 우리는 0과 1, 두 개에 대해서만 데이터를 불러오도록 하면 된다.(물론 선옵 트레이더라면 4번도 사용하면 된다.) 여기서 주의해야 할 점은 sGubun은 데이터 형식이 문자열(string)이기 때문에 if문을 사용할 때 == 0이 아닌 == '0'과 같은 형식으로 작성해야 데이터를 제대로 처리할 수 있다.

def OnRecieveChejanData(self, sGubun, nItemCnt, sFidList):
    if sGubun == "0":
        pass
    elif sGubun == "1":
        pass

 

 


728x90

 

 

데이터 유형별 Fid 리스트 확인하기

앞서 제작한 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")	# 계좌번호

 

 

 


728x90
반응형
Contents

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

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