From 5d204e0bba42819ccde1bcd120e6e0227458f418 Mon Sep 17 00:00:00 2001 From: Ayuriel Date: Mon, 31 Mar 2025 16:48:22 +0900 Subject: [PATCH] =?UTF-8?q?chore:=20=EB=B0=B1=ED=85=8C=EC=8A=A4=ED=8A=B8?= =?UTF-8?q?=20=EC=BD=94=EB=93=9C=20=EC=A3=BC=EC=84=9D=20=EB=B0=8F=20bt=20?= =?UTF-8?q?=EB=9D=BC=EC=9D=B4=EB=B8=8C=EB=9F=AC=EB=A6=AC=20=EC=A0=9C?= =?UTF-8?q?=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- requirements.txt | 1 - src/backtest/engine.py | 96 +++++++++++++++++++++--------------------- 2 files changed, 48 insertions(+), 49 deletions(-) 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