Files
trade-strats/backtest.py
ALIHAN DIKEL f871c22f3e init commit
2024-02-05 20:53:49 +03:00

56 lines
1.4 KiB
Python

import numpy as np
from backtesting import Backtest
from loguru import logger
from ops.portfolio import PortfolioLoader
from ops.fetch import DataFetcher
from ops.strategy import PCTrader
# prepare historical data
data_fetcher = DataFetcher()
_, dfs_ohlc = data_fetcher.load_from_pickle()
# prepare portfoliio
portf_loader = PortfolioLoader(path="config/portfolios.yml")
portfolios = portf_loader.load_from_yaml()
portfolio = portfolios["backtest_portf"]
# start backtesting
final_equities = []
optims = []
for stock in portfolio.stocks:
logger.debug(f"backtesting for: {stock.symbol}.IS")
data = dfs_ohlc[f"{stock.symbol}.IS"]
bt = Backtest(data, PCTrader, cash=10000, commission=.002)
stats = bt.run()
stats, heatmap = bt.optimize(
pct=range(1, 5, 1),
maximize='Equity Final [$]',
max_tries=200,
random_state=0,
return_heatmap=True)
optims.append((stats, heatmap))
#bt.plot(filename=f"data/bt_plots/{stock.symbol}")
#final_equities.append(stats.get('Equity Final [$]'))
final_equities = np.array(final_equities)
#print(stats['_trades'].to_string())
# n_enter=range(15, 35, 5),
# n_exit=range(10, 25, 5),
# constraint=lambda p: p.pct,
"""
# prepare strategy
strat_loader = StrategyLoader(path="config/strategies.yml")
strategy = strat_loader.load_from_yaml(name="PercentChange")
"""
# run backtest