오늘은 DART의 21년 1분기 영업이익 데이터와 월별주가를 섞어서 종목을 검색해보겠습니다.

여기서 찾아보는 종목은 아래와 같습니다.

  1. 종목별, 영업이익증가 순위와 등락 순위

  2. 영업이익 증가와 함께 주가도 오른 종목 Top-10

  3. 영업이익 증가에 비해 주가가 내린 종목 Top-10

사용한 분석 데이터의 기준은 아래와 같습니다.

  - 2021년 1분기 영업이익: DART에서 2021년 6월 18일에 게시된 포괄_손익계산서_연결 데이터 사용

    * 일부 종목의 경우 통화기준이 USD로 보고가 됩니다. USD를 KRW로 변경없이 그냥 올렸습니다.

    * 그러므로 USD로 보고되는 종목의 경우 수치가 맞지 않습니다.

  - 최종 데이터를 추출할 때, 전기1분기(2020년1분기)의 영업이익이 50억 이상인 종목만 대상으로 합니다.

본격적인 설명에 앞서, 절대 어떤 종목을 추천하기 위한 글이 아니며, 본 글로 인해 투자한 종목의 손실에 대해서는 절대 누구도 책임지지 않는다는 것을 기억해주시기 바랍니다.

데이터의 정확성 역시 일차적으로는 검토했지만, 데이터 수집 시점이나 과정에서 발생한 실수로 부정확할수도 있으니 양해바랍니다.

이 글의 내용을 직접 구현해보거나 응용해보고 싶다면, 앞의 글들을 차례대로 진행해주셔야 합니다.

1. 2021년 1분기 DART 재무제표 데이터베이스화하기

  : https://sweetquant.tistory.com/263

2. 2021년 1분기 영업이익 증가 종목 찾기

  : https://sweetquant.tistory.com/267

3. 월별주가 데이터 업로드하기

  : https://sweetquant.tistory.com/276

1. 종목별, 영업이익증가 순위와 등락 순위

먼저 저희가 구할 순위는 아래와 같이 네 가지입니다.

(20년1분기 영업이익이 50억 이상인 종목만 대상으로 합니다.)

  - 영업이익 증가 순위

    : 21년 1분기 영업이익 - 20년 1분기 영업이익

    : 단순히 영업이익 금액 증가에 따라 순위를 부여합니다. 영업이익 자체가 큰 기업일수록 순위에 유리합니다.

  - 영업이익 증가율 순위

    : 21년 1분기 영업이익 / 20년 1분기 영업이익

    : 영업이익 증가 비율에 따른 순위입니다. 영업이익 금액이 작아도 증가율에 따라 순위가 좋아집니다.

  - 등락률 순위

    : (21년6월종가 - 21년1월종가) / 21년1월종가 * 100

    : 위 로직에 따라 등락률이 높으면 순위가 좋습니다.(1위)

  - 하락률 순위

    : 등락률 순위와 반대로, 많이 하락할수록 순위가 좋습니다.

 

순위를 구한 엑셀 파일은 아래와 같습니다.

20210706_영업이익과월별주가.xlsx
0.07MB

 

순위를 구하는 SQL은 아래와 같습니다. 막상 보기에 복잡해 보일 수 있지만 데이터를 이해하고 SQL을 알고 있다면 그리 어려운 문법은 아닙니다.

본 블로그의 '평생 필요한 데이터 분석'을 통해 SQL을 천천히 공부해보시길 추천합니다.

# [SQL-1]
WITH RES01 AS(
		# 영업이익증가
        SELECT  T1.회사명 
                ,SUBSTR(T1.종목코드,2,6) STK_CD
                ,ROUND(T1.당기1분기3개월/1e8,1) 당기1분기
                ,ROUND(T1.전기1분기3개월/1e8,1) 전기1분기
                ,ROUND(ROUND(T1.당기1분기3개월/1e8,1) - ROUND(T1.전기1분기3개월/1e8,1),1) 영업이익증가액
                ,ROUND(ROUND(T1.당기1분기3개월/1e8,1) / ROUND(T1.전기1분기3개월/1e8,1),1) 영업이익증가율
                ,RANK() OVER(ORDER BY ROUND(ROUND(T1.당기1분기3개월/1e8,1) - ROUND(T1.전기1분기3개월/1e8,1),1) DESC) 영업이익증가액순위
                ,RANK() OVER(ORDER BY ROUND(ROUND(T1.당기1분기3개월/1e8,1) / ROUND(T1.전기1분기3개월/1e8,1),1) DESC) 영업이익증가율순위
        FROM    DB_DTECH.up_손익계산서_20211q T1
        WHERE   T1.항목코드 = 'dart_OperatingIncomeLoss'
        AND     ROUND(T1.전기1분기3개월/1e8,1) >= 50
        )
SELECT  T1.*
        ,T_YM1.YM YM1 ,T_YM1.C_PRC 종가1
        ,T_YM2.YM YM2 ,T_YM2.C_PRC 종가2
        ,ROUND((T_YM2.C_PRC - T_YM1.C_PRC) / T_YM1.C_PRC * 100,1) 등락률
        ,RANK() OVER(ORDER BY ROUND((T_YM2.C_PRC - T_YM1.C_PRC) / T_YM1.C_PRC * 100,1) DESC) 등락률순위
        ,RANK() OVER(ORDER BY ROUND((T_YM2.C_PRC - T_YM1.C_PRC) / T_YM1.C_PRC * 100,1) ASC) 하락률순위
