Portfolio Backtest ExampleΒΆ
This example shows how to write and execute a PortfolioBacktest
Python source code: ../../examples/portfolio_backtest.py
import boatwright
from boatwright.Data.Collection.Historical import AlpacaCollector
from boatwright import PortfolioBacktest
from boatwright.Brokers import BacktestBroker
from MACD import MACD
from datetime import datetime
import matplotlib.pyplot as plt
# 1. Define the Strategy and portfolio split
strategy = MACD(fast_period=7, slow_period=14, symbol=None)
symbols = ["AAPL", "MSFT", "GOOGL", "AMZN", "AMD", "NVDA", "INTC"]
split_dict={"AAPL":.1, "MSFT":.1, "GOOGL":.1, "AMZN":.1, "AMD":.2, "NVDA":.2, "INTC":.2} # split_dict must sum to 1 or less
# 2. If you haven't already, collect the historical data:
start = datetime(year=2023, month=6, day=1, hour=1, minute=0)
end = datetime(year=2023, month=12, day=1, hour=12, minute=0)
granularity_unit="DAY"
collector = AlpacaCollector()
database = boatwright.Data.CSVdatabase(source="ALPACA", debug=False)
for sym in symbols:
data = collector.collect(sym, start, end, granularity_unit, verbose=True) # retrieves data via Alpaca API
database.save(sym, data, granularity_unit, verbose=False) # saves data as .csv files
# 3. load and organize the data into a dict
data_dict = {}
for sym in symbols:
data_dict[sym] = database.load(symbol=sym, start=start, end=end, prerequisite_data_length=strategy.calc_prerequisite_data_length(), granularity=1, granularity_unit=granularity_unit, verbose=False)
# 4. Instatiate and run the PortfoilioBacktest
broker=BacktestBroker(taker_fee=0, maker_fee=0, slippage=0, quote_symbol="USD", starting_aum=1000)
portfolio = PortfolioBacktest(data_dict, strategy_dict=strategy, broker_dict=broker)
portfolio.divide_portfolio(split_dict=split_dict, starting_aum=10000)
portfolio.run(verbose=True)
# 5 Analyze results
boatwright.Visualization.plot_portfolio(portfolio)
plt.show()
![../_images/portfolio_backtest.png](../_images/portfolio_backtest.png)