728x90
전 종목에 해당하는 가치지표를 계산해보겠습니다.
먼저 mysql에서 가치지표 데이터를 담을 테이블을 만들겠습니다.
use stock_db;
create table kor_value
(
종목코드 varchar(6),
기준일 date,
지표 varchar(3),
값 double,
primary key(종목코드, 기준일, 지표)
);
이제 전 종목 가치지표를 계산후 sql에 저장해보겠습니다.
#패키지 불러오기
import pymysql
from sqlalchemy import create_engine
import pandas as pd
import numpy as np
# DB 연결
engine = create_engine('mysql+pymysql://root:1234@127.0.0.1:3306/stock_db')
con = pymysql.connect(user='root',
passwd = '1234',
host = '127.0.0.1',
db = 'stock_db',
charset = 'utf8')
mycursor = con.cursor()
# 분기 재무제표
kor_fs = pd.read_sql("""
select * from kor_fs
where 공시구분 = 'q'
and 계정 in ('당기순이익', '자본', '영업활동으로인한현금흐름', '매출액');
""", con=engine)
# 티커 리스트
ticker_list = pd.read_sql( """
select * from kor_ticker
where 기준일 = (select max(기준일) from kor_ticker)
and 종목구분 = '보통주';
""", con=engine)
engine.dispose()
#ttm 구하기
kor_fs = kor_fs.sort_values(['종목코드', '계정', '기준일'])
#ttm 계산하기
kor_fs['ttm'] = kor_fs.groupby(
['종목코드', '계정'], as_index=False)['값'].rolling(window=4,
min_periods=4).sum()['값']
#자본은 평균 구하기
kor_fs['ttm'] = np.where(kor_fs['계정'] == '자본',
kor_fs['ttm'] / 4, kor_fs['ttm'])
kor_fs = kor_fs.groupby(['계정', '종목코드']).tail(1)
kor_fs_merge = kor_fs[['계정', '종목코드', 'ttm']].merge(
ticker_list[['종목코드', '시가총액', '기준일']], on = '종목코드')
kor_fs_merge['시가총액'] = kor_fs_merge['시가총액'] / 100000000
kor_fs_merge['value'] = kor_fs_merge['시가총액'] / kor_fs_merge['ttm']
kor_fs_merge['value'] = kor_fs_merge['value'].round(4)
kor_fs_merge['지표'] = np.where(
kor_fs_merge['계정'] == '매출액', 'PSR',
np.where(
kor_fs_merge['계정'] == '영업활동으로인한현금흐름', 'PCR',
np.where(kor_fs_merge['계정'] == '자본', 'PBR',
np.where(kor_fs_merge['계정'] == '당기순이익', 'PER', None))))
마지막으로 'value' 열의 이름을 '값'으로 바꿔줍니다.
그리고 ttm이 0일 때 값들에 nan혹은 inf가 생깁니다.
sql은 그러한 값은 저장 못하므로 None로 바꿔줍니다.
kor_fs_merge.rename(columns={'value': '값'}, inplace=True)
kor_fs_merge = kor_fs_merge[['종목코드', '기준일', '지표', '값']]
kor_fs_merge = kor_fs_merge.replace([np.inf, -np.inf, np.nan], None)
이제 sql에 저장해줍니다.
#sql에 저장
query = """
insert into kor_value (종목코드, 기준일, 지표, 값)
values (%s, %s, %s, %s) as new
on duplicate key update
값 = new.값
"""
args_fs = kor_fs_merge.values.tolist()
mycursor.executemany(query, args_fs)
con.commit()
sql로 돌아가서 확인해 보시면 데이터가 저장되어 있을 것입니다.
'파이썬으로 퀀트 프로그램 만들기 project' 카테고리의 다른 글
비트코인 차트에 코사인 유사도 접목하기 (2) | 2024.02.08 |
---|---|
Ta-lib를 통해 기술적 지표 계산하기 - 이동평균, RSI, 볼린저밴드 (0) | 2023.10.16 |
(Python)국내 주식 가치 지표 계산하기_1 (0) | 2023.10.16 |
한국투자증권 api 사용하기_2 (2) | 2023.10.05 |
한국투자증권 api 사용하기_1 (0) | 2023.09.28 |