FROM    RES01 T1
        INNER JOIN DB_DTECH.HIST_YM T_YM1 ON (T_YM1.STK_CD = T1.STK_CD AND T_YM1.YM = '202101')
        INNER JOIN DB_DTECH.HIST_YM T_YM2 ON (T_YM2.STK_CD = T1.STK_CD AND T_YM2.YM = '202106')
        ;

 

2. 영업이익 증가와 함께 주가도 오른 종목 Top-10

영업이익증가금액 순위 + 영업이익증가율 순위 + 등락률 순위를 합해서 순위가 좋은 종목 Top-10을 찾아보면 아래와 같습니다.

위 결과는 아래와 같이 [SQL-1]을 조금 변형해서 얻을 수 있습니다. [SQL-1]의 내용을 RES02로 묶은 후에, 세 가지 순위를 합해서 순위가 좋은 종목을 찾아내면 됩니다.

# [SQL-2]
WITH RES01 AS(
		# 영업이익증가
        SELECT  T1.회사명 
                ,SUBSTR(T1.종목코드,2,6) STK_CD
                ,ROUND(T1.당기1분기3개월/1e8,1) 당기1분기
                ,ROUND(T1.전기1분기3개월/1e8,1) 전기1분기
                ,ROUND(ROUND(T1.당기1분기3개월/1e8,1) - ROUND(T1.전기1분기3개월/1e8,1),1) 영업이익증가액
                ,ROUND(ROUND(T1.당기1분기3개월/1e8,1) / ROUND(T1.전기1분기3개월/1e8,1),1) 영업이익증가율
                ,RANK() OVER(ORDER BY ROUND(ROUND(T1.당기1분기3개월/1e8,1) - ROUND(T1.전기1분기3개월/1e8,1),1) DESC) 영업이익증가액순위
                ,RANK() OVER(ORDER BY ROUND(ROUND(T1.당기1분기3개월/1e8,1) / ROUND(T1.전기1분기3개월/1e8,1),1) DESC) 영업이익증가율순위
        FROM    DB_DTECH.up_손익계산서_20211q T1
        WHERE   T1.항목코드 = 'dart_OperatingIncomeLoss'
        AND     ROUND(T1.전기1분기3개월/1e8,1) >= 50
        )
,RES02 AS(
		SELECT  T1.*
		        ,T_YM1.YM YM1 ,T_YM1.C_PRC 종가1
		        ,T_YM2.YM YM2 ,T_YM2.C_PRC 종가2
		        ,ROUND((T_YM2.C_PRC - T_YM1.C_PRC) / T_YM1.C_PRC * 100,1) 등락률
		        ,RANK() OVER(ORDER BY ROUND((T_YM2.C_PRC - T_YM1.C_PRC) / T_YM1.C_PRC * 100,1) DESC) 등락률순위
		        ,RANK() OVER(ORDER BY ROUND((T_YM2.C_PRC - T_YM1.C_PRC) / T_YM1.C_PRC * 100,1) ASC) 하락률순위
		FROM    RES01 T1
		        INNER JOIN DB_DTECH.HIST_YM T_YM1 ON (T_YM1.STK_CD = T1.STK_CD AND T_YM1.YM = '202101')
		        INNER JOIN DB_DTECH.HIST_YM T_YM2 ON (T_YM2.STK_CD = T1.STK_CD AND T_YM2.YM = '202106')
        )
SELECT  T2.*
FROM    RES02 T2
ORDER BY T2.영업이익증가액순위 + T2.영업이익증가율순위 + T2.등락률순위 ASC
LIMIT 10;

 

 

3. 영업이익 증가에 비해 주가가 내린 종목 Top-10

마지막으로, 영어익증가액순위와 영업이익증가율순위, 하락률순위를 종합해 종목 열개를 찾아보겠습니다. 영업이익은 증가했지만, 그 중에 상대적으로 주가가 내려간 종목을 찾는 방법입니다. 위 [SQL-2]의 마지막 부분 ORDER BY만 아래와 같이 변경하면 됩니다.

  - ORDER BY T2.영업이익증가액순위 + T2.영업이익증가율순위 + T2.하락률순위 ASC

결과는 아래와 같습니다.

오늘은 여기까지입니다. SQL을 잘 알고 있다면, 자신만의 기준으로 좀 더 다양하고 세밀하게 종목을 검색해낼 수 있을겁니다. 감사합니다.

 

위와 같이 주식 데이터를 마음대로 분석해볼 수 있는 SQL을 공부하고 싶다면 아래 책을 참고해주세요~!

 

※ 책 소개: https://sweetquant.tistory.com/243

※ 책 미리보기: https://sweetquant.tistory.com/257

 

※ 완전판 E-Book

  ▶ 유페이퍼: https://www.upaper.net/ryu1hwan/1142997

  ▶ 알라딘: https://www.aladin.co.kr/shop/wproduct.aspx?ItemId=273701425

  ▶ Yes24: http://www.yes24.com/Product/Goods/102264444?OzSrank=1

  ▶ 교보문고: https://digital.kyobobook.co.kr/digital/ebook/ebookDetail.ink?selectedLargeCategory=001&barcode=4801167630019&orderClick=LAG&Kc=

 

+ Recent posts