지난글에서는 영업이익 증가 Top 종목을 다양하게 추출해봤습니다.

 

https://sweetquant.tistory.com/303

 

2021년 전반기 영업이익 Top - 종목 추출

DART에 2021년 전반기(1월~6월) 손익계산서가 올라왔습니다. 해당 데이터를 이용해 다양한 기준으로 영업이익이 많이 개선된 종목을 찾아보도록 하겠습니다. ​ DART 데이터를 어떻게 받아서 올리는

sweetquant.tistory.com

여기서는 영업이익 증가 Top 종목에 주가 흐름도 추가해 보도록 하겠습니다.

여기서는 주가 흐름을 추가하기 위해서 월별 주가 데이터를 사용합니다.

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

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

아래 첨부 파일은 2019년부터 2021년 8월까지의 월별 종목별 주가 데이터를 담고 있습니다.

(21년 8월은 21년 8월 25일까지 데이터입니다.)

YM_STK_20210825.zip
1.23MB

 

월별 주가를 DB화 하는 과정은 아래 글을 참고해주세요.

https://sweetquant.tistory.com/276

 

월별 주가 DB화하기(2019~2021.06)

안녕하세요. 오늘은 월별 주가를 DB화해보겠습니다. 앞에서는 DART의 재무 제표 데이터를 올렸는데요, 월별 주가를 올려서 월별 주가도 같이 분석한다면 좀 더 좋은 종목을 찾는데 도움이 되기 때

sweetquant.tistory.com

 

위의 링크된 글을 따라하면 MySQL DB에 HIST_YM 테이블을 생성하고 21년 6월까지의 월별 주가 데이터가 만들어집니다. 우리는 21년 8월까지의 월별주가가 필요하기 때문에 HIST_YM을 TRUNCATE 한 후에, 본 글에 첨부된 데이터로 다시 업로드를 해주세요.



데이터를 올렸다면 분석은 간단합니다. 아래와 같은 SQL을 사용하도록 하겠습니다.



1. 반기별 영업이익 증가 Top과 주가 흐름

SELECT  T1.*
        ,T_2003.C_PRC `종가(20년3월)`
        ,T_2101.C_PRC `종가(21년1월)`
        ,T_2108.C_PRC `종가(21년8월25일)`
        
        ,(SELECT MAX(A.H_PRC) FROM DB_DTECH.HIST_YM A WHERE A.STK_CD = T1.STK_CD AND A.YM LIKE '2020%') `고가(20년)`
        ,(SELECT MIN(A.L_PRC) FROM DB_DTECH.HIST_YM A WHERE A.STK_CD = T1.STK_CD AND A.YM LIKE '2020%') `저가(20년)`
        ,(SELECT MAX(A.H_PRC) FROM DB_DTECH.HIST_YM A WHERE A.STK_CD = T1.STK_CD AND A.YM LIKE '2021%') `고가(21년)`
        ,(SELECT MIN(A.L_PRC) FROM DB_DTECH.HIST_YM A WHERE A.STK_CD = T1.STK_CD AND A.YM LIKE '2021%') `저가(21년)`
FROM    (
		SELECT  T1.회사명 
		        ,REPLACE(REPLACE(T1.종목코드,'[',''),']','') STK_CD
		        ,'1-반기별 영업이익증가액 Top' 구분
				,ROUND(T1.당기_반기_누적/1e8,1) 당년반기
		        ,ROUND(T1.전기_반기_누적/1e8,1) 전년반기
		        ,ROUND(ROUND(T1.당기_반기_누적/1e8,1) - ROUND(T1.전기_반기_누적/1e8,1),1) 구분값
				,ROW_NUMBER() OVER(ORDER BY ROUND(ROUND(T1.당기_반기_누적/1e8,1) - ROUND(T1.전기_반기_누적/1e8,1),1) DESC) 구분별순위
		FROM    DB_DTECH.UP_손익계산서_20211H T1
		WHERE   T1.항목코드 = 'dart_OperatingIncomeLoss'
		AND     T1.당기_반기_누적 > 0
		AND     T1.통화 = 'KRW'
		UNION ALL
		SELECT  T1.회사명 
		        ,REPLACE(REPLACE(T1.종목코드,'[',''),']','') STK_CD
		        ,'2-반기별 영업이익증가율 Top' 구분
				,ROUND(T1.당기_반기_누적/1e8,1) 당년반기
		        ,ROUND(T1.전기_반기_누적/1e8,1) 전년반기
		        ,ROUND(ROUND(T1.당기_반기_누적/1e8,1) / ROUND(T1.전기_반기_누적/1e8,1),1) 구분값
				,ROW_NUMBER() OVER(ORDER BY ROUND(ROUND(T1.당기_반기_누적/1e8,1) / ROUND(T1.전기_반기_누적/1e8,1),1) DESC) 구분별순위
		FROM    DB_DTECH.UP_손익계산서_20211H T1
		WHERE   T1.항목코드 = 'dart_OperatingIncomeLoss'
		AND     T1.당기_반기_누적 > 0
		AND     T1.전기_반기_누적 > 0
		AND     T1.통화 = 'KRW'
		UNION ALL
		SELECT  T1.회사명
		        ,REPLACE(REPLACE(T1.종목코드,'[',''),']','') STK_CD
		        ,'3-반기별 영업이익증가율 Top(500억이상만)' 구분
				,ROUND(T1.당기_반기_누적/1e8,1) 당년반기
		        ,ROUND(T1.전기_반기_누적/1e8,1) 전년반기
		        ,ROUND(ROUND(T1.당기_반기_누적/1e8,1) / ROUND(T1.전기_반기_누적/1e8,1),1) 구분값
				,ROW_NUMBER() OVER(ORDER BY ROUND(ROUND(T1.당기_반기_누적/1e8,1) / ROUND(T1.전기_반기_누적/1e8,1),1) DESC) 구분별순위
		FROM    DB_DTECH.UP_손익계산서_20211H T1
		WHERE   T1.항목코드 = 'dart_OperatingIncomeLoss'
		AND     T1.당기_반기_누적/1e8 > 500
		AND     T1.전기_반기_누적 > 0
		AND     T1.통화 = 'KRW'
		) T1
		LEFT OUTER JOIN DB_DTECH.HIST_YM T_2003 ON (T_2003.STK_CD = T1.STK_CD AND T_2003.YM = '202003')
		LEFT OUTER JOIN DB_DTECH.HIST_YM T_2101 ON (T_2101.STK_CD = T1.STK_CD AND T_2101.YM = '202101')
		LEFT OUTER JOIN DB_DTECH.HIST_YM T_2108 ON (T_2108.STK_CD = T1.STK_CD AND T_2108.YM = '202108')
