make-quant-py/example/13-kor-value-portfolio.py

32 lines
1.0 KiB
Python

import pandas as pd
import numpy as np
import quantcommon
#가치주 포트폴리오. PER, PBR이 낮은 회사 20개
# DB 연결
engine = quantcommon.QuantCommon().create_engine()
ticker_list = pd.read_sql("""
select * from kor_ticker
where 기준일 = (select max(기준일) from kor_ticker)
and 종목구분 = '보통주';
""", con=engine)
value_list = pd.read_sql("""
select * from kor_value
where 기준일 = (select max(기준일) from kor_value);
""", con=engine)
engine.dispose()
value_list.loc[value_list[''] <= 0, ''] = np.nan
value_pivot = value_list.pivot(index='종목코드', columns='지표', values='')
data_bind = ticker_list[['종목코드', '종목명']].merge(value_pivot,
how='left',
on='종목코드')
# print(data_bind.head())
value_rank = data_bind[['PER', 'PBR']].rank(axis = 0)
value_sum = value_rank.sum(axis = 1, skipna = False).rank()
print(data_bind.loc[value_sum <= 20, ['종목코드', '종목명', 'PER', 'PBR']])