728x90
기본적인 지표에 대해서 소개해 드리겠습니다.
지표 | 설명 | 필요한 재무제표 데이터 |
PER | Price to Earnings Ratio | 순이익 |
PBR | Price to Book Ratio | 순자산 |
PCR | Price to Cash Flow Ratio | 영업활동으로 인한 현금흐름 |
PSR | Price to Sales Ratio | 매출액 |
DY | Dividend Yield | 배당 |
가치지표의 경우 연간 재무제표 기준으로 계산할 경우 다음 재무제표가 발표될 때까지 1년이나 기다려야 합니다.
반면 분기 재무제표는 3개월 마다 발표되므로 최신 정보를 훨씬 빠르게 반영할 수 있다는 장점이 있습니다.
일반적으로 최근 4분기 데이터를 이용해 계산하는 TTM(Trailing Twelve Months) 방법을 많이 사용합니다.
예제로 삼성전자의 가치지표를 계산하는 법을 살펴보겠습니다.
먼저 삼성전자 분기 재무제표 데이터를 가져와 봅시다.
#패키지 불러오기
from sqlalchemy import create_engine
import pandas as pd
# DB 연결
engine = create_engine('mysql+pymysql://root:1234@127.0.0.1:3306/stock_db')
# 티커 리스트
ticker_list = pd.read_sql( """
select * from kor_ticker
where 기준일 = (select max(기준일) from kor_ticker)
and 종목구분 = '보통주';
""", con=engine)
# 삼성전자 분기 재무제표
sample_fs = pd.read_sql("""
select * from kor_fs
where 공시구분 = 'q'
and 종목코드 = '005930'
and 계정 in ('당기순이익', '자본', '영업활동으로인한현금흐름', '매출액');
""", con=engine)
engine.dispose()
가져온 데이터를 종목코드, 계정, 기준일로 정렬한 후에 ttm을 계산해보겠습니다.
sample_fs = sample_fs.sort_values(['종목코드', '계정', '기준일'])
#ttm 계산하기
sample_fs['ttm'] = sample_fs.groupby(
['종목코드', '계정'], as_index=False)['값'].rolling(window=4,
min_periods=4).sum()['값']
sample_fs를 보시면 자본데이터도 4배로 뻥튀기 되어있습니다. 다시 4로 나눠줄 필요가 있습니다.
그리고 다른 데이터들은 가장 최근 분기 데이터만 남겨주면 됩니다.
import numpy as np
sample_fs['ttm'] = np.where(sample_fs['계정'] == '자본',
sample_fs['ttm'] / 4, sample_fs['ttm'])
sample_fs = sample_fs.groupby(['계정', '종목코드']).tail(1)
지금까지 가치지표에서 분모에 해당하는 값을 구했으므로, 이제는 분자에 해당하는 시가총액을 구해야 합니다.
티커리스트에서 시가총액 확인 가능합니다.
sample_fs_merge = sample_fs[['계정', '종목코드', 'ttm']].merge(
ticker_list[['종목코드', '시가총액', '기준일']], on = '종목코드')
#시가총액은 원 단위, 그러나 ttm단위는 억단위
#시가총액을 억으로 나눠서 단위를 맞춰줘야함
sample_fs_merge['시가총액'] = sample_fs_merge['시가총액'] / 100000000
이제 가치지표를 계산해보겠습니다.
#가치지표 계산
sample_fs_merge['value'] = sample_fs_merge['시가총액'] / sample_fs_merge['ttm']
sample_fs_merge['지표'] = np.where(
sample_fs_merge['계정'] == '매출액', 'PSR',
np.where(
sample_fs_merge['계정'] == '영업활동으로인한현금흐름', 'PCR',
np.where(sample_fs_merge['계정'] == '자본', 'PBR',
np.where(sample_fs_merge['계정'] == '당기순이익', 'PER', None))))
배당 수익률을 계산해보겠습니다.
티커 리스트에서 주당배당금이 있습니다.
주당 배당금 열을 종가 열로 나누면 배당수익률을 계산할 수 있습니다.
#배당수익률 계산
ticker_list_sample = ticker_list[ticker_list['종목코드'] == '005930'].copy()
ticker_list_sample['DY'] = ticker_list_sample['주당배당금'] / ticker_list_sample['종가']
다음 포스트에서는 전종목에 대한 가치지표를 계산해보겠습니다.
'파이썬으로 퀀트 프로그램 만들기 project' 카테고리의 다른 글
Ta-lib를 통해 기술적 지표 계산하기 - 이동평균, RSI, 볼린저밴드 (0) | 2023.10.16 |
---|---|
(Python)국내 주식 가치 지표 계산하기_2 (0) | 2023.10.16 |
한국투자증권 api 사용하기_2 (2) | 2023.10.05 |
한국투자증권 api 사용하기_1 (0) | 2023.09.28 |
국내 주식 주가 데이터 크롤링 (0) | 2023.09.11 |