From 4f25956fe0f626a06d8102942420a8ca8cd9d645 Mon Sep 17 00:00:00 2001 From: ayuriel Date: Fri, 31 Jan 2025 22:51:00 +0900 Subject: [PATCH] =?UTF-8?q?feat:=2013=EC=9E=A5=20=EA=B0=80=EC=B9=98?= =?UTF-8?q?=EC=A3=BC=20=ED=8F=AC=ED=8A=B8=ED=8F=B4=EB=A6=AC=EC=98=A4=20?= =?UTF-8?q?=EA=B3=84=EC=82=B0=20=EC=B6=94=EA=B0=80(=20PER,PBR=EC=9D=B4=20?= =?UTF-8?q?=EB=82=AE=EC=9D=80=20=ED=9A=8C=EC=82=AC=2020=EA=B0=9C)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- example/13-kor-value-portfolio.py | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 example/13-kor-value-portfolio.py diff --git a/example/13-kor-value-portfolio.py b/example/13-kor-value-portfolio.py new file mode 100644 index 0000000..b870b16 --- /dev/null +++ b/example/13-kor-value-portfolio.py @@ -0,0 +1,31 @@ +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']])