56 lines
1.4 KiB
Python
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
|