크레온 플러스(CREON PLUS) 를 이용해서 종목별 기관/외국인/개인 매수 수량/금액을 조회하는 간단한 샘플입니다
import sys # from PyQt5.QtWidgets import * import win32com.client import ctypes import time ############################################### # PLUS 공통 OBJECT g_objCodeMgr = win32com.client.Dispatch('CpUtil.CpCodeMgr') g_objCpStatus = win32com.client.Dispatch('CpUtil.CpCybos') g_objCpTrade = win32com.client.Dispatch('CpTrade.CpTdUtil') g_objFutureMgr = win32com.client.Dispatch('CpUtil.CpFutureCode') ################################################ # PLUS 실행 기본 체크 함수 # type - 0 : 주문 아님 1: 주문 포함 def InitPlusCheck(type): # 프로세스가 관리자 권한으로 실행 여부 if ctypes.windll.shell32.IsUserAnAdmin(): print('정상: 관리자권한으로 실행된 프로세스입니다.') else: print('오류: 일반권한으로 실행됨. 관리자 권한으로 실행해 주세요') return False # 연결 여부 체크 if (g_objCpStatus.IsConnect == 0): print("PLUS가 정상적으로 연결되지 않음. ") return False #주문 관련 초기화 if type == 1 : if (g_objCpTrade.TradeInit(0) != 0): print("주문 초기화 실패") return False return True # 통신 제한 회피를 위한 대기 함수 # type 0 - 주문 관련 제한 1 - 시세 관련 제한 def waitRqLimit(type): remainCount = g_objCpStatus.GetLimitRemainCount(type) if remainCount > 0: return True remainTime = g_objCpStatus.LimitRequestRemainTime print('조회 제한 회피 time wait %.2f초 ' % (remainTime / 1000.0)) time.sleep(remainTime / 1000) return True class CpRp7254: def __init__(self): self.objRq = win32com.client.Dispatch('CpSysDib.CpSvr7254') self.objRq.SetInputValue(1, 6) # 일자별 self.objRq.SetInputValue(4, ord('0')) # '0' 순매수 '1' 매매비중 self.objRq.SetInputValue(5, 0) # '전체 # in_NumOrMoney '1' 순매수량 '2' 추정금액(백만) def Request(self, code, rqCnt, in_NumOrMoney): self.objRq.SetInputValue(0, code) self.objRq.SetInputValue(6, in_NumOrMoney) # '1' 순매수량 '2' 추정금액(백만) ret7254 = [] while True: # 조회 제한 체크 - 시세 연속 조회 제한회피를 위한 sleep waitRqLimit(1) self.objRq.BlockRequest() # 현재가 통신 및 통신 에러 처리 rqStatus = self.objRq.GetDibStatus() if rqStatus != 0: return (False, ret7254) cnt = self.objRq.GetHeaderValue(1) for i in range(cnt): item = {} fixed = self.objRq.GetDataValue(18, i) # 잠정치는 일단 버린다 if (fixed == ord('0')): continue item['거래량'] = self.objRq.GetDataValue(17, i) item['일자'] = self.objRq.GetDataValue(0, i) item['종가'] = self.objRq.GetDataValue(14, i) item['개인'] = self.objRq.GetDataValue(1, i) item['외국인'] = self.objRq.GetDataValue(2, i) item['기관'] = self.objRq.GetDataValue(3, i) item['대비율'] = self.objRq.GetDataValue(16, i) ret7254.append(item) if (len(ret7254) >= rqCnt): break #end of for # 연속 조회 가능 체크 if self.objRq.Continue == False: break # 데이터 개수 확인 if (len(ret7254) >= rqCnt): break #end of while return (True, ret7254) if __name__ == "__main__": if False == InitPlusCheck(0): exit(0) obj7254 = CpRp7254() ret, ret7254 = obj7254.Request('A005930', 100, ord('1')) if ret == False: print('7254 요청 실패') exit(0) for item in ret7254: print(item)
조회 결과
CpSysDib.CpSvr7254 : 크레온 플러스 조회 서비스 (링크 클릭 시 도움말 연결)
InitPlusCheck() : 크레온 플러스를 실행하기 위한 기본 조건 체크 (관리자 권한 여부, plus 실행 여부 등 체크)
waitRqLimit() : 시세 연속 조회 제한 회피를 위한 타이머 체크 코드
class CpRp7254 : 투자주체별 매매 현황 조회하는 클래스로 실제 통신 코드는 Request() 함수 참고
'개발 > 파이썬' 카테고리의 다른 글
파이썬 리턴값 편리 기능 (0) | 2018.11.18 |
---|---|
[파이썬] 파일 다루기(유니코드, 파일 읽기 등) (0) | 2018.10.21 |
[파이썬] 문자열 다루기 (0) | 2018.10.17 |
[CREON PLUS API 활용] 종목검색 실시간 신호 수신 받기 (0) | 2018.06.06 |
[CREON PLUS API 활용] 전 종목 시가총액 구하기 (0) | 2018.06.06 |
[CREON PLUS API 활용] 차트 지표 계산 하기 (0) | 2018.06.06 |
댓글