조회한 테이블 좌측의 ℹ️ 아이콘을 클릭하면 Timeseries code를 확인할 수 있는데, 여기서 국가 코드와 지표 코드를 알 수 있습니다. 예를 들어, Timeseries code: KOR.NGDP_RPCH.A는 한국(KOR)의 실질 GDP 성장률(NGDP_RPCH)을 의미합니다. A는 연간 데이터를 나타냅니다.
kr_data.plot(x="TIME_PERIOD",y="VALUE",title="Korea GDP Gap Over Time",kind="line",ax=axes[1, 2])
plt.tight_layout()
양국의 실질 GDP는 꾸준히 증가하는 추세를 보이며, 실질 GDP 성장률은 경기 변동에 따라 등락을 반복하는 모습을 확인할 수 있습니다.
GDP 갭 역시 경제 상황에 따라 변화하는 모습을 시각적으로 파악할 수 있습니다. 잠재 GDP는 경제가 완전 고용 상태에서 생산할 수 있는 최대 생산량을 나타내는데, GDP 갭이 양수일 경우 실제 GDP가 잠재 GDP를 초과하는 상태를 의미하며, 음수일 경우 그 반대를 의미합니다. GDP 갭이 양수로 크면 인플레이션 압력이 증가할 수 있고, 음수로 크면 경기 침체의 신호일 수 있습니다.
이와 같이 파이썬을 활용하여 IMF WEO 데이터베이스에서 각국의 GDP 데이터를 수집하고 분석할 수 있습니다. 미국, 한국 외에도 다양한 국가의 GDP 데이터를 동일한 방법으로 수집하여 비교 분석할 수 있습니다.
여기서 CPI, PPI는 전월 대비 % 값입니다. CPI와 코스피를 봤을 때 2001년 부근에서는 서로 역관계처럼 보이다가 2007년 부근에서는 코스피가 CPI를 선행하는 것처럼도 보입니다. PPI도 구간에 따라서 상관성이 다르게 보입니다. 즉 물가 지수와 코스피만으로 서로가 밀접한 상관성이 있다고 말할 수는 없어 보입니다. 이 부부은 2008년 금융위기로 주식 폭락과 물가
실제로 피어슨 상관계수를 구해 보면 구간에 따라서 매우 큰 차이가 생기는 것을 볼 수 있습니다.
from scipy.stats import pearsonr
_df = df[df['date'] >='20150101']
print(pearsonr(_df['close'], _df['cpi']))
print(pearsonr(_df['close'], _df['ppi']))
(0.3184625030996628, 1.1693520291646116e-42)
(0.7737092632552787, 0.0)
그렇다고 상관성이 아주 없다고 볼 수도 없습니다. 주식 딥러닝 모델을 구축할 때 학습데이터의 피처로 충분히 활용할 만하다고 보입니다.
눈으로 보기에는 “kospi” 검색어가 급증할 때 코스피 지수가 폭락한 경우가 많았음이 보입니다. 공포 심리에 의해 뉴스 등을 찾아보기 위해 검색이 급증하고 실제로 코스피 지수도 요동치는 경우가 있습니다. 물론 상관성은 높지 않아 보이지만 검색 급증이 있으면 하나의 작은 위험 신호로 고려하는 것도 나쁘지 않을 것입니다. 조심해서 나쁠 것은 없습니다.
다음과 같이 상관 계수를 뽑아 보면 그렇게 상관성은 높게 나오지 않습니다. 시계열 전체에서의 상관성 보다는 검색 급증 시그널 정도만 잘 포착하는 것이 의미있어 보입니다.
먼저 개별종목 공매도 거래 데이터를 받아오겠습니다. 크롬이나 웨일 브라우저에서 F12 키를 눌러 개발자 도구를 열어줍니다. 그리고 다음과 같이 Network 탭에서 Fetch/XHR 하위 탭을 확인합니다. 그리고 조회 버튼을 다시 누르면 아래에 getJsonData.cmd 내역이 뜨고 여기서 요청 정보를 확인할 수 있습니다.
여기서 Request URL, Request Headers, Form Data를 확인합니다. 다음과 같이 확인한 정보로 요청 준비를 합니다.
이 데이터로 다양한 분석을 해볼 수 있겠습니다. 여기서는 공매도 잔고는 많으면서 공매도 거래는 적은 순으로 정렬해 봅니다.
_df['score'] = _df['비중'] / (_df['거래량비중'] +1)
_df.sort_values('score',ascending=False)
index
종목코드
종목명
증권구분
공매도거래량
공매도거래량업틱룰
공매도거래량업틱룰예외
거래량
거래량비중
공매도거래대금
공매도거래대금업틱룰
공매도거래대금업틱룰예외
거래대금
거래대금비중
종목명_dup
공매도잔고수량
상장주식수
공매도잔고금액
시가총액
비중
score
97
034220
LG디스플레이
주권
4,420
2,290
2,130
1,949,194
0.23
89,668,950
46,585,150
43,083,800
39,626,663,800
0.23
LG디스플레이
28,935,291
357,815,700
568,578,468,150
7,031,078,505,000
8.09
6.577236
620
097520
엠씨넥스
주권
30
0
30
83,676
0.04
1,333,050
0
1,333,050
3,713,085,850
0.04
엠씨넥스
435,409
17,963,282
19,332,159,600
797,569,720,800
2.42
2.326923
370
032350
롯데관광개발
주권
17,567
16,928
639
882,332
1.99
324,702,700
312,941,650
11,761,050
16,281,919,250
1.99
롯데관광개발
4,726,867
69,275,662
94,300,996,650
1,382,049,456,900
6.82
2.280936
699
006490
인스코비
주권
675
0
675
1,384,422
0.05
2,285,320
0
2,285,320
4,702,224,255
0.05
인스코비
1,824,640
109,848,100
6,541,334,400
393,805,438,500
1.66
1.580952
578
003620
쌍용차
주권
0
0
0
0
0.00
0
0
0
0
0.00
쌍용차
2,180,965
149,840,002
6,041,273,050
415,056,805,540
1.46
1.460000
…
…
…
…
…
…
…
…
…
…
…
…
…
…
…
…
…
…
…
…
…
983
75701B93
현대유퍼스트부동산25호 A
수익증권
0
0
0
0
0.00
0
0
0
0
0.00
NaN
NaN
NaN
NaN
NaN
NaN
NaN
984
75702B93
현대유퍼스트부동산25호 C-i
수익증권
0
0
0
0
0.00
0
0
0
0
0.00
NaN
NaN
NaN
NaN
NaN
NaN
NaN
985
75701BA7
현대유퍼스트부동산30호[파생형] A
수익증권
0
0
0
0
0.00
0
0
0
0
0.00
NaN
NaN
NaN
NaN
NaN
NaN
NaN
986
75702BA7
현대유퍼스트부동산30호[파생형] C-i
수익증권
0
0
0
0
0.00
0
0
0
0
0.00
NaN
NaN
NaN
NaN
공매도 잔고가 많다는 것은 다시 상환해야 할 물량이 많다는 것이고 동시에 공매도 거래 비중이 적다면 주가가 바닥에 가까워 졌다고 추측해 볼 여지가 있습니다. 주식 거래에서 확실한 것은 없습니다. 다양한 금융데이터 분석을 통해 성공적인 투자에 한걸음씩 다가가는 것이 중요하다고 봅니다.
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에 가까울수록 매도세가 강했음을 의미합니다.
퀀티랩 주식투자 대표 모델인 Quantylab Long-Term Trading (QL) 모델을 업데이트 했습니다. 기존 모델에 비해 다양한 시장지표 및 종목지표를 추가하고 레이블링을 조정하는 작업이었습니다.
Feature 수는 412개로 326개 시장지표 자질과 86개 종목지표 자질로 구성했습니다. 각종 지표에 Moving Average 등을 적용하여 자질 수는 부풀려진 면이 있습니다.
시장지표는 코스피/코스닥 지수, 해외 주식 시장 지수, 환율, 채권, 금리, 원자재, GSCI, 달러 지수, BDI, 필라델피아 반도체 지수, 미국시장 변동성 지수, MSCI 지수 등을 포함합니다. 종목지표는 종목 주가, 거래량, 시가총액, Bollinger Band, MACD, RSI, 수급, PER, PBR, ROE, 배당수익률, 기관/외국인/개인 수급, 공매도 비율, 대차잔고액 등을 포함합니다. 이들 시장지표 및 종목지표 자질들을 모아서 표준화 (Standardization) 했습니다.
레이블링은 수익성, 변동성, 거래규모 지표를 만들어 조합했습니다. 수익성 지표는 중장기 기간에서 종가의 변곡점을 찾아서 현재 종가와 다음 변곡점과의 차이를 기대 수익률로 삼았습니다. 변동성 지표는 변곡점 사이에서의 표준편차로 구했습니다. 거래규모 지표는 종목의 거래대금에 log를 취해 사용했습니다.
이렇게 자질과 레이블링을 마치고 적당히 심층신경망 레이어를 구성하여 학습했습니다. 중간에 이런저런 실수로 시행착오를 겪었지만 다 생략하고 결과를 바로 공유하려 합니다.
학습에는 2015~2019년 기간내의 데이터를 사용했습니다. 이렇게 학습한 모델로 2020년부터 현재까지 일단위로 종목 점수를 구하여 매수/매도를 판단해서 종가매매 백테스팅을 수행했습니다. 즉, 학습과 백테스팅 데이터가 겹쳐지지 않게하여 의미있는 백테스팅이 되도록 했습니다.
백테스팅 결과 2020년 부터 2021-09-17 까지의 평가 수익률은 +73.07%로 동기간 코스피 대비 30% 정도 높았습니다. QL 모델로 매수/매도를 판단한 내역은 다음과 같습니다.