WHERE   T1.구분별순위 <= 10
ORDER BY T1.구분, T1.구분별순위;


결과는 아래와 같습니다.






2. 분기별 영업이익 증가 Top과 주가 흐름

WITH RES01 AS(
		SELECT  T1.회사명 
		        ,REPLACE(REPLACE(T1.종목코드,'[',''),']','') STK_CD
		        ,ROUND(T1.당기_반기_3개월/1e8,1) `2분기`
		        ,ROUND((T1.당기_반기_누적 - T1.당기_반기_3개월)/1e8,1) `1분기`
		FROM    DB_DTECH.UP_손익계산서_20211H T1
		WHERE   T1.항목코드 = 'dart_OperatingIncomeLoss'
		AND     T1.통화 = 'KRW'
        )
SELECT  T1.*
        ,T_2003.C_PRC `종가(20년3월)`
        ,T_2101.C_PRC `종가(21년1월)`
        ,T_2108.C_PRC `종가(21년8월25일)`
        ,(SELECT MAX(A.H_PRC) FROM DB_DTECH.HIST_YM A WHERE A.STK_CD = T1.STK_CD AND A.YM LIKE '2020%') `고가(20년)`
        ,(SELECT MIN(A.L_PRC) FROM DB_DTECH.HIST_YM A WHERE A.STK_CD = T1.STK_CD AND A.YM LIKE '2020%') `저가(20년)`
        ,(SELECT MAX(A.H_PRC) FROM DB_DTECH.HIST_YM A WHERE A.STK_CD = T1.STK_CD AND A.YM LIKE '2021%') `고가(21년)`
        ,(SELECT MIN(A.L_PRC) FROM DB_DTECH.HIST_YM A WHERE A.STK_CD = T1.STK_CD AND A.YM LIKE '2021%') `저가(21년)`
FROM    (
		SELECT  T1.회사명 
		        ,T1.STK_CD
		        ,'4-분기별 영업이익증가액 Top' 구분
				,T1.`2분기`
		        ,T1.`1분기`
		        ,ROUND(T1.`2분기` - T1.`1분기`,1) 구분값
				,ROW_NUMBER() OVER(ORDER BY ROUND(T1.`2분기` - T1.`1분기`,1) DESC) 구분별순위
		FROM    RES01 T1
		WHERE   T1.`2분기` > 0
		UNION ALL
		SELECT  T1.회사명 
		        ,T1.STK_CD
		        ,'5-분기별 영업이익증가율 Top' 구분
				,T1.`2분기`
		        ,T1.`1분기`
		        ,ROUND(T1.`2분기`/T1.`1분기`,1) 구분값
				,ROW_NUMBER() OVER(ORDER BY ROUND(T1.`2분기`/T1.`1분기`,1) DESC) 구분별순위
		FROM    RES01 T1
		WHERE   T1.`2분기` > 0
		AND     T1.`1분기` > 0
		UNION ALL
		SELECT  T1.회사명 
		        ,T1.STK_CD
		        ,'6-분기별 영업이익증가율 Top(500억이상만)' 구분
				,T1.`2분기`
		        ,T1.`1분기`
		        ,ROUND(T1.`2분기`/T1.`1분기`,1) 구분값
				,ROW_NUMBER() OVER(ORDER BY ROUND(T1.`2분기`/T1.`1분기`,1) DESC) 구분별순위
		FROM    RES01 T1
		WHERE   T1.`2분기` > 500
		AND     T1.`1분기` > 0
		) T1
		LEFT OUTER JOIN DB_DTECH.HIST_YM T_2003 ON (T_2003.STK_CD = T1.STK_CD AND T_2003.YM = '202003')
		LEFT OUTER JOIN DB_DTECH.HIST_YM T_2101 ON (T_2101.STK_CD = T1.STK_CD AND T_2101.YM = '202101')
		LEFT OUTER JOIN DB_DTECH.HIST_YM T_2108 ON (T_2108.STK_CD = T1.STK_CD AND T_2108.YM = '202108')
WHERE   T1.구분별순위 <= 10
ORDER BY T1.구분, T1.구분별순위
;



결과가 잘 안 보일 수 있으니 엑셀로 결과 첨부해드립니다.

2021년전반기_영업이익증가와주가흐름.xlsx
0.02MB



오늘은 여기까지입니다. 감사합니다.

+ Recent posts