From e6939a57ae583395b65cec613d1b8fc68c58cd9a Mon Sep 17 00:00:00 2001 From: ayuriel Date: Fri, 31 Jan 2025 23:03:44 +0900 Subject: [PATCH] =?UTF-8?q?feat:=2013=EC=9E=A5=20=EB=AA=A8=EB=A9=98?= =?UTF-8?q?=ED=85=80=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(12=EA=B0=9C=EC=9B=94=20?= =?UTF-8?q?=EC=88=98=EC=9D=B5=EB=A5=A0=EC=9D=B4=20=EB=86=92=EC=9D=80=20?= =?UTF-8?q?=EC=A3=BC=EC=8B=9D=2020=EA=B0=9C)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- example/13-kor-momentum-portfolio.py | 54 ++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) create mode 100644 example/13-kor-momentum-portfolio.py diff --git a/example/13-kor-momentum-portfolio.py b/example/13-kor-momentum-portfolio.py new file mode 100644 index 0000000..82d3da1 --- /dev/null +++ b/example/13-kor-momentum-portfolio.py @@ -0,0 +1,54 @@ +import pandas as pd +import matplotlib.pyplot as plt +import seaborn as sns +import quantcommon + +# 모멘텀 포트폴리오. 최근 12개월 수익률이 높은 주식 +engine = quantcommon.QuantCommon().create_engine() + +ticker_list = pd.read_sql( +""" +select * from kor_ticker +where 기준일 = (select max(기준일) from kor_ticker) + and 종목구분 = '보통주'; +""", con=engine) + + +price_list = pd.read_sql( +""" +select 날짜, 종가, 종목코드 +from kor_price +where 날짜 >= (select (select max(날짜) from kor_price) - interval 1 year); +""", con=engine) + +engine.dispose() + +price_pivot = price_list.pivot(index='날짜', columns='종목코드', values='종가') + +ret_list = pd.DataFrame(data=(price_pivot.iloc[-1] / price_pivot.iloc[0]) - 1, + columns=['return']) +data_bind = ticker_list[['종목코드', '종목명']].merge(ret_list, how='left', on='종목코드') + +momentum_rank = data_bind['return'].rank(axis=0, ascending=False) + +price_momentum = price_list[price_list['종목코드'].isin( + data_bind.loc[momentum_rank <= 20, '종목코드'])] + +plt.rc('font', family='Malgun Gothic') +g = sns.relplot(data=price_momentum, + x='날짜', + y='종가', + col='종목코드', + col_wrap=5, + kind='line', + facet_kws={ + 'sharey': False, + 'sharex': True + }) +g.set(xticklabels=[]) +g.set(xlabel=None) +g.set(ylabel=None) +g.fig.set_figwidth(15) +g.fig.set_figheight(8) +plt.subplots_adjust(wspace=0.5, hspace=0.2) +plt.show() \ No newline at end of file