대신증권 크레온에서 투자자별 매매동향 수집하기
2021-11-24 • quant • 퀀티랩, 대신증권, 크레온, 투자자, 매매동향, 수급 • 5 min read
이번 포스트에서는 크레온 플러스 API를 이용하여 개인, 기관, 외국인의 매매동향 데이터를 수집하는 방법을 다루겠습니다.
퀀티랩 SysTrader 패키지를 다운받아 설치하시면 다음과 같이 쉽게 기능을 사용할 수 있습니다.
from quantylab.systrader.creon import Creon
c = Creon()
data = c.get_investorbuysell('005930', n=60)
지금부터는 SysTrader 설치 없이 위 기능을 직접 구현해 보실 수 있도록 풀어서 설명하겠습니다.
퀀티랩 YouTube 채널의 이 영상을 보셔도 됩니다.
투자자별 매매동향 데이터는 크레온의 매매입체분석 CpSysDib.CpSvr7254 모듈을 사용해서 가져올 수 있습니다.
크레온 플러스 API 사용을 위해서는 win32com 패키지가 필요한데 pip install pywinauto로 설치할 수 있습니다.
먼저 win32com.client를 임포트하여 CpSysDib.CpSvr7254 모듈을 Dispatch 합니다.
import win32com.client
obj = win32com.client.Dispatch('CpSysDib.CpSvr7254')
이제 파라미터를 입력해야 합니다. 문서를 보면 다양한 파라미터들이 있는데 여기서는 하나의 예시를 들겠습니다. 이 문서에서 확인하시어 아래 예제처럼 원하시는 값으로 입력해 주시면 됩니다.
obj.SetInputValue(0, 'A005930') # 종목코드
obj.SetInputValue(1, 6) # 기간선택구분 - 6:일별
obj.SetInputValue(4, ord('0')) # 매매비중구분 - '0':순매수
obj.SetInputValue(5, 0) # 투자자 - 0:전체
obj.SetInputValue(6, ord('1')) # 데이터 구분 - '1':순매수량
이렇게 삼성전자에 대해 투자자들의 일별 매매동향을 가져오도록 파라미터를 채웠습니다. 이제 요청을 다음과 같이 보내면 됩니다.
obj.BlockRequest()
이제 요청 결과를 가져올 수 있는데, 먼저 결과 데이터 개수를 확인해 보겠습니다. 이건 GetHeaderValue(type) 메소드로 가져올 수 있는데 type은 모듈마다 달라서 문서를 확인해야 합니다. 이 모듈에서 결과의 데이터 개수에 대한 type 값은 1 입니다.
cnt = obj.GetHeaderValue(1)
아마 cnt는 17개로 나올 것입니다. 이건 이 모듈이 한번 조회할 때 최대 17개까지만 반환해주기 때문입니다. 더 많은 과거 데이터를 원할 경우 연속조회 하면 됩니다. 이건 뒤에서 확인하겠습니다.
먼저 현재 요청 결과를 dict로 구성해 보겠습니다. 결과는 GetDataValue(type, index) 메소드로 가져옵니다. type은 문서를 확인하면 되고 index는 17개 아이템에 대한 인덱스 입니다.
이렇게 결과를 dict 형태로 만들 수 있습니다.
keys = [
'일자',
'개인',
'외국인',
'기관계',
'금융투자',
'보험',
'투신',
'은행',
'기타금융',
'연기금 등',
'기타법인',
'기타외인',
'사모펀드',
'국가지자체',
'종가',
'대비',
'대비율',
'거래량',
'확정치여부',
]
data = []
for i in range(cnt):
item = {k: obj.GetDataValue(j, i) for j, k in enumerate(keys)}
data.append(item)
이제 연속조회로 더 많은 데이터를 가져와 보겠습니다.
if obj.Continue:
obj.BlockRequest()
그리고 위와 똑같이 dict 형태로 만들어서 data에 추가하면 됩니다.
cnt = obj.GetHeaderValue(1)
for i in range(cnt):
item = {k: obj.GetDataValue(j, i) for j, k in enumerate(keys)}
data.append(item)
이 데이터를 pandas DataFrame으로 변환하여 출력해보면 다음처럼 테이블로 결과를 볼 수 있습니다.
import pandas as pd
df = pd.DataFrame(data)
| index | 일자 | 개인 | 외국인 | 기관계 | 금융투자 | 보험 | 투신 | 은행 | 기타금융 | 연기금 등 | 기타법인 | 기타외인 | 사모펀드 | 국가지자체 | 종가 | 대비 | 대비율 | 거래량 | 확정치여부 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | 20211122 | -8689002 | 5766721 | 3033799 | 1879919 | 20352 | 738060 | -36395 | 27387 | 85824 | -82117 | -29401 | 318652 | 0 | 74900 | 3700 | 5.20 | 27239836 | 49 |
| 1 | 20211119 | -742078 | 313970 | 432827 | 283202 | 12079 | -23332 | -3478 | -24859 | 179418 | -8721 | 4002 | 9797 | 0 | 71200 | 1000 | 1.42 | 11954728 | 49 |
| 2 | 20211118 | 1314434 | -738137 | -576566 | -103191 | -3195 | -10927 | 0 | 1 | -456299 | -5413 | 5682 | -2955 | 0 | 70200 | -500 | -0.71 | 10144957 | 49 |
| 3 | 20211117 | 1234537 | 1519353 | -2816912 | -2557894 | 27969 | 122759 | 105367 | -114917 | -491388 | 57393 | 5629 | 91192 | 0 | 70700 | -600 | -0.84 | 11027606 | 49 |
| 4 | 20211116 | -753052 | 1025989 | -202007 | 148871 | -48992 | 122148 | 46961 | -116 | -551871 | -73698 | 2768 | 80992 | 0 | 71300 | -100 | -0.14 | 10919239 | 49 |
| 5 | 20211115 | -3174454 | 976207 | 2301384 | 1708103 | 27375 | 63674 | -6560 | 2705 | 369771 | -86615 | -16522 | 136316 | 0 | 71400 | 800 | 1.13 | 12420710 | 49 |
| 6 | 20211112 | -2411322 | 384228 | 2046949 | 2015464 | -10560 | 196819 | -761 | 405 | -152781 | -16190 | -3665 | -1637 | 0 | 70600 | 700 | 1.00 | 10087450 | 49 |
| 7 | 20211111 | 2266214 | -2179760 | -116698 | 655621 | 67711 | -133062 | 2502 | -234 | -389250 | 27906 | 2338 | -319986 | 0 | 69900 | -300 | -0.43 | 11489122 | 49 |
| 8 | 20211110 | -722793 | 1435001 | -724133 | -268435 | -14154 | 32610 | 0 | -5246 | -475829 | 9024 | 2901 | 6921 | 0 | 70200 | -300 | -0.43 | 9422009 | 49 |
| 9 | 20211109 | -454505 | -725539 | 1193368 | 1695062 | -18889 | -35616 | 0 | 1624 | -478674 | -10796 | -2528 | 29861 | 0 | 70500 | -100 | -0.14 | 11159589 | 49 |
| 10 | 20211108 | 714776 | -628399 | -89168 | 233239 | 23127 | 38912 | 7130 | 103 | -384412 | 855 | 1936 | -7267 | 0 | 70600 | 400 | 0.57 | 11121981 | 49 |
| 11 | 20211105 | 2087811 | -1174569 | -905068 | -452144 | 158763 | 28084 | 2288 | -682 | -633973 | -11957 | 3783 | -7404 | 0 | 70200 | -400 | -0.57 | 12667743 | 49 |
| 12 | 20211104 | -1743969 | -80764 | 1947030 | 1874492 | 201770 | -16178 | 3000 | -196 | -190245 | -119787 | -2510 | 74387 | 0 | 70600 | 200 | 0.28 | 11818987 | 49 |
| 13 | 20211103 | 3748000 | -1032459 | -2789497 | -2145003 | -97809 | -8839 | 3000 | 4247 | -300074 | 72239 | 1717 | -245019 | 0 | 70400 | -1100 | -1.54 | 12770428 | 49 |
| 14 | 20211102 | -5644694 | 2043624 | 3621076 | 3253414 | -151433 | 150916 | 223 | 348 | 113959 | -2851 | -17155 | 253649 | 0 | 71500 | 1600 | 2.29 | 16812570 | 49 |
| 15 | 20211101 | -1367521 | -1651736 | 3003169 | 2827678 | 65072 | 38774 | 2 | -7314 | -75387 | 13386 | 2702 | 154344 | 0 | 69900 | 100 | 0.14 | 11503729 | 49 |
| 16 | 20211029 | 4050479 | -1812320 | -2365662 | -1496831 | 66131 | 124596 | 18242 | 5201 | -1103470 | 111608 | 15895 | 20469 | 0 | 69800 | -900 | -1.27 | 17016151 | 49 |
| 17 | 20211028 | 899791 | -2432885 | 1281744 | 98960 | 17371 | 446463 | -5311 | 2738 | 200349 | 253867 | -2517 | 521174 | 0 | 70700 | 600 | 0.86 | 20644902 | 49 |
| 18 | 20211027 | 3080455 | -2124585 | -1005822 | -622428 | -28520 | -4796 | 3894 | -436 | -354458 | 34143 | 15809 | 922 | 0 | 70100 | -1000 | -1.41 | 10295316 | 49 |
| 19 | 20211026 | -1247398 | -551563 | 1812123 | 1501865 | -3643 | 78012 | 7236 | 757 | 96060 | -16422 | 3260 | 131836 | 0 | 71100 | 900 | 1.28 | 10528252 | 49 |
| 20 | 20211025 | 582794 | -1599446 | 988462 | 1110489 | 17838 | 8699 | -1410 | 547 | -182522 | 30985 | -2795 | 34821 | 0 | 70200 | -200 | -0.28 | 10029621 | 49 |
| 21 | 20211022 | -644269 | -128538 | 762404 | 1215268 | 2445 | -40105 | -682 | -167 | -452150 | 12542 | -2139 | 37795 | 0 | 70400 | 200 | 0.28 | 8395448 | 49 |
| 22 | 20211021 | 203876 | 109754 | -197734 | 242202 | -125548 | -30478 | 0 | -13079 | -275758 | -116542 | 646 | 4927 | 0 | 70200 | -100 | -0.14 | 10891094 | 49 |
| 23 | 20211020 | 556532 | 256311 | -829527 | -125516 | -131592 | -86437 | 200 | -558 | -486593 | 8664 | 8020 | 969 | 0 | 70300 | -300 | -0.42 | 10151638 | 49 |
| 24 | 20211019 | -504814 | -431790 | 910091 | 1429098 | 16262 | -61830 | 1361 | 167 | -432527 | 33963 | -7450 | -42440 | 0 | 70600 | 400 | 0.57 | 9507991 | 49 |
| 25 | 20211018 | 771890 | 1303614 | -2117009 | -1564134 | -42320 | -17082 | -329 | 833 | -477196 | 30584 | 10921 | -16781 | 0 | 70200 | 100 | 0.14 | 13486391 | 49 |
| 26 | 20211015 | 822742 | -1376104 | 456288 | 626433 | -60458 | 99645 | 21339 | 242 | -312400 | 84238 | 12836 | 81487 | 0 | 70100 | 700 | 1.01 | 18051612 | 49 |
| 27 | 20211014 | 2011163 | -3787173 | 1696662 | 1993635 | -93476 | 76957 | -20 | 10524 | -236463 | 62704 | 16644 | -54495 | 0 | 69400 | 600 | 0.87 | 19520641 | 49 |
| 28 | 20211013 | 2224620 | -5271845 | 2725596 | 2539887 | -100166 | 33871 | 16584 | -7544 | 20055 | 311767 | 9862 | 222909 | 0 | 68800 | -200 | -0.29 | 24172015 | 49 |
| 29 | 20211012 | 12155071 | -11004329 | -1421202 | -907809 | -230050 | -178155 | 15394 | -60991 | 12399 | 248713 | 21747 | -71990 | 0 | 69000 | -2500 | -3.50 | 31001484 | 49 |
| 30 | 20211008 | 2612855 | 319900 | -2923031 | -1565044 | -88549 | 42805 | 3341 | -8642 | -1269657 | -10175 | 451 | -37285 | 0 | 71500 | -100 | -0.14 | 14043287 | 49 |
| 31 | 20211007 | 1266151 | -2661506 | 1391358 | 1821608 | -90182 | 69692 | -1689 | 5770 | -407085 | -2507 | 6504 | -6756 | 0 | 71600 | 300 | 0.42 | 13683532 | 49 |
| 32 | 20211006 | 1374960 | -1070439 | -342467 | 244117 | -24935 | 102550 | 1669 | 924 | -599759 | 41544 | -3598 | -67033 | 0 | 71300 | -900 | -1.25 | 18956962 | 49 |
| 33 | 20211005 | 1783237 | -3025584 | 1255911 | 1173732 | -5740 | 62289 | -47544 | -9339 | 104473 | -18889 | 5325 | -21960 | 0 | 72200 | -1000 | -1.37 | 24013921 | 49 |