PYTHON/Kiwoom Open API

키움증권 Open API - 거래 내역 조회하기 (2)

이제 지난 게시글에 이어서 요청한 데이터를 받아오는 부분을 구축해보도록 하자.

 

 

OnReceiveTrData 내에서 함수랑 연결해주기

self._commrqdata("rq_opw00007", "opw00007", 0, '0351')

지난 게시글에서 데이터를 전송하는   commrqdata(rqname, trcode, prenext, scrno)  함수 내에서   rqname  안에 "rq_opw00007"을 입력했었으니, 이제는 OnReceiveTrData 내에서 if rqname == "rq_opw00007"을 통해 특정 함수와 연결해주는 코드를 제작해야 한다.

def receive_trdata(self, scrno, rqname, trcode, recordname, prenext, unused1, unused2, unused3, unused4):
	elif rqname == "rq_opw00007":
		self.opw00007(trcode, recordname)

 

이제 여기까지 제작했다면, 데이터를 조회하는 데에 필요한 데이터를 입력한 후 키움증권 서버에 전달하고, 전달 후 데이터를 받아오기 위한 준비 절차까지 모두 완료했다. 그렇다면 이제 데이터를 받아와보자.

 

 

def self.opw00007(trcode, recordname) 함수 제작하기

앞전 게시글에서 사진 한 장을 통해 OPW00007을 통해 얻어올 수 있는 여러 가지 데이터들이 있음을 보여주었는데, 이제는 그 안에서 본인이 원하는 데이터만 뽑아오면 된다. 여기서 데이터를 뽑아오는 데에 사용하는 것은   getcommdata()  함수이다.

다만, 우리가 하루에 한 종목을 대상으로 "매수"만 했다거나 "매도"만 했다거나 처럼 하루에 딱 한 건의 거래만 진행했다면 아무런 상관이 없겠지만, 통상적으로는 그렇지 않기 때문에 수많은 데이터들이 존재할 것이다. 이 때 몇 개의 데이터가 있는지를 확인하는 절차가 필요한데, 이 때 사용하는 것은   getrepeatcnt()  함수이다. 이 함수에도   trcode  와   recordname  이라는 데이터를 인자로 전달해주어야 그 데이터를 받아올 수 있다(2번째 줄).

def opw00007(self, trcode, recordname):
	repeat = self._getrepeatcnt(trcode, recordname)

 

그 후에는   repeat  이라는 값에 "존재하는 거래 데이터의 개수"가 입력되어 있으니, 이   repeat  을 대상으로 반복문(for 문, 4번째 줄)을 통해 하나 하나의 데이터에 접근하도록 함으로써 각 거래별 데이터를 얻어올 수 있다. 여기서 받아오고자 하는 데이터의 목록은 아래와 같다. 물론 모든 데이터를 받아오기 보다는 본인에게 필요한 데이터만 찾아오면 된다. 본인의 경우에는 거래 내역을 조회할 것이기 때문에 "주문수량과 주문단가"가 아닌 "체결수량과 체결단가" 데이터를 받아오도록 입력했으며, "주문구분"은 매수인지 매도인지를 반환해준다. 

  • 주문번호, 종목번호, 매매구분, 신용구분
  • 주문수량, 주문단가, 확인수량, 접수구분, 반대여부, 주문시간, 원주문
  • 종목명, 주문구분, 대출일
  • 체결수량, 체결단가
  • 통신구분, 정정취소, 확인시간
def opw00007(self, trcode, recordname):
	repeat = self._getrepeatcnt(trcode, recordname)

	for i in range(repeat):
		item_code = self._getcommdata(trcode, recordname, i, "종목번호").strip()
		real_item_code = item_code[1:]  ## item_code는 A005930의 형식, real은 005930의 형식
		trade_num = int(self._getcommdata(trcode, recordname, i, "체결수량").strip())
		trade_price = int(self._getcommdata(trcode, recordname, i, "체결단가").strip())
		order_gubun = self._getcommdata(trcode, recordname, i, "주문구분").strip()

 

이제 여기서, "주문구분"의 값이 "매수"인가 "매도"인가에 따라 해당 거래의 성격을 구분할 수 있게 되고, 그를 바탕으로 거래 내역 데이터를 입력할 수 있다!

 

 


728x90
반응형
Contents

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

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