안녕하세요 성민석입니다.
진행하는 튜토리얼의 모든 코드는 대신증권 사이보스플러스 자료실에서 제공하는 걸 기반으로 만들었습니다.
그리고 여기에 사용된 모든 코드는 저의 GitHub에서 확인하실 수 있습니다.
지난 시간에는 주식의 현재가 조회에 대해서 알아보았습니다.
이번 시간에는 본인 계좌의 잔고에서 예수금이 얼마큼 남아있는지 확인해보겠습니다. 시작에 앞서, 여기에 사용되는 모든 내용은 모의투자를 기반으로 하고 있으므로 실제 투자할 때 주의하시길 바랍니다. 일단 HTS에서 실시간계좌관리를 보면 예수금을 확인할 수 있는데요. 저는 이번 시간에 저기에 있는 정보를 어떻게 가져올 수 있을지 찾아봤습니다.
대신증권 API를 확인해보시면 [계좌별 잔고 평가현황] CpTrade.CpTd6033이란 항목이 있습니다. 저는 여기서 간단하게 예수금에 대한 정보를 가져올 수 있을 것이라고 생각했습니다. 저기서 총 평가금액이란 항목에서 확인하실 수 있습니다.
저의 착각이었습니다.
HTS에서 확인할 수 있는 정보와 API를 통해서 가져온 정보가 동일하지 않았습니다.
어찌된 일일까...분명히 5억이란 돈이 있는데 가져오질 못하니...
분명히 HTS에서 확인할 수 있는 계좌번호와 API에서 가져온 계좌번호도 동일한데, 예수금은 자꾸 0원이라고 나옵니다.
제가 만들어둔 슬랙(SlackBot)인 '덕구'도 총 평가금액이 0원이라고 말하고 있었죠.
대신증권 API의 예제들을 가만히 보면
BlockRequest()라는 함수가 있습니다. BlockRequest() 함수를 호출하지 않고 데이터를 요청하게 되면 서버로부터 데이터를 가져올 수 없던 것이었습니다.
# 실제적인 6033 통신 처리
def rq6033(self, retcode):
self.objRq.BlockRequest()
# 통신 및 통신 에러 처리
rqStatus = self.objRq.GetDibStatus()
rqRet = self.objRq.GetDibMsg1()
print("통신상태", rqStatus, rqRet)
if rqStatus != 0:
return False
cnt = self.objRq.GetHeaderValue(7)
print(cnt)
print("종목코드 종목명 신용구분 체결잔고수량 체결장부단가 평가금액 평가손익")
for i in range(cnt):
code = self.objRq.GetDataValue(12, i) # 종목코드
name = self.objRq.GetDataValue(0, i) # 종목명
retcode.append(code)
if len(retcode) >= 200: # 최대 200 종목만,
break
cashFlag = self.objRq.GetDataValue(1, i) # 신용구분
date = self.objRq.GetDataValue(2, i) # 대출일
amount = self.objRq.GetDataValue(7, i) # 체결잔고수량
buyPrice = self.objRq.GetDataValue(17, i) # 체결장부단가
evalValue = self.objRq.GetDataValue(9, i) # 평가금액(천원미만은 절사 됨)
evalPerc = self.objRq.GetDataValue(11, i) # 평가손익
print(code, name, cashFlag, amount, buyPrice, evalValue, evalPerc)
위의 예제를 응용하여 덕분에 성공적으로 데이터를 가져올 수 있었습니다.
덕구도 정확히 5억이 있다고 말해주고 있군요.
아마 다음 시간에는 BlockRequest() 함수에 대해서 조금 더 알아볼 것 같습니다.
참고자료
'금융(Finance) > 시스템 트레이딩(System Trading)' 카테고리의 다른 글
[개발] 지금까지 만든 매매 프로그램 (0) | 2020.12.01 |
---|---|
[예제] 대신증권API를 이용한 트레이딩 시스템 - 데이터 요청 방법 2가지 BlockRequest 와 Request 방식 비교하기 (0) | 2020.09.22 |
[고민] 대신증권API과 키움증권 API 사이에서 (0) | 2020.09.21 |
[개발] 대신증권API를 이용한 트레이딩 시스템 - 주식 현재가 조회 (0) | 2020.09.18 |
[개발] 대신증권API를 이용한 트레이딩 시스템 - 종목정보 구하는 예제 (0) | 2020.09.18 |