지난글에서는 영업이익 증가 Top 종목을 다양하게 추출해봤습니다.
https://sweetquant.tistory.com/303
여기서는 영업이익 증가 Top 종목에 주가 흐름도 추가해 보도록 하겠습니다.
여기서는 주가 흐름을 추가하기 위해서 월별 주가 데이터를 사용합니다.
본격적인 설명에 앞서, 절대 어떤 종목을 추천하기 위한 글이 아니며, 본 글로 인해 투자한 종목의 손실에 대해서는 절대 누구도 책임지지 않는다는 것을 기억해주시기 바랍니다.
데이터의 정확성 역시 일차적으로는 검토했지만, 데이터 수집 시점이나 과정에서 발생한 실수로 부정확할수도 있으니 양해바랍니다.
아래 첨부 파일은 2019년부터 2021년 8월까지의 월별 종목별 주가 데이터를 담고 있습니다.
(21년 8월은 21년 8월 25일까지 데이터입니다.)
월별 주가를 DB화 하는 과정은 아래 글을 참고해주세요.
https://sweetquant.tistory.com/276
위의 링크된 글을 따라하면 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.구분별순위
;
결과가 잘 안 보일 수 있으니 엑셀로 결과 첨부해드립니다.
오늘은 여기까지입니다. 감사합니다.
'데이터분석 > D-Tech 데이터로 하는 재테크' 카테고리의 다른 글
수출이 급증한 300215 품목의 정체는? (0) | 2021.09.03 |
---|---|
수출 통계로 투자 업종 찾기 (0) | 2021.09.02 |
2021.08.31 종목별 최적의 골든크로스! (0) | 2021.09.01 |
골든크로스 - 종목마다 다르게 SK하이닉스편 (0) | 2021.08.27 |
2021년 전반기 영업이익 Top - 종목 추출 (0) | 2021.08.26 |
등락률 업데이트하기 (0) | 2021.08.19 |
LEAD와 LAG - 삼성전자 등락률 구하기 (0) | 2021.08.18 |
파이썬 - 주가 이력 데이터 받아오기 (0) | 2021.08.17 |