From 10a0918d538c361c50ad720fa439d60ab5524bda Mon Sep 17 00:00:00 2001 From: Camilo1704 Date: Thu, 30 Jan 2020 16:25:44 -0300 Subject: [PATCH] monthly rebalancing and first BDM --- asset_backtester/backtester.py | 19 ++++++++----------- 1 file changed, 8 insertions(+), 11 deletions(-) diff --git a/asset_backtester/backtester.py b/asset_backtester/backtester.py index e4c4fcd..868acd8 100644 --- a/asset_backtester/backtester.py +++ b/asset_backtester/backtester.py @@ -1,7 +1,6 @@ import pandas as pd import numpy as np import pyprind - from strategy.strategy import Strategy @@ -29,7 +28,7 @@ class Backtest: def data(self, data): self._data = data - def run(self, initial_capital=1_000_000): + def run(self, initial_capital=1_000_000, periods='1'): assert self._data is not None assert self._strategy is not None @@ -41,11 +40,9 @@ class Backtest: data_iterator = self._data.iter_dates() monthly_iterator = self._data.iter_months() - - rebalancing_days = [] - for date, _ in monthly_iterator: - rebalancing_days.append(date) - + + rebalancing_days = pd.date_range(self._data['date'].iloc[0], self._data['date'].iloc[-1], freq=periods + 'BMS').to_pydatetime() + bar = pyprind.ProgBar(data_iterator.ngroups, bar_char='█') self.balance = pd.DataFrame( @@ -56,12 +53,12 @@ class Backtest: index=[self.data.start_date - pd.Timedelta(1, unit='day')]) for date, stocks in data_iterator: - + if date == self._data._data['date'][0]: + self.rebalance_portfolio(stocks) + self._update_balance(date, stocks) + if date in rebalancing_days: self.rebalance_portfolio(stocks) - - self._update_balance(date, stocks) - bar.update() self.balance['% change'] = self.balance['capital'].pct_change()