Skip to content

퀀티랩

2 posts with the tag “퀀티랩”

대신증권 크레온에서 투자자별 매매동향 수집하기

이번 포스트에서는 크레온 플러스 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일자개인외국인기관계금융투자보험투신은행기타금융연기금 등기타법인기타외인사모펀드국가지자체종가대비대비율거래량확정치여부
020211122-868900257667213033799187991920352738060-363952738785824-82117-2940131865207490037005.202723983649
120211119-74207831397043282728320212079-23332-3478-24859179418-87214002979707120010001.421195472849
2202111181314434-738137-576566-103191-3195-1092701-456299-54135682-2955070200-500-0.711014495749
32021111712345371519353-2816912-255789427969122759105367-114917-49138857393562991192070700-600-0.841102760649
420211116-7530521025989-202007148871-4899212214846961-116-551871-73698276880992071300-100-0.141091923949
520211115-3174454976207230138417081032737563674-65602705369771-86615-165221363160714008001.131242071049
620211112-241132238422820469492015464-10560196819-761405-152781-16190-3665-16370706007001.001008745049
7202111112266214-2179760-11669865562167711-1330622502-234-389250279062338-319986069900-300-0.431148912249
820211110-7227931435001-724133-268435-14154326100-5246-475829902429016921070200-300-0.43942200949
920211109-454505-72553911933681695062-18889-3561601624-478674-10796-252829861070500-100-0.141115958949
1020211108714776-628399-8916823323923127389127130103-3844128551936-72670706004000.571112198149
11202111052087811-1174569-905068-452144158763280842288-682-633973-119573783-7404070200-400-0.571266774349
1220211104-1743969-8076419470301874492201770-161783000-196-190245-119787-2510743870706002000.281181898749
13202111033748000-1032459-2789497-2145003-97809-883930004247-300074722391717-245019070400-1100-1.541277042849
1420211102-5644694204362436210763253414-151433150916223348113959-2851-1715525364907150016002.291681257049
1520211101-1367521-16517363003169282767865072387742-7314-753871338627021543440699001000.141150372949
16202110294050479-1812320-2365662-149683166131124596182425201-11034701116081589520469069800-900-1.271701615149
1720211028899791-243288512817449896017371446463-53112738200349253867-25175211740707006000.862064490249
18202110273080455-2124585-1005822-622428-28520-47963894-436-3544583414315809922070100-1000-1.411029531649
1920211026-1247398-55156318121231501865-364378012723675796060-1642232601318360711009001.281052825249
2020211025582794-15994469884621110489178388699-1410547-18252230985-279534821070200-200-0.281002962149
2120211022-644269-12853876240412152682445-40105-682-167-45215012542-2139377950704002000.28839544849
2220211021203876109754-197734242202-125548-304780-13079-275758-1165426464927070200-100-0.141089109449
2320211020556532256311-829527-125516-131592-86437200-558-48659386648020969070300-300-0.421015163849
2420211019-504814-431790910091142909816262-618301361167-43252733963-7450-424400706004000.57950799149
25202110187718901303614-2117009-1564134-42320-17082-329833-4771963058410921-167810702001000.141348639149
2620211015822742-1376104456288626433-604589964521339242-3124008423812836814870701007001.011805161249
27202110142011163-378717316966621993635-9347676957-2010524-2364636270416644-544950694006000.871952064149
28202110132224620-527184527255962539887-1001663387116584-7544200553117679862222909068800-200-0.292417201549
292021101212155071-11004329-1421202-907809-230050-17815515394-609911239924871321747-71990069000-2500-3.503100148449
30202110082612855319900-2923031-1565044-88549428053341-8642-1269657-10175451-37285071500-100-0.141404328749
31202110071266151-266150613913581821608-9018269692-16895770-407085-25076504-67560716003000.421368353249
32202110061374960-1070439-342467244117-249351025501669924-59975941544-3598-67033071300-900-1.251895696249
33202110051783237-302558412559111173732-574062289-47544-9339104473-188895325-21960072200-1000-1.372401392149

퀀티랩 종목분석 기능 소개 (feat. 삼성전자 종목분석)

