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