diff --git a/requirements.txt b/requirements.txt index 2e97658..59171d6 100644 --- a/requirements.txt +++ b/requirements.txt @@ -3,7 +3,6 @@ attrs==25.3.0 bcrypt==4.3.0 beautifulsoup4==4.13.3 blinker==1.9.0 -bt==1.1.0 cachetools==5.5.2 captcha==0.7.1 certifi==2025.1.31 diff --git a/src/backtest/engine.py b/src/backtest/engine.py index 63e27af..e1ab076 100644 --- a/src/backtest/engine.py +++ b/src/backtest/engine.py @@ -1,48 +1,48 @@ -import bt -import matplotlib.pyplot as plt - -import pandas as pd - -from db.common import DBManager -import streamlit_quant.strategy.multi_factor as multi_factor -import streamlit_quant.strategy.magic_formula as magic_formula - - -qc = DBManager() -mf = multi_factor.get_multi_factor_top(qc, 20) -magic_formula = magic_formula.get_magic_formula_top(20) - -codes = ','.join(magic_formula['종목코드'].array) -price = qc.get_price_list_by_code(codes) - -# price = price.set_index(['날짜']) -# price.rename(columns={"날짜": "Date"}) -price["Date"] = pd.to_datetime(price["날짜"]) - -pivot_df = price.pivot(index="Date", columns="종목코드", values="종가") - -# print(pivot_df.tail) - -strategy = bt.Strategy("Asset_EW", [ - bt.algos.SelectAll(), # 모든 데이터 사용 - bt.algos.WeighEqually(), # 동일 비중 투자 - bt.algos.RunMonthly(), # 매 월말 리밸런싱 - bt.algos.Rebalance() # 계산된 비중에 따라 리밸런싱 -]) - -# 가격 데이터 중 시작 시점이 모두 다르므로, dropna() 함수를 통해 NA를 모두 제거하여 시작 시점을 맞춤 -pivot_df.dropna(inplace=True) - -# 백테스트 생성 -backtest = bt.Backtest(strategy, pivot_df) - -# 백테스트 실행 -result = bt.run(backtest) -# prices: 누적 수익률이 데이터프레임 형태로 나타나며, 시작 시점을 100으로 환산하여 계산 -# to_returns: 수익률 계산 -# print(result.prices.to_returns()) - -result.plot(figsize=(10, 6), legend=False) -plt.show() - -result.display() \ No newline at end of file +# import bt +# import matplotlib.pyplot as plt +# +# import pandas as pd +# +# from db.common import DBManager +# import streamlit_quant.strategy.multi_factor as multi_factor +# import streamlit_quant.strategy.magic_formula as magic_formula +# +# +# qc = DBManager() +# mf = multi_factor.get_multi_factor_top(qc, 20) +# magic_formula = magic_formula.get_magic_formula_top(20) +# +# codes = ','.join(magic_formula['종목코드'].array) +# price = qc.get_price_list_by_code(codes) +# +# # price = price.set_index(['날짜']) +# # price.rename(columns={"날짜": "Date"}) +# price["Date"] = pd.to_datetime(price["날짜"]) +# +# pivot_df = price.pivot(index="Date", columns="종목코드", values="종가") +# +# # print(pivot_df.tail) +# +# strategy = bt.Strategy("Asset_EW", [ +# bt.algos.SelectAll(), # 모든 데이터 사용 +# bt.algos.WeighEqually(), # 동일 비중 투자 +# bt.algos.RunMonthly(), # 매 월말 리밸런싱 +# bt.algos.Rebalance() # 계산된 비중에 따라 리밸런싱 +# ]) +# +# # 가격 데이터 중 시작 시점이 모두 다르므로, dropna() 함수를 통해 NA를 모두 제거하여 시작 시점을 맞춤 +# pivot_df.dropna(inplace=True) +# +# # 백테스트 생성 +# backtest = bt.Backtest(strategy, pivot_df) +# +# # 백테스트 실행 +# result = bt.run(backtest) +# # prices: 누적 수익률이 데이터프레임 형태로 나타나며, 시작 시점을 100으로 환산하여 계산 +# # to_returns: 수익률 계산 +# # print(result.prices.to_returns()) +# +# result.plot(figsize=(10, 6), legend=False) +# plt.show() +# +# result.display() \ No newline at end of file