이번 포스트에서는 퀀티랩 종목분석에서 제공하는 데이터들을 소개하고자 합니다.

현재 퀀티랩 종목분석에서는 회사 기본정보, 퀀티랩 모델로 판단한 종목랭킹 추이, 일봉차트, MACD, RSI, 재무제표, PER, PBR, ROE, 공매도, 투자 주체별 수급 분석, 일봉수급점수를 제공합니다.

삼성전자 종목분석 페이지를 예로 각 항목을 살펴보겠습니다.

우선 삼성전자의 기본정보를 보여줍니다.

기본정보

코스피인지 코스닥인지, 업종과 주요제품은 무엇인지 등을 보여줍니다.

QL 모델(퀀티랩 중장기 모델)의 종목랭킹 변화를 확인할 수 있습니다. 8월초 주가 급락에 따라 순위가 하락했다가 최근 다시 상위권으로 회복한 모습입니다.

퀀티랩모델

기술적분석에서는 일봉 차트와 이동평균선, 볼린저밴드를 함께 보여주고 그 아래에 MACD, RSI 차트도 보여줍니다. MACD 상으로는 주가 급락 이후 8월 중순쯤 MACD 신호를 돌파하면서 매수타이밍으로 판단할 수 있고 RSI 상으로도 비슷한 시점을 과냉 상태로 볼 수 있어서 매수를 고려해볼 수 있습니다. 다만 기술적분석만으로 투자에 임하는 것은 매우 위험함을 말씀드립니다.

기술적분석

기본적분석은 재무제표와 PER, PBR, ROE 지표를 주로 봅니다.

재무제표의 재무상태표, 손익계산서, 현금흐름표에서 주요 계정들을 뽑아서 다음과 같이 차트로 보여줍니다.

재무제표

삼성전자의 재무 상태는 매우 좋습니다. 300조에 육박하는 자본을 가지고 있다는 것에 놀라울 따름입니다. 당기순이익을 보면 성장이 약간 둔화된 듯 보여서 아쉬움은 있습니다. 현금흐름도 아주 안정적입니다. 재무제표 보는 법에 대해서는 이 포스트를 참고해 주세요.

수익성, 안정성, 성장성 지표로 주로 사용되는 PER, PBR, ROE를 차트로 보여줍니다.

지표

성장주들에 비한다면야 PER도 그렇게 높지 않고 물리적인 자산이 많은걸 감안해도 PBR은 상당히 낮아서 상승여력은 충분해 보입니다.

그리고 수급분석에서는 공매도 현황과 기관/외국인/개인들의 순매수/순매도량을 보여주고 일봉에서 계산한 수급 점수인 일봉수급점수를 보여줍니다.

다음은 공매도 현황을 보여줍니다. 공매도는 주식을 빌려서 파는 행위를 말합니다. 공매도자는 주가가 하락하면 수익이 생깁니다.

공매도

  • 공매도 잔고(위 차트)는 주식을 빌려서 판 후에 아직 갚지 않은 주식수 입니다.
  • 공매도량(아래 차트)은 빌려서 판 주식 수 입니다.

삼성전자의 경우 공매도가 많은 상황은 아닌 것으로 보입니다.

다음 차트는 투자 주체(기관/외국인/개인)들의 순매수/순매도량은 보여줍니다.

투자자

삼성전자를 외국인이 8월초에 대량 매도하고 그걸 개인이 대부분 받은 것을 볼 수 있습니다.

다음은 일봉수급점수 차트입니다.

일봉수급점수

일봉수급점수는 240일, 120일, 60일, 20일, 10일, 5일 동안의 거래 강도를 나타냅니다. 1에 가까울수록 매수세가, -1에 가까울수록 매도세가 강했음을 의미합니다.

삼성전자의 일봉수급점수는 매도세가 약간 강한 상태로 유지 중입니다.

그럼 여기까지 퀀티랩 종목분석 기능소개를 마치겠습니다.

앞으로도 유익한 데이터를 많이 생성해서 제공할 것이니 퀀티랩에 많은 관심 부탁드립니다.