대신증권 크레온에서 투자자별 매매동향 수집하기
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 |