From 1788d47256fa7084dc144e57a448cdd315a3b06e Mon Sep 17 00:00:00 2001 From: Diogo Matos Chaves Date: Sat, 10 Feb 2024 21:39:28 -0300 Subject: [PATCH] Refactor returns calculation with leverage --- stratestic/backtesting/_mixin.py | 15 +- .../helpers/evaluation/_constants.py | 14 +- .../helpers/evaluation/_results.py | 8 +- .../backtesting/helpers/evaluation/metrics.py | 8 - .../backtesting/helpers/margin/_margin.py | 6 - .../backtesting/helpers/plotting/_plotting.py | 2 + stratestic/backtesting/helpers/trade.py | 8 +- .../backtesting/iterative/_iterative.py | 69 +-- .../backtesting/vectorized/_vectorized.py | 18 +- stratestic/utils/helpers/_helpers.py | 26 +- .../combining/in/2_strategies_iterative.py | 2 +- .../combining/in/3_strategies_iterative.py | 4 +- .../combining/out/1_strategy_iterative.py | 30 +- .../combining/out/1_strategy_vectorized.py | 30 +- .../combining/out/2_strategies_iterative.py | 30 +- .../combining/out/2_strategies_vectorized.py | 30 +- .../combining/out/3_strategies_iterative.py | 60 +-- .../combining/out/3_strategies_vectorized.py | 32 +- .../combining/test_strategy_combiner.py | 4 +- .../helpers/test_backtest_metrics.py | 27 +- .../out/bollinger_bands_trading_costs.py | 91 ++-- .../out/momentum_no_trading_costs.py | 86 ++-- .../moving_average_crossover_trading_costs.py | 67 +-- .../bollinger_bands_trading_costs.py | 235 +++++----- .../out_margin/momentum_no_trading_costs.py | 236 +++++----- .../moving_average_crossover_trading_costs.py | 148 +++--- tests/backtesting/iterative/test_iterative.py | 1 + .../iterative/test_iterative_with_margin.py | 26 +- .../out/bollinger_bands_trading_costs.py | 85 ++-- .../out/momentum_no_trading_costs.py | 88 ++-- .../vectorized/out/momentum_trading_costs.py | 96 ++-- ...convergence_divergence_no_trading_costs.py | 45 +- .../moving_average_crossover_trading_costs.py | 57 ++- .../out/moving_average_no_trading_costs.py | 37 +- .../bollinger_bands_no_trading_costs.py | 402 +++++++++++++--- .../bollinger_bands_trading_costs.py | 391 ++++++++++++++-- .../out_margin/momentum_no_trading_costs.py | 420 ++++++++++++++--- .../out_margin/momentum_trading_costs.py | 434 ++++++++++++++---- ...convergence_divergence_no_trading_costs.py | 192 ++++++-- .../moving_average_crossover_trading_costs.py | 275 ++++++++--- .../moving_average_no_trading_costs.py | 354 +++++++++++--- .../backtesting/vectorized/test_vectorized.py | 1 + .../vectorized/test_vectorized_with_margin.py | 54 +-- 43 files changed, 3005 insertions(+), 1239 deletions(-) diff --git a/stratestic/backtesting/_mixin.py b/stratestic/backtesting/_mixin.py index 7e30f50..832b5e8 100644 --- a/stratestic/backtesting/_mixin.py +++ b/stratestic/backtesting/_mixin.py @@ -263,7 +263,8 @@ def maximum_leverage(self, margin_threshold=None): if margin_threshold is not None: self.set_margin_threshold(margin_threshold) - self._load_symbol_data() + self.include_margin = True + self._load_leverage_brackets() left_limit, right_limit = self.leverage_limits @@ -374,6 +375,9 @@ def _adapt_optimization_input(self, params): def _sanitize_equity(self, df, trades): + if len(trades) == 0: + return df + trades_df = pd.DataFrame(trades) # Bring equity to 0 if a trade has gotten to zero equity @@ -401,6 +405,8 @@ def _sanitize_trades(data, trades): trades_df = trades_df[trades_df.index < no_equity[0]].copy() + trades_df["pnl"] = np.where(trades_df["pnl"] < -1, -1, trades_df["pnl"]) + return [Trade(**row) for _, row in trades_df.reset_index().iterrows()] @staticmethod @@ -413,6 +419,13 @@ def _sanitize_margin_ratio(df): return df + def _calculate_strategy_returns(self, df): + df[STRATEGY_RETURNS_TC] = np.log(df['equity'] / df['equity'].shift(1)).fillna(0) + df[STRATEGY_RETURNS] = df[STRATEGY_RETURNS_TC] + df["trades"] * self.tc + df.loc[df.index[0], STRATEGY_RETURNS] = 0 + + return df + def _calculate_cumulative_returns(self, data): data[BUY_AND_HOLD] = data[self.returns_col].cumsum().apply(np.exp).fillna(1) data[CUM_SUM_STRATEGY_TC] = data[STRATEGY_RETURNS_TC].cumsum().apply(np.exp).fillna(1) diff --git a/stratestic/backtesting/helpers/evaluation/_constants.py b/stratestic/backtesting/helpers/evaluation/_constants.py index 96528d0..34f5735 100644 --- a/stratestic/backtesting/helpers/evaluation/_constants.py +++ b/stratestic/backtesting/helpers/evaluation/_constants.py @@ -16,10 +16,10 @@ "accumulated_strategy_returns_tc": "Strategy returns (with trading costs)" } results_mapping = { - 'initial_equity': lambda unit: f"Traded Initial Amount [{unit}]", - 'exposed_capital': lambda unit: f"Exposed Capital [{unit}]", - 'equity_final': lambda unit: f"Equity Final [{unit}]", - 'equity_peak': lambda unit: f"Equity Peak [{unit}]", + 'traded_amount': lambda unit: f"Traded Amount [{unit}]", + 'equity_initial': lambda unit: f"Equity - Initial [{unit}]", + 'equity_final': lambda unit: f"Equity - Final [{unit}]", + 'equity_peak': lambda unit: f"Equity - Peak [{unit}]", 'trading_costs': "Trading Costs [%]", 'leverage': "Leverage [x]", 'buy_and_hold_return': "Buy & Hold Return [%]", @@ -57,9 +57,9 @@ } results_sections = { - 'Overview': ['total_duration', 'start_date', 'end_date', 'trading_costs', - 'leverage', 'initial_equity', 'exposed_capital', 'exposure_time'], - 'Returns': ['return_pct', 'equity_final', 'equity_peak', 'return_pct_annualized', + 'Overview': ['total_duration', 'start_date', 'end_date', 'trading_costs', 'exposure_time', + 'leverage', 'equity_initial', 'equity_final', 'equity_peak'], + 'Returns': ['return_pct', 'return_pct_annualized', 'volatility_pct_annualized', 'buy_and_hold_return', ], 'Drawdowns': ['max_drawdown', 'avg_drawdown', 'max_drawdown_duration', 'avg_drawdown_duration'], 'Trades': ['nr_trades', 'win_rate', 'best_trade', 'worst_trade', 'avg_trade', diff --git a/stratestic/backtesting/helpers/evaluation/_results.py b/stratestic/backtesting/helpers/evaluation/_results.py index c087665..15d5ad0 100644 --- a/stratestic/backtesting/helpers/evaluation/_results.py +++ b/stratestic/backtesting/helpers/evaluation/_results.py @@ -42,8 +42,8 @@ def get_overview_results(results, data, leverage, trading_costs, amount): if trading_costs is not None: results["trading_costs"] = trading_costs * 100 - results["initial_equity"] = amount * leverage - results["exposed_capital"] = results["initial_equity"] + results["equity_initial"] = amount + results["traded_amount"] = amount * leverage if SIDE in data: results["exposure_time"] = exposure_time(data[SIDE]) @@ -106,7 +106,7 @@ def get_ratios_results(results, data, trades, trading_days): def log_results(results, backtesting=True): - length = 55 + length = 60 logging.info("") @@ -142,7 +142,7 @@ def log_results(results, backtesting=True): except TypeError: value = str(value) - logging.info(f'{printed_title:<30}{value.rjust(25)}') + logging.info(f'{printed_title:<30}{value.rjust(30)}') logging.info('-' * length) logging.info('') logging.info('*' * length) diff --git a/stratestic/backtesting/helpers/evaluation/metrics.py b/stratestic/backtesting/helpers/evaluation/metrics.py index 3199a97..4b257e9 100644 --- a/stratestic/backtesting/helpers/evaluation/metrics.py +++ b/stratestic/backtesting/helpers/evaluation/metrics.py @@ -21,10 +21,6 @@ def get_end_date(close_date: pd.Series) -> datetime: return close_date[-1] -def calculate_multiple(cum_returns: pd.Series, leverage: int = 1) -> float: - return cum_returns[-1] / cum_returns[0] * leverage - - def exposure_time(positions: np.ndarray) -> float: """Calculate the percentage of time the strategy was exposed to the market.""" return np.count_nonzero(positions) / len(positions) * 100 @@ -223,10 +219,6 @@ def win_rate_pct(trades: List[Trade]) -> float: return winning_trades / nr_trades * 100 if nr_trades > 0 else 0 -def calculate_pnl(trade): - return np.exp(np.log(trade.exit_price / trade.entry_price) * trade.side) - 1 - - def best_trade_pct(trades: List[Trade]) -> float: """Calculate the percentage of the best trade.""" diff --git a/stratestic/backtesting/helpers/margin/_margin.py b/stratestic/backtesting/helpers/margin/_margin.py index c1a7e09..ed219fc 100644 --- a/stratestic/backtesting/helpers/margin/_margin.py +++ b/stratestic/backtesting/helpers/margin/_margin.py @@ -26,18 +26,12 @@ def get_maintenance_margin_binance(): Internal function for calculating maintenance margin for Binance exchange. """ - # values = pd.concat([pd.DataFrame(notional_value).T] * len(notional_value)).T - # - # triangular_matrix = pd.DataFrame(np.tril(values)) - values = pd.Series(notional_value) comparison = pd.DataFrame() for i, notional_floor in enumerate(symbol_brackets['notionalFloor']): comparison[i] = values >= notional_floor - # greater_than = triangular_matrix.gt(symbol_brackets["notionalFloor"], axis=1) - indexes = comparison.idxmin(axis=1) - 1 brackets = symbol_brackets.iloc[indexes, :] diff --git a/stratestic/backtesting/helpers/plotting/_plotting.py b/stratestic/backtesting/helpers/plotting/_plotting.py index ed6eb80..1fc5496 100644 --- a/stratestic/backtesting/helpers/plotting/_plotting.py +++ b/stratestic/backtesting/helpers/plotting/_plotting.py @@ -258,6 +258,8 @@ def size_trade_markers(notional_value, min_marker_size=10, max_marker_size=35): normalized = (notional_value - min_value) / (max_value - min_value) + normalized = pd.Series(np.where(normalized, np.isnan(normalized), 0.5)) + marker_size = min_marker_size + normalized * (max_marker_size - min_marker_size) return marker_size diff --git a/stratestic/backtesting/helpers/trade.py b/stratestic/backtesting/helpers/trade.py index 6569f02..d429fb3 100644 --- a/stratestic/backtesting/helpers/trade.py +++ b/stratestic/backtesting/helpers/trade.py @@ -32,17 +32,19 @@ class Trade: exit_price: float units: float side: int - equity: float + equity: float = None amount: float = None profit: float = None pnl: float = None liquidation_price: float = None + maintenance_rate: float = None + maintenance_amount: float = None - def calculate_profit(self, prev_amount): + def calculate_profit(self, prev_equity): if self.amount is None: return - self.profit = self.amount - prev_amount + self.profit = self.equity - prev_equity def calculate_pnl_pct(self, leverage): self.pnl = (np.exp(np.log(self.exit_price / self.entry_price) * self.side) - 1) * leverage diff --git a/stratestic/backtesting/iterative/_iterative.py b/stratestic/backtesting/iterative/_iterative.py index 8f56b50..f5c36f2 100644 --- a/stratestic/backtesting/iterative/_iterative.py +++ b/stratestic/backtesting/iterative/_iterative.py @@ -104,20 +104,11 @@ def _reset_object(self, symbol): self.margin_ratios = [] self.nr_trades = 0 self.trades = [] + self.initial_balance = self.amount * self.leverage self.current_balance = self.initial_balance + self.current_equity = self.amount self.units = 0 - def _get_trades(self, _): - """ - Gets the number of trades executed. - - Returns - ------- - int - The number of trades executed. - """ - return self.nr_trades - def _get_price(self, _, row): """ Gets the price for the given row. @@ -238,22 +229,24 @@ def _perform_iteration(self, data, print_results): trades = np.abs(signal - previous_position) if self.include_margin: - new_trade = trades >= 1 and previous_position != 0 + new_trade = trades >= 1 self._calculate_margin_ratio(row, new_trade) - self.strategy_returns[self.symbol].append(row[self.returns_col] * previous_position) - self.strategy_returns_tc[self.symbol].append(self.strategy_returns[self.symbol][-1] - trades * self.tc) + strategy_return = row[self.returns_col] * previous_position - trades * self.tc - pnl = (np.exp(self.strategy_returns_tc[self.symbol][-1]) - 1) * amount + simple_return = np.exp(strategy_return) - 1 + + pnl = simple_return * amount equity = equity + pnl + + self.equity.append(equity) + if trades >= 1 and previous_position != 0: amount = equity * self.leverage else: amount = amount + pnl - self.equity.append(equity) - def _iterative_backtest(self, data, print_results=True): """ Iterate through the data, trade accordingly, and calculate the strategy's performance. @@ -282,6 +275,7 @@ def _iterative_backtest(self, data, print_results=True): data = self._sanitize_margin_ratio(data) data = self._sanitize_equity(data, self.trades) + data = self._add_trades_rows(data) data = self._calculate_strategy_returns(data) data = self._calculate_cumulative_returns(data) trades = self._sanitize_trades(data, self.trades) @@ -289,9 +283,9 @@ def _iterative_backtest(self, data, print_results=True): return data, trades @staticmethod - def _calculate_strategy_returns(data): - data[STRATEGY_RETURNS_TC] = np.log(data['equity'] / data['equity'].shift(1)).fillna(0) - data[STRATEGY_RETURNS] = data[STRATEGY_RETURNS_TC].copy() + def _add_trades_rows(data): + data["trades"] = np.abs(data[SIDE].diff()) + data.loc[data.index[0], "trades"] = np.abs(data.loc[data.index[0], SIDE] - 0) return data @@ -310,8 +304,8 @@ def _calculate_margin_ratio(self, row, new_trade): trade.side, trade.entry_price, mark_price, - self.maintenance_rate, - self.maintenance_amount, + trade.maintenance_rate, + trade.maintenance_amount, exchange=self.exchange ) @@ -332,25 +326,6 @@ def _evaluate_backtest(self, data, trades): return results, self.nr_trades, perf, outperf - def _get_net_value(self, row): - """ - Calculate the current net value of the strategy. - - Parameters - ---------- - row : pandas.Series - The current row of the data being processed. - - Returns - ------- - float - The current net value of the strategy. - - """ - price = self._get_price("", row) - - return self.current_balance + self.units * price - def buy_instrument( self, symbol, @@ -541,7 +516,8 @@ def close_pos(self, symbol, date=None, row=None, header='', **kwargs): def _handle_trade(self, trades, open_trade, date, price, units, equity, amount, side): if open_trade: - liquidation_price = None + + trades.append(Trade(date, None, price, None, units, side)) if self.include_margin: @@ -551,9 +527,6 @@ def _handle_trade(self, trades, open_trade, date, price, units, equity, amount, self._symbol_bracket, [notional_value], exchange=self.exchange ) - self.maintenance_rate = maintenance_rate[0] - self.maintenance_amount = maintenance_amount[0] - liquidation_price = calculate_liquidation_price( units, price, @@ -564,14 +537,16 @@ def _handle_trade(self, trades, open_trade, date, price, units, equity, amount, exchange=self.exchange )[0] - trades.append(Trade(date, None, price, None, units, side, None, None, None, None, liquidation_price)) + trades[-1].liquidation_price = liquidation_price + trades[-1].maintenance_rate = maintenance_rate[0] + trades[-1].maintenance_amount = maintenance_amount[0] else: trades[-1].exit_date = date trades[-1].exit_price = price trades[-1].equity = equity trades[-1].amount = amount - trades[-1].calculate_profit(trades[-2].amount if len(trades) >= 2 else self.amount * self.leverage) + trades[-1].calculate_profit(trades[-2].equity if len(trades) >= 2 else self.amount) trades[-1].calculate_pnl_pct(self.leverage) self.nr_trades += 1 diff --git a/stratestic/backtesting/vectorized/_vectorized.py b/stratestic/backtesting/vectorized/_vectorized.py index d99e070..0171acf 100644 --- a/stratestic/backtesting/vectorized/_vectorized.py +++ b/stratestic/backtesting/vectorized/_vectorized.py @@ -146,6 +146,10 @@ def process_leveraged_returns(self, processed_data, trades_df): df.loc[df.index[0], self.returns_col] = 0 + if len(trades_df) == 0: + df["equity"] = 0 + return df + df_filter = (df.trades != 0) & (df.side != 0) df.loc[df[df_filter].index, 'notional_value'] = trades_df["equity"].shift(1).values @@ -161,9 +165,6 @@ def process_leveraged_returns(self, processed_data, trades_df): amount = self.amount * self.leverage for index, row in df.iterrows(): - if index == Timestamp("2023-02-13 00:00:00"): - a = 1 - pnl = (np.exp(row[STRATEGY_RETURNS_TC]) - 1) * amount equity = equity + pnl @@ -181,13 +182,6 @@ def process_leveraged_returns(self, processed_data, trades_df): return df - def _calculate_strategy_returns(self, df): - df[STRATEGY_RETURNS_TC] = np.log(df['equity'] / df['equity'].shift(1)).fillna(0) - df[STRATEGY_RETURNS] = df[STRATEGY_RETURNS_TC] + df["trades"] * self.tc - df.loc[df.index[0], STRATEGY_RETURNS] = 0 - - return df - def _retrieve_trades(self, processed_data, trading_costs=0): """ Computes the trades made based on the input processed data and returns a list of Trade objects. @@ -255,7 +249,7 @@ def _retrieve_trades(self, processed_data, trading_costs=0): equity = self.amount for index, trade in trades.iterrows(): - pnl = (np.exp(trade["log_return"]) - 1) * self.leverage # - self.tc * 2 * trade[SIDE] + pnl = (np.exp(trade["log_return"]) - 1) * self.leverage equity = equity * (1 + pnl) amount = equity * self.leverage @@ -292,8 +286,6 @@ def _retrieve_trades(self, processed_data, trading_costs=0): exchange=self.exchange ) - columns_to_delete.extend(['maintenance_rate', 'maintenance_amount']) - self._trades_df = trades.copy() trades.drop(columns_to_delete, axis=1, inplace=True) diff --git a/stratestic/utils/helpers/_helpers.py b/stratestic/utils/helpers/_helpers.py index 39d4c34..24f3747 100644 --- a/stratestic/utils/helpers/_helpers.py +++ b/stratestic/utils/helpers/_helpers.py @@ -17,15 +17,17 @@ def clean_docstring(doc): return doc.translate(translator).strip() -def geometric_mean(series: pd.Series) -> float: - series = series.fillna(0) + 1 - - if np.any(series <= 0): - return np.nan - - return np.exp(np.log(series).sum() / (len(series) or np.nan)) - 1 - - -def geometric_mean_2(returns: pd.Series) -> float: - - return (1 + returns).prod()**(1 / len(returns)) - 1 +# def geometric_mean_2(series: pd.Series) -> float: +# series = series.fillna(0) + 1 +# +# if np.any(series <= 0): +# return np.nan +# +# return np.exp(np.log(series).sum() / (len(series) or np.nan)) - 1 + + +def geometric_mean(returns: pd.Series) -> float: + try: + return (1 + returns).prod()**(1 / len(returns)) - 1 + except ZeroDivisionError: + return 0 diff --git a/tests/backtesting/combining/in/2_strategies_iterative.py b/tests/backtesting/combining/in/2_strategies_iterative.py index a1c8505..ca06258 100644 --- a/tests/backtesting/combining/in/2_strategies_iterative.py +++ b/tests/backtesting/combining/in/2_strategies_iterative.py @@ -8,4 +8,4 @@ method = "Unanimous" -backtester = VectorizedBacktester \ No newline at end of file +backtester = VectorizedBacktester diff --git a/tests/backtesting/combining/in/3_strategies_iterative.py b/tests/backtesting/combining/in/3_strategies_iterative.py index 6df3114..8ae81f7 100644 --- a/tests/backtesting/combining/in/3_strategies_iterative.py +++ b/tests/backtesting/combining/in/3_strategies_iterative.py @@ -1,4 +1,4 @@ -from stratestic.backtesting import VectorizedBacktester +from stratestic.backtesting import IterativeBacktester from stratestic.strategies import MovingAverageCrossover, Momentum, BollingerBands strategy_1 = MovingAverageCrossover(2, 6) @@ -9,4 +9,4 @@ method = "Unanimous" -backtester = VectorizedBacktester +backtester = IterativeBacktester diff --git a/tests/backtesting/combining/out/1_strategy_iterative.py b/tests/backtesting/combining/out/1_strategy_iterative.py index 9243912..8bebb76 100644 --- a/tests/backtesting/combining/out/1_strategy_iterative.py +++ b/tests/backtesting/combining/out/1_strategy_iterative.py @@ -16,10 +16,11 @@ "side": 1, "side_1": 1, "strategy_returns": 0.0, - "strategy_returns_tc": -0.001, + "strategy_returns_tc": 0.0, + "equity": 999.000499833375, "accumulated_returns": 1.0, + "accumulated_strategy_returns_tc": 1.0, "accumulated_strategy_returns": 1.0, - "accumulated_strategy_returns_tc": 0.999000499833375, }, { "close_time": Timestamp("2023-09-01 14:34:59.999000+0000", tz="UTC"), @@ -37,9 +38,10 @@ "side_1": 1, "strategy_returns": 0.006818529518377586, "strategy_returns_tc": 0.006818529518377586, + "equity": 1005.8354900403988, "accumulated_returns": 1.0068418286158654, + "accumulated_strategy_returns_tc": 1.0068418286158654, "accumulated_strategy_returns": 1.0068418286158654, - "accumulated_strategy_returns_tc": 1.0058354900403987, }, { "close_time": Timestamp("2023-09-01 14:39:59.999000+0000", tz="UTC"), @@ -57,9 +59,10 @@ "side_1": 1, "strategy_returns": 0.005926179097336494, "strategy_returns_tc": 0.005926179097336494, + "equity": 1011.8139485078926, "accumulated_returns": 1.0128262685320526, + "accumulated_strategy_returns_tc": 1.0128262685320526, "accumulated_strategy_returns": 1.0128262685320526, - "accumulated_strategy_returns_tc": 1.0118139485078925, }, { "close_time": Timestamp("2023-09-01 14:44:59.999000+0000", tz="UTC"), @@ -77,9 +80,10 @@ "side_1": 1, "strategy_returns": -0.00170962942015996, "strategy_returns_tc": -0.00170962942015996, + "equity": 1010.0855994529645, "accumulated_returns": 1.0110961902636069, + "accumulated_strategy_returns_tc": 1.0110961902636069, "accumulated_strategy_returns": 1.0110961902636069, - "accumulated_strategy_returns_tc": 1.0100855994529645, }, { "close_time": Timestamp("2023-09-01 14:49:59.999000+0000", tz="UTC"), @@ -97,9 +101,10 @@ "side_1": 1, "strategy_returns": 0.0003967606653441501, "strategy_returns_tc": 0.0003967606653441501, + "equity": 1010.486441201319, "accumulated_returns": 1.0114974330541975, + "accumulated_strategy_returns_tc": 1.0114974330541975, "accumulated_strategy_returns": 1.0114974330541975, - "accumulated_strategy_returns_tc": 1.010486441201319, }, { "close_time": Timestamp("2023-09-01 14:54:59.999000+0000", tz="UTC"), @@ -117,9 +122,10 @@ "side_1": 1, "strategy_returns": -0.0008209293091875578, "strategy_returns_tc": -0.0008209293091875578, + "equity": 1009.6572436680474, "accumulated_returns": 1.0106674059086556, + "accumulated_strategy_returns_tc": 1.0106674059086556, "accumulated_strategy_returns": 1.0106674059086556, - "accumulated_strategy_returns_tc": 1.0096572436680475, }, { "close_time": Timestamp("2023-09-01 14:59:59.999000+0000", tz="UTC"), @@ -137,9 +143,10 @@ "side_1": 1, "strategy_returns": 0.0006607487960858385, "strategy_returns_tc": 0.0006607487960858385, + "equity": 1010.3245939274208, "accumulated_returns": 1.0113354238520749, + "accumulated_strategy_returns_tc": 1.0113354238520749, "accumulated_strategy_returns": 1.0113354238520749, - "accumulated_strategy_returns_tc": 1.0103245939274208, }, { "close_time": Timestamp("2023-09-01 15:04:59.999000+0000", tz="UTC"), @@ -155,10 +162,11 @@ "returns": 0.0019165664875115606, "side": 0, "side_1": 1, - "strategy_returns": 0.0019165664875115606, - "strategy_returns_tc": 0.0009165664875115606, + "strategy_returns": 0.0019165664875115994, + "strategy_returns_tc": 0.0009165664875115995, + "equity": 1011.2510481052902, "accumulated_returns": 1.0132755740526063, + "accumulated_strategy_returns_tc": 1.0122628049475035, "accumulated_strategy_returns": 1.0132755740526063, - "accumulated_strategy_returns_tc": 1.0112510481052903, }, ] diff --git a/tests/backtesting/combining/out/1_strategy_vectorized.py b/tests/backtesting/combining/out/1_strategy_vectorized.py index 9243912..8bebb76 100644 --- a/tests/backtesting/combining/out/1_strategy_vectorized.py +++ b/tests/backtesting/combining/out/1_strategy_vectorized.py @@ -16,10 +16,11 @@ "side": 1, "side_1": 1, "strategy_returns": 0.0, - "strategy_returns_tc": -0.001, + "strategy_returns_tc": 0.0, + "equity": 999.000499833375, "accumulated_returns": 1.0, + "accumulated_strategy_returns_tc": 1.0, "accumulated_strategy_returns": 1.0, - "accumulated_strategy_returns_tc": 0.999000499833375, }, { "close_time": Timestamp("2023-09-01 14:34:59.999000+0000", tz="UTC"), @@ -37,9 +38,10 @@ "side_1": 1, "strategy_returns": 0.006818529518377586, "strategy_returns_tc": 0.006818529518377586, + "equity": 1005.8354900403988, "accumulated_returns": 1.0068418286158654, + "accumulated_strategy_returns_tc": 1.0068418286158654, "accumulated_strategy_returns": 1.0068418286158654, - "accumulated_strategy_returns_tc": 1.0058354900403987, }, { "close_time": Timestamp("2023-09-01 14:39:59.999000+0000", tz="UTC"), @@ -57,9 +59,10 @@ "side_1": 1, "strategy_returns": 0.005926179097336494, "strategy_returns_tc": 0.005926179097336494, + "equity": 1011.8139485078926, "accumulated_returns": 1.0128262685320526, + "accumulated_strategy_returns_tc": 1.0128262685320526, "accumulated_strategy_returns": 1.0128262685320526, - "accumulated_strategy_returns_tc": 1.0118139485078925, }, { "close_time": Timestamp("2023-09-01 14:44:59.999000+0000", tz="UTC"), @@ -77,9 +80,10 @@ "side_1": 1, "strategy_returns": -0.00170962942015996, "strategy_returns_tc": -0.00170962942015996, + "equity": 1010.0855994529645, "accumulated_returns": 1.0110961902636069, + "accumulated_strategy_returns_tc": 1.0110961902636069, "accumulated_strategy_returns": 1.0110961902636069, - "accumulated_strategy_returns_tc": 1.0100855994529645, }, { "close_time": Timestamp("2023-09-01 14:49:59.999000+0000", tz="UTC"), @@ -97,9 +101,10 @@ "side_1": 1, "strategy_returns": 0.0003967606653441501, "strategy_returns_tc": 0.0003967606653441501, + "equity": 1010.486441201319, "accumulated_returns": 1.0114974330541975, + "accumulated_strategy_returns_tc": 1.0114974330541975, "accumulated_strategy_returns": 1.0114974330541975, - "accumulated_strategy_returns_tc": 1.010486441201319, }, { "close_time": Timestamp("2023-09-01 14:54:59.999000+0000", tz="UTC"), @@ -117,9 +122,10 @@ "side_1": 1, "strategy_returns": -0.0008209293091875578, "strategy_returns_tc": -0.0008209293091875578, + "equity": 1009.6572436680474, "accumulated_returns": 1.0106674059086556, + "accumulated_strategy_returns_tc": 1.0106674059086556, "accumulated_strategy_returns": 1.0106674059086556, - "accumulated_strategy_returns_tc": 1.0096572436680475, }, { "close_time": Timestamp("2023-09-01 14:59:59.999000+0000", tz="UTC"), @@ -137,9 +143,10 @@ "side_1": 1, "strategy_returns": 0.0006607487960858385, "strategy_returns_tc": 0.0006607487960858385, + "equity": 1010.3245939274208, "accumulated_returns": 1.0113354238520749, + "accumulated_strategy_returns_tc": 1.0113354238520749, "accumulated_strategy_returns": 1.0113354238520749, - "accumulated_strategy_returns_tc": 1.0103245939274208, }, { "close_time": Timestamp("2023-09-01 15:04:59.999000+0000", tz="UTC"), @@ -155,10 +162,11 @@ "returns": 0.0019165664875115606, "side": 0, "side_1": 1, - "strategy_returns": 0.0019165664875115606, - "strategy_returns_tc": 0.0009165664875115606, + "strategy_returns": 0.0019165664875115994, + "strategy_returns_tc": 0.0009165664875115995, + "equity": 1011.2510481052902, "accumulated_returns": 1.0132755740526063, + "accumulated_strategy_returns_tc": 1.0122628049475035, "accumulated_strategy_returns": 1.0132755740526063, - "accumulated_strategy_returns_tc": 1.0112510481052903, }, ] diff --git a/tests/backtesting/combining/out/2_strategies_iterative.py b/tests/backtesting/combining/out/2_strategies_iterative.py index ade9b6e..a8444da 100644 --- a/tests/backtesting/combining/out/2_strategies_iterative.py +++ b/tests/backtesting/combining/out/2_strategies_iterative.py @@ -17,10 +17,11 @@ "side_1": 1, "side_2": 1.0, "strategy_returns": 0.0, - "strategy_returns_tc": -0.001, + "strategy_returns_tc": 0.0, + "equity": 999.000499833375, "accumulated_returns": 1.0, + "accumulated_strategy_returns_tc": 1.0, "accumulated_strategy_returns": 1.0, - "accumulated_strategy_returns_tc": 0.999000499833375, }, { "close_time": Timestamp("2023-09-01 14:34:59.999000+0000", tz="UTC"), @@ -39,9 +40,10 @@ "side_2": 1.0, "strategy_returns": 0.006818529518377586, "strategy_returns_tc": 0.006818529518377586, + "equity": 1005.8354900403988, "accumulated_returns": 1.0068418286158654, + "accumulated_strategy_returns_tc": 1.0068418286158654, "accumulated_strategy_returns": 1.0068418286158654, - "accumulated_strategy_returns_tc": 1.0058354900403987, }, { "close_time": Timestamp("2023-09-01 14:39:59.999000+0000", tz="UTC"), @@ -60,9 +62,10 @@ "side_2": 1.0, "strategy_returns": 0.005926179097336494, "strategy_returns_tc": 0.005926179097336494, + "equity": 1011.8139485078926, "accumulated_returns": 1.0128262685320526, + "accumulated_strategy_returns_tc": 1.0128262685320526, "accumulated_strategy_returns": 1.0128262685320526, - "accumulated_strategy_returns_tc": 1.0118139485078925, }, { "close_time": Timestamp("2023-09-01 14:44:59.999000+0000", tz="UTC"), @@ -81,9 +84,10 @@ "side_2": 1.0, "strategy_returns": -0.00170962942015996, "strategy_returns_tc": -0.00170962942015996, + "equity": 1010.0855994529645, "accumulated_returns": 1.0110961902636069, + "accumulated_strategy_returns_tc": 1.0110961902636069, "accumulated_strategy_returns": 1.0110961902636069, - "accumulated_strategy_returns_tc": 1.0100855994529645, }, { "close_time": Timestamp("2023-09-01 14:49:59.999000+0000", tz="UTC"), @@ -102,9 +106,10 @@ "side_2": 1.0, "strategy_returns": 0.0003967606653441501, "strategy_returns_tc": 0.0003967606653441501, + "equity": 1010.486441201319, "accumulated_returns": 1.0114974330541975, + "accumulated_strategy_returns_tc": 1.0114974330541975, "accumulated_strategy_returns": 1.0114974330541975, - "accumulated_strategy_returns_tc": 1.010486441201319, }, { "close_time": Timestamp("2023-09-01 14:54:59.999000+0000", tz="UTC"), @@ -123,9 +128,10 @@ "side_2": 1.0, "strategy_returns": -0.0008209293091875578, "strategy_returns_tc": -0.0008209293091875578, + "equity": 1009.6572436680474, "accumulated_returns": 1.0106674059086556, + "accumulated_strategy_returns_tc": 1.0106674059086556, "accumulated_strategy_returns": 1.0106674059086556, - "accumulated_strategy_returns_tc": 1.0096572436680475, }, { "close_time": Timestamp("2023-09-01 14:59:59.999000+0000", tz="UTC"), @@ -144,9 +150,10 @@ "side_2": 1.0, "strategy_returns": 0.0006607487960858385, "strategy_returns_tc": 0.0006607487960858385, + "equity": 1010.3245939274208, "accumulated_returns": 1.0113354238520749, + "accumulated_strategy_returns_tc": 1.0113354238520749, "accumulated_strategy_returns": 1.0113354238520749, - "accumulated_strategy_returns_tc": 1.0103245939274208, }, { "close_time": Timestamp("2023-09-01 15:04:59.999000+0000", tz="UTC"), @@ -163,10 +170,11 @@ "side": 0, "side_1": 1, "side_2": 1.0, - "strategy_returns": 0.0019165664875115606, - "strategy_returns_tc": 0.0009165664875115606, + "strategy_returns": 0.0019165664875115994, + "strategy_returns_tc": 0.0009165664875115995, + "equity": 1011.2510481052902, "accumulated_returns": 1.0132755740526063, + "accumulated_strategy_returns_tc": 1.0122628049475035, "accumulated_strategy_returns": 1.0132755740526063, - "accumulated_strategy_returns_tc": 1.0112510481052903, }, ] diff --git a/tests/backtesting/combining/out/2_strategies_vectorized.py b/tests/backtesting/combining/out/2_strategies_vectorized.py index ade9b6e..a8444da 100644 --- a/tests/backtesting/combining/out/2_strategies_vectorized.py +++ b/tests/backtesting/combining/out/2_strategies_vectorized.py @@ -17,10 +17,11 @@ "side_1": 1, "side_2": 1.0, "strategy_returns": 0.0, - "strategy_returns_tc": -0.001, + "strategy_returns_tc": 0.0, + "equity": 999.000499833375, "accumulated_returns": 1.0, + "accumulated_strategy_returns_tc": 1.0, "accumulated_strategy_returns": 1.0, - "accumulated_strategy_returns_tc": 0.999000499833375, }, { "close_time": Timestamp("2023-09-01 14:34:59.999000+0000", tz="UTC"), @@ -39,9 +40,10 @@ "side_2": 1.0, "strategy_returns": 0.006818529518377586, "strategy_returns_tc": 0.006818529518377586, + "equity": 1005.8354900403988, "accumulated_returns": 1.0068418286158654, + "accumulated_strategy_returns_tc": 1.0068418286158654, "accumulated_strategy_returns": 1.0068418286158654, - "accumulated_strategy_returns_tc": 1.0058354900403987, }, { "close_time": Timestamp("2023-09-01 14:39:59.999000+0000", tz="UTC"), @@ -60,9 +62,10 @@ "side_2": 1.0, "strategy_returns": 0.005926179097336494, "strategy_returns_tc": 0.005926179097336494, + "equity": 1011.8139485078926, "accumulated_returns": 1.0128262685320526, + "accumulated_strategy_returns_tc": 1.0128262685320526, "accumulated_strategy_returns": 1.0128262685320526, - "accumulated_strategy_returns_tc": 1.0118139485078925, }, { "close_time": Timestamp("2023-09-01 14:44:59.999000+0000", tz="UTC"), @@ -81,9 +84,10 @@ "side_2": 1.0, "strategy_returns": -0.00170962942015996, "strategy_returns_tc": -0.00170962942015996, + "equity": 1010.0855994529645, "accumulated_returns": 1.0110961902636069, + "accumulated_strategy_returns_tc": 1.0110961902636069, "accumulated_strategy_returns": 1.0110961902636069, - "accumulated_strategy_returns_tc": 1.0100855994529645, }, { "close_time": Timestamp("2023-09-01 14:49:59.999000+0000", tz="UTC"), @@ -102,9 +106,10 @@ "side_2": 1.0, "strategy_returns": 0.0003967606653441501, "strategy_returns_tc": 0.0003967606653441501, + "equity": 1010.486441201319, "accumulated_returns": 1.0114974330541975, + "accumulated_strategy_returns_tc": 1.0114974330541975, "accumulated_strategy_returns": 1.0114974330541975, - "accumulated_strategy_returns_tc": 1.010486441201319, }, { "close_time": Timestamp("2023-09-01 14:54:59.999000+0000", tz="UTC"), @@ -123,9 +128,10 @@ "side_2": 1.0, "strategy_returns": -0.0008209293091875578, "strategy_returns_tc": -0.0008209293091875578, + "equity": 1009.6572436680474, "accumulated_returns": 1.0106674059086556, + "accumulated_strategy_returns_tc": 1.0106674059086556, "accumulated_strategy_returns": 1.0106674059086556, - "accumulated_strategy_returns_tc": 1.0096572436680475, }, { "close_time": Timestamp("2023-09-01 14:59:59.999000+0000", tz="UTC"), @@ -144,9 +150,10 @@ "side_2": 1.0, "strategy_returns": 0.0006607487960858385, "strategy_returns_tc": 0.0006607487960858385, + "equity": 1010.3245939274208, "accumulated_returns": 1.0113354238520749, + "accumulated_strategy_returns_tc": 1.0113354238520749, "accumulated_strategy_returns": 1.0113354238520749, - "accumulated_strategy_returns_tc": 1.0103245939274208, }, { "close_time": Timestamp("2023-09-01 15:04:59.999000+0000", tz="UTC"), @@ -163,10 +170,11 @@ "side": 0, "side_1": 1, "side_2": 1.0, - "strategy_returns": 0.0019165664875115606, - "strategy_returns_tc": 0.0009165664875115606, + "strategy_returns": 0.0019165664875115994, + "strategy_returns_tc": 0.0009165664875115995, + "equity": 1011.2510481052902, "accumulated_returns": 1.0132755740526063, + "accumulated_strategy_returns_tc": 1.0122628049475035, "accumulated_strategy_returns": 1.0132755740526063, - "accumulated_strategy_returns_tc": 1.0112510481052903, }, ] diff --git a/tests/backtesting/combining/out/3_strategies_iterative.py b/tests/backtesting/combining/out/3_strategies_iterative.py index 6475d8d..2151bc2 100644 --- a/tests/backtesting/combining/out/3_strategies_iterative.py +++ b/tests/backtesting/combining/out/3_strategies_iterative.py @@ -9,7 +9,7 @@ "close": 55552.4, "volume": 149.363426, "quote_volume": 8288967.03877351, - "trades": 0, + "trades": 0.0, "taker_buy_asset_volume": 82.67909, "taker_buy_quote_volume": 4588065.23181743, "returns": 0.0, @@ -17,11 +17,12 @@ "side_1": 1, "side_2": 1.0, "side_3": -1.0, - "strategy_returns": 0.0, "strategy_returns_tc": 0.0, + "equity": 1000.0, + "strategy_returns": 0.0, "accumulated_returns": 1.0, - "accumulated_strategy_returns": 1.0, "accumulated_strategy_returns_tc": 1.0, + "accumulated_strategy_returns": 1.0, }, { "close_time": Timestamp("2023-09-01 14:34:59.999000+0000", tz="UTC"), @@ -31,7 +32,7 @@ "close": 55932.48, "volume": 692.924319, "quote_volume": 38726480.58078431, - "trades": 0, + "trades": 0.0, "taker_buy_asset_volume": 411.223017, "taker_buy_quote_volume": 22979821.33981915, "returns": 0.006818529518377586, @@ -39,11 +40,12 @@ "side_1": 1, "side_2": 1.0, "side_3": -1.0, - "strategy_returns": 0.0, "strategy_returns_tc": 0.0, + "equity": 1000.0, + "strategy_returns": 0.0, "accumulated_returns": 1.0068418286158654, - "accumulated_strategy_returns": 1.0, "accumulated_strategy_returns_tc": 1.0, + "accumulated_strategy_returns": 1.0, }, { "close_time": Timestamp("2023-09-01 14:39:59.999000+0000", tz="UTC"), @@ -53,7 +55,7 @@ "close": 56264.93, "volume": 603.660118, "quote_volume": 33896505.6971466, - "trades": 0, + "trades": 0.0, "taker_buy_asset_volume": 356.915883, "taker_buy_quote_volume": 20037884.70780964, "returns": 0.005926179097336494, @@ -61,11 +63,12 @@ "side_1": 1, "side_2": 1.0, "side_3": -1.0, - "strategy_returns": 0.0, "strategy_returns_tc": 0.0, + "equity": 1000.0, + "strategy_returns": 0.0, "accumulated_returns": 1.0128262685320526, - "accumulated_strategy_returns": 1.0, "accumulated_strategy_returns_tc": 1.0, + "accumulated_strategy_returns": 1.0, }, { "close_time": Timestamp("2023-09-01 14:44:59.999000+0000", tz="UTC"), @@ -75,7 +78,7 @@ "close": 56168.82, "volume": 370.500359, "quote_volume": 20822485.25288953, - "trades": 0, + "trades": 0.0, "taker_buy_asset_volume": 178.075904, "taker_buy_quote_volume": 10007121.78892216, "returns": -0.00170962942015996, @@ -83,11 +86,12 @@ "side_1": 1, "side_2": 1.0, "side_3": -1.0, - "strategy_returns": -0.0, - "strategy_returns_tc": -0.0, + "strategy_returns_tc": 0.0, + "equity": 1000.0, + "strategy_returns": 0.0, "accumulated_returns": 1.0110961902636069, - "accumulated_strategy_returns": 1.0, "accumulated_strategy_returns_tc": 1.0, + "accumulated_strategy_returns": 1.0, }, { "close_time": Timestamp("2023-09-01 14:49:59.999000+0000", tz="UTC"), @@ -97,7 +101,7 @@ "close": 56191.11, "volume": 324.51432, "quote_volume": 18225087.41727558, - "trades": 0, + "trades": 0.0, "taker_buy_asset_volume": 145.064381, "taker_buy_quote_volume": 8146012.47892439, "returns": 0.0003967606653441501, @@ -105,11 +109,12 @@ "side_1": 1, "side_2": 1.0, "side_3": -1.0, - "strategy_returns": 0.0, "strategy_returns_tc": 0.0, + "equity": 1000.0, + "strategy_returns": 0.0, "accumulated_returns": 1.0114974330541975, - "accumulated_strategy_returns": 1.0, "accumulated_strategy_returns_tc": 1.0, + "accumulated_strategy_returns": 1.0, }, { "close_time": Timestamp("2023-09-01 14:54:59.999000+0000", tz="UTC"), @@ -119,7 +124,7 @@ "close": 56145.0, "volume": 254.091606, "quote_volume": 14265787.89818125, - "trades": 0, + "trades": 0.0, "taker_buy_asset_volume": 134.1124, "taker_buy_quote_volume": 7529521.30623853, "returns": -0.0008209293091875578, @@ -127,11 +132,12 @@ "side_1": 1, "side_2": 1.0, "side_3": -1.0, - "strategy_returns": -0.0, - "strategy_returns_tc": -0.0, + "strategy_returns_tc": 0.0, + "equity": 1000.0, + "strategy_returns": 0.0, "accumulated_returns": 1.0106674059086556, - "accumulated_strategy_returns": 1.0, "accumulated_strategy_returns_tc": 1.0, + "accumulated_strategy_returns": 1.0, }, { "close_time": Timestamp("2023-09-01 14:59:59.999000+0000", tz="UTC"), @@ -141,7 +147,7 @@ "close": 56182.11, "volume": 270.145731, "quote_volume": 15171017.18758856, - "trades": 0, + "trades": 0.0, "taker_buy_asset_volume": 168.231118, "taker_buy_quote_volume": 9447425.0774598, "returns": 0.0006607487960858385, @@ -149,11 +155,12 @@ "side_1": 1, "side_2": 1.0, "side_3": 0.0, - "strategy_returns": 0.0, "strategy_returns_tc": 0.0, + "equity": 1000.0, + "strategy_returns": 0.0, "accumulated_returns": 1.0113354238520749, - "accumulated_strategy_returns": 1.0, "accumulated_strategy_returns_tc": 1.0, + "accumulated_strategy_returns": 1.0, }, { "close_time": Timestamp("2023-09-01 15:04:59.999000+0000", tz="UTC"), @@ -163,7 +170,7 @@ "close": 56289.89, "volume": 298.797415, "quote_volume": 16804824.55255641, - "trades": 0, + "trades": 0.0, "taker_buy_asset_volume": 139.83665, "taker_buy_quote_volume": 7864202.02549528, "returns": 0.0019165664875115606, @@ -171,10 +178,11 @@ "side_1": 1, "side_2": 1.0, "side_3": 0.0, - "strategy_returns": 0.0, "strategy_returns_tc": 0.0, + "equity": 1000.0, + "strategy_returns": 0.0, "accumulated_returns": 1.0132755740526063, - "accumulated_strategy_returns": 1.0, "accumulated_strategy_returns_tc": 1.0, + "accumulated_strategy_returns": 1.0, }, ] diff --git a/tests/backtesting/combining/out/3_strategies_vectorized.py b/tests/backtesting/combining/out/3_strategies_vectorized.py index 6475d8d..07d233b 100644 --- a/tests/backtesting/combining/out/3_strategies_vectorized.py +++ b/tests/backtesting/combining/out/3_strategies_vectorized.py @@ -19,9 +19,10 @@ "side_3": -1.0, "strategy_returns": 0.0, "strategy_returns_tc": 0.0, + "equity": 0, "accumulated_returns": 1.0, - "accumulated_strategy_returns": 1.0, "accumulated_strategy_returns_tc": 1.0, + "accumulated_strategy_returns": 1.0, }, { "close_time": Timestamp("2023-09-01 14:34:59.999000+0000", tz="UTC"), @@ -41,9 +42,10 @@ "side_3": -1.0, "strategy_returns": 0.0, "strategy_returns_tc": 0.0, + "equity": 0, "accumulated_returns": 1.0068418286158654, - "accumulated_strategy_returns": 1.0, "accumulated_strategy_returns_tc": 1.0, + "accumulated_strategy_returns": 1.0, }, { "close_time": Timestamp("2023-09-01 14:39:59.999000+0000", tz="UTC"), @@ -63,9 +65,10 @@ "side_3": -1.0, "strategy_returns": 0.0, "strategy_returns_tc": 0.0, + "equity": 0, "accumulated_returns": 1.0128262685320526, - "accumulated_strategy_returns": 1.0, "accumulated_strategy_returns_tc": 1.0, + "accumulated_strategy_returns": 1.0, }, { "close_time": Timestamp("2023-09-01 14:44:59.999000+0000", tz="UTC"), @@ -83,11 +86,12 @@ "side_1": 1, "side_2": 1.0, "side_3": -1.0, - "strategy_returns": -0.0, - "strategy_returns_tc": -0.0, + "strategy_returns": 0.0, + "strategy_returns_tc": 0.0, + "equity": 0, "accumulated_returns": 1.0110961902636069, - "accumulated_strategy_returns": 1.0, "accumulated_strategy_returns_tc": 1.0, + "accumulated_strategy_returns": 1.0, }, { "close_time": Timestamp("2023-09-01 14:49:59.999000+0000", tz="UTC"), @@ -107,9 +111,10 @@ "side_3": -1.0, "strategy_returns": 0.0, "strategy_returns_tc": 0.0, + "equity": 0, "accumulated_returns": 1.0114974330541975, - "accumulated_strategy_returns": 1.0, "accumulated_strategy_returns_tc": 1.0, + "accumulated_strategy_returns": 1.0, }, { "close_time": Timestamp("2023-09-01 14:54:59.999000+0000", tz="UTC"), @@ -127,11 +132,12 @@ "side_1": 1, "side_2": 1.0, "side_3": -1.0, - "strategy_returns": -0.0, - "strategy_returns_tc": -0.0, + "strategy_returns": 0.0, + "strategy_returns_tc": 0.0, + "equity": 0, "accumulated_returns": 1.0106674059086556, - "accumulated_strategy_returns": 1.0, "accumulated_strategy_returns_tc": 1.0, + "accumulated_strategy_returns": 1.0, }, { "close_time": Timestamp("2023-09-01 14:59:59.999000+0000", tz="UTC"), @@ -151,9 +157,10 @@ "side_3": 0.0, "strategy_returns": 0.0, "strategy_returns_tc": 0.0, + "equity": 0, "accumulated_returns": 1.0113354238520749, - "accumulated_strategy_returns": 1.0, "accumulated_strategy_returns_tc": 1.0, + "accumulated_strategy_returns": 1.0, }, { "close_time": Timestamp("2023-09-01 15:04:59.999000+0000", tz="UTC"), @@ -173,8 +180,9 @@ "side_3": 0.0, "strategy_returns": 0.0, "strategy_returns_tc": 0.0, + "equity": 0, "accumulated_returns": 1.0132755740526063, - "accumulated_strategy_returns": 1.0, "accumulated_strategy_returns_tc": 1.0, + "accumulated_strategy_returns": 1.0, }, ] diff --git a/tests/backtesting/combining/test_strategy_combiner.py b/tests/backtesting/combining/test_strategy_combiner.py index f637e6b..4f31bb7 100644 --- a/tests/backtesting/combining/test_strategy_combiner.py +++ b/tests/backtesting/combining/test_strategy_combiner.py @@ -54,7 +54,7 @@ def test_strategy_combiner_input_validation( with pytest.raises(exception) as excinfo: StrategyCombiner(**input_params, data=test_data) - assert excinfo.type == exception + assert excinfo.type == exception @pytest.mark.parametrize( "input_params,expected_results", @@ -108,6 +108,7 @@ def test_strategy_combiner( assert combiner.data["side"].to_list() == expected_results + @pytest.mark.slow @pytest.mark.parametrize( "fixture", [ @@ -143,6 +144,7 @@ def test_strategy_combiner_with_backtester( for i, d in enumerate(backtester.processed_data.to_dict(orient="records")): for key in d: + print(key) assert d[key] == pytest.approx( fixture["out"]["expected_results"][i][key], 0.2 ) diff --git a/tests/backtesting/helpers/test_backtest_metrics.py b/tests/backtesting/helpers/test_backtest_metrics.py index 9c81093..94c8405 100644 --- a/tests/backtesting/helpers/test_backtest_metrics.py +++ b/tests/backtesting/helpers/test_backtest_metrics.py @@ -9,16 +9,21 @@ def trades(): # Generate some sample trades return [ - Trade(entry_date=datetime(2022, 1, 1, 0, 0), exit_date=datetime(2022, 1, 3, 0, 0), - entry_price=10, exit_price=4, units=100, side=1, profit=-600), - Trade(entry_date=datetime(2022, 1, 2, 0, 0), exit_date=datetime(2022, 1, 4, 0, 0), - entry_price=12, exit_price=10, units=100, side=-1, profit=200), - Trade(entry_date=datetime(2022, 1, 3, 0, 0), exit_date=datetime(2022, 1, 5, 0, 0), - entry_price=11, exit_price=12, units=100, side=1, profit=100), - Trade(entry_date=datetime(2022, 1, 4, 0, 0), exit_date=datetime(2022, 1, 8, 0, 0), - entry_price=13, exit_price=14, units=100, side=-1, profit=-100), - Trade(entry_date=datetime(2022, 1, 5, 0, 0), exit_date=datetime(2022, 1, 10, 0, 0), - entry_price=12, exit_price=16, units=100, side=1, profit=400) + Trade(entry_date=datetime(2022, 1, 1, 0, 0), + exit_date=datetime(2022, 1, 3, 0, 0), + entry_price=10, exit_price=4, units=100, side=1, profit=-600, pnl=-0.4), + Trade(entry_date=datetime(2022, 1, 2, 0, 0), + exit_date=datetime(2022, 1, 4, 0, 0), + entry_price=12, exit_price=10, units=100, side=-1, profit=200, pnl=0.2), + Trade(entry_date=datetime(2022, 1, 3, 0, 0), + exit_date=datetime(2022, 1, 5, 0, 0), + entry_price=11, exit_price=12, units=100, side=1, profit=100, pnl=0.1), + Trade(entry_date=datetime(2022, 1, 4, 0, 0), + exit_date=datetime(2022, 1, 8, 0, 0), + entry_price=13, exit_price=14, units=100, side=-1, profit=-100, pnl=-0.1), + Trade(entry_date=datetime(2022, 1, 5, 0, 0), + exit_date=datetime(2022, 1, 10, 0, 0), + entry_price=12, exit_price=16, units=100, side=1, profit=400, pnl=0.4) ] @@ -85,7 +90,7 @@ def test_annual_volatility_pct(log_returns): def test_sharpe_ratio(log_returns): - assert sharpe_ratio(log_returns, 0.01) == pytest.approx(-2, 1) + assert sharpe_ratio(log_returns, 0.01) == pytest.approx(3.84, 1) def test_sortino_ratio(log_returns): diff --git a/tests/backtesting/iterative/out/bollinger_bands_trading_costs.py b/tests/backtesting/iterative/out/bollinger_bands_trading_costs.py index 76a8b20..3eb448d 100644 --- a/tests/backtesting/iterative/out/bollinger_bands_trading_costs.py +++ b/tests/backtesting/iterative/out/bollinger_bands_trading_costs.py @@ -14,7 +14,7 @@ "close": 55388.96, "volume": 276.690734, "quote_volume": 15295597.50785806, - "trades": 7614, + "trades": 0.0, "taker_buy_asset_volume": 145.211424, "taker_buy_quote_volume": 8027028.99029815, "returns": 0.0, @@ -23,11 +23,12 @@ "lower": 55388.96, "distance": 0.0, "side": 0, - "strategy_returns": 0.0, "strategy_returns_tc": 0.0, + "equity": 1000.0, + "strategy_returns": 0.0, "accumulated_returns": 1.0, - "accumulated_strategy_returns": 1.0, "accumulated_strategy_returns_tc": 1.0, + "accumulated_strategy_returns": 1.0, }, { "close_time": Timestamp("2023-09-01 14:14:59.999000+0000", tz="UTC"), @@ -37,7 +38,7 @@ "close": 55388.96, "volume": 276.690734, "quote_volume": 15295597.50785806, - "trades": 7614, + "trades": 0.0, "taker_buy_asset_volume": 145.211424, "taker_buy_quote_volume": 8027028.99029815, "returns": 0.0, @@ -46,11 +47,12 @@ "lower": 55388.96, "distance": 0.0, "side": 0, - "strategy_returns": 0.0, "strategy_returns_tc": 0.0, + "equity": 1000.0, + "strategy_returns": 0.0, "accumulated_returns": 1.0, - "accumulated_strategy_returns": 1.0, "accumulated_strategy_returns_tc": 1.0, + "accumulated_strategy_returns": 1.0, }, { "close_time": Timestamp("2023-09-01 14:19:59.999000+0000", tz="UTC"), @@ -60,7 +62,7 @@ "close": 55388.96, "volume": 276.690734, "quote_volume": 15295597.50785806, - "trades": 7614, + "trades": 0.0, "taker_buy_asset_volume": 145.211424, "taker_buy_quote_volume": 8027028.99029815, "returns": 0.0, @@ -69,11 +71,12 @@ "lower": 55388.96, "distance": 0.0, "side": 0, - "strategy_returns": 0.0, "strategy_returns_tc": 0.0, + "equity": 1000.0, + "strategy_returns": 0.0, "accumulated_returns": 1.0, - "accumulated_strategy_returns": 1.0, "accumulated_strategy_returns_tc": 1.0, + "accumulated_strategy_returns": 1.0, }, { "close_time": Timestamp("2023-09-01 14:29:59.999000+0000", tz="UTC"), @@ -83,7 +86,7 @@ "close": 55552.4, "volume": 149.363426, "quote_volume": 8288967.03877351, - "trades": 5260, + "trades": 1.0, "taker_buy_asset_volume": 82.67909, "taker_buy_quote_volume": 4588065.23181743, "returns": 0.002946423556387118, @@ -92,11 +95,12 @@ "lower": 55349.07787200365, "distance": 108.95999999999913, "side": -1, - "strategy_returns": 0.0, - "strategy_returns_tc": -0.001, + "strategy_returns_tc": -0.0009999999999999697, + "equity": 999.000499833375, + "strategy_returns": 3.0357660829594124e-17, "accumulated_returns": 1.002950768528602, - "accumulated_strategy_returns": 1.0, "accumulated_strategy_returns_tc": 0.999000499833375, + "accumulated_strategy_returns": 1.0, }, { "close_time": Timestamp("2023-09-01 14:34:59.999000+0000", tz="UTC"), @@ -106,7 +110,7 @@ "close": 55932.48, "volume": 692.924319, "quote_volume": 38726480.58078431, - "trades": 16507, + "trades": 0.0, "taker_buy_asset_volume": 411.223017, "taker_buy_quote_volume": 22979821.33981915, "returns": 0.006818529518377586, @@ -115,11 +119,12 @@ "lower": 55345.750335190285, "distance": 307.8666666666686, "side": -1, - "strategy_returns": -0.006818529518377586, - "strategy_returns_tc": -0.006818529518377586, + "strategy_returns_tc": -0.006818529518377635, + "equity": 992.2119556819862, + "strategy_returns": -0.006818529518377635, "accumulated_returns": 1.0098127857970252, - "accumulated_strategy_returns": 0.993204663909056, "accumulated_strategy_returns_tc": 0.9922119556819863, + "accumulated_strategy_returns": 0.993204663909056, }, { "close_time": Timestamp("2023-09-01 14:39:59.999000+0000", tz="UTC"), @@ -129,7 +134,7 @@ "close": 56264.93, "volume": 603.660118, "quote_volume": 33896505.6971466, - "trades": 14656, + "trades": 0.0, "taker_buy_asset_volume": 356.915883, "taker_buy_quote_volume": 20037884.70780964, "returns": 0.005926179097336494, @@ -138,11 +143,12 @@ "lower": 55560.07310791995, "distance": 348.32666666666773, "side": -1, - "strategy_returns": -0.005926179097336494, - "strategy_returns_tc": -0.005926179097336494, + "strategy_returns_tc": -0.005926179097336547, + "equity": 986.3493186065206, + "strategy_returns": -0.005926179097336547, "accumulated_returns": 1.0158148844101784, + "accumulated_strategy_returns_tc": 0.9863493186065205, "accumulated_strategy_returns": 0.9873361612642191, - "accumulated_strategy_returns_tc": 0.9863493186065206, }, { "close_time": Timestamp("2023-09-01 14:44:59.999000+0000", tz="UTC"), @@ -152,7 +158,7 @@ "close": 56168.82, "volume": 370.500359, "quote_volume": 20822485.25288953, - "trades": 8616, + "trades": 0.0, "taker_buy_asset_volume": 178.075904, "taker_buy_quote_volume": 10007121.78892216, "returns": -0.00170962942015996, @@ -161,11 +167,12 @@ "lower": 55950.9934850464, "distance": 46.743333333331975, "side": -1, - "strategy_returns": 0.00170962942015996, - "strategy_returns_tc": 0.00170962942015996, + "strategy_returns_tc": 0.0017096294201600275, + "equity": 988.0370527090222, + "strategy_returns": 0.0017096294201600275, "accumulated_returns": 1.0140797010812264, + "accumulated_strategy_returns_tc": 0.9880370527090222, "accumulated_strategy_returns": 0.9890255839449716, - "accumulated_strategy_returns_tc": 0.9880370527090223, }, { "close_time": Timestamp("2023-09-01 14:49:59.999000+0000", tz="UTC"), @@ -175,7 +182,7 @@ "close": 56191.11, "volume": 324.51432, "quote_volume": 18225087.41727558, - "trades": 8352, + "trades": 1.0, "taker_buy_asset_volume": 145.064381, "taker_buy_quote_volume": 8146012.47892439, "returns": 0.0003967606653441501, @@ -184,11 +191,12 @@ "lower": 56157.9819806691, "distance": -17.176666666659003, "side": 0, - "strategy_returns": -0.0003967606653441501, - "strategy_returns_tc": -0.0013967606653441501, + "strategy_returns_tc": -0.0013967606653441894, + "equity": 986.6579647699991, + "strategy_returns": -0.0003967606653441894, "accumulated_returns": 1.0144821278464156, - "accumulated_strategy_returns": 0.9886332553316708, "accumulated_strategy_returns_tc": 0.9866579647699992, + "accumulated_strategy_returns": 0.9886332553316707, }, { "close_time": Timestamp("2023-09-01 14:54:59.999000+0000", tz="UTC"), @@ -198,7 +206,7 @@ "close": 56145.0, "volume": 254.091606, "quote_volume": 14265787.89818125, - "trades": 6455, + "trades": 1.0, "taker_buy_asset_volume": 134.1124, "taker_buy_quote_volume": 7529521.30623853, "returns": -0.0008209293091875578, @@ -207,11 +215,12 @@ "lower": 56145.250769744416, "distance": -23.30999999999767, "side": 1, - "strategy_returns": -0.0, - "strategy_returns_tc": -0.001, + "strategy_returns_tc": -0.0009999999999999697, + "equity": 985.6717999698096, + "strategy_returns": 3.0357660829594124e-17, "accumulated_returns": 1.0136496514828948, - "accumulated_strategy_returns": 0.9886332553316708, "accumulated_strategy_returns_tc": 0.9856717999698097, + "accumulated_strategy_returns": 0.9886332553316708, }, { "close_time": Timestamp("2023-09-01 14:59:59.999000+0000", tz="UTC"), @@ -221,7 +230,7 @@ "close": 56182.11, "volume": 270.145731, "quote_volume": 15171017.18758856, - "trades": 7707, + "trades": 1.0, "taker_buy_asset_volume": 168.231118, "taker_buy_quote_volume": 9447425.0774598, "returns": 0.0006607487960858385, @@ -230,11 +239,12 @@ "lower": 56148.29862728937, "distance": 9.37000000000262, "side": 0, - "strategy_returns": 0.0006607487960858385, - "strategy_returns_tc": -0.00033925120391416154, + "strategy_returns_tc": -0.00033925120391420095, + "equity": 985.3374663397555, + "strategy_returns": 0.0006607487960857991, "accumulated_returns": 1.014319640592638, - "accumulated_strategy_returns": 0.9892867094256302, "accumulated_strategy_returns_tc": 0.9853374663397555, + "accumulated_strategy_returns": 0.9892867094256302, }, { "close_time": Timestamp("2023-09-01 15:04:59.999000+0000", tz="UTC"), @@ -244,7 +254,7 @@ "close": 56289.89, "volume": 298.797415, "quote_volume": 16804824.55255641, - "trades": 9000, + "trades": 0.0, "taker_buy_asset_volume": 139.83665, "taker_buy_quote_volume": 7864202.02549528, "returns": 0.0019165664875115606, @@ -253,10 +263,11 @@ "lower": 56130.404023653595, "distance": 84.22333333333518, "side": 0, - "strategy_returns": 0.0, "strategy_returns_tc": 0.0, + "equity": 985.3374663397555, + "strategy_returns": 0.0, "accumulated_returns": 1.016265515727322, - "accumulated_strategy_returns": 0.9892867094256302, "accumulated_strategy_returns_tc": 0.9853374663397555, + "accumulated_strategy_returns": 0.9892867094256302, }, ] diff --git a/tests/backtesting/iterative/out/momentum_no_trading_costs.py b/tests/backtesting/iterative/out/momentum_no_trading_costs.py index 1bed219..6c26e77 100644 --- a/tests/backtesting/iterative/out/momentum_no_trading_costs.py +++ b/tests/backtesting/iterative/out/momentum_no_trading_costs.py @@ -14,17 +14,18 @@ "close": 55388.96, "volume": 276.690734, "quote_volume": 15295597.50785806, - "trades": 7614, + "trades": 0.0, "taker_buy_asset_volume": 145.211424, "taker_buy_quote_volume": 8027028.99029815, "returns": 0.0, "rolling_returns": 0.0, "side": 0, - "strategy_returns": 0.0, "strategy_returns_tc": 0.0, + "equity": 1000.0, + "strategy_returns": 0.0, "accumulated_returns": 1.0, - "accumulated_strategy_returns": 1.0, "accumulated_strategy_returns_tc": 1.0, + "accumulated_strategy_returns": 1.0, }, { "close_time": Timestamp("2023-09-01 14:09:59.999000+0000", tz="UTC"), @@ -34,17 +35,18 @@ "close": 55388.96, "volume": 276.690734, "quote_volume": 15295597.50785806, - "trades": 7614, + "trades": 0.0, "taker_buy_asset_volume": 145.211424, "taker_buy_quote_volume": 8027028.99029815, "returns": 0.0, "rolling_returns": 0.0, "side": 0, - "strategy_returns": 0.0, "strategy_returns_tc": 0.0, + "equity": 1000.0, + "strategy_returns": 0.0, "accumulated_returns": 1.0, - "accumulated_strategy_returns": 1.0, "accumulated_strategy_returns_tc": 1.0, + "accumulated_strategy_returns": 1.0, }, { "close_time": Timestamp("2023-09-01 14:14:59.999000+0000", tz="UTC"), @@ -54,17 +56,18 @@ "close": 55388.96, "volume": 276.690734, "quote_volume": 15295597.50785806, - "trades": 7614, + "trades": 0.0, "taker_buy_asset_volume": 145.211424, "taker_buy_quote_volume": 8027028.99029815, "returns": 0.0, "rolling_returns": 0.0, "side": 0, - "strategy_returns": 0.0, "strategy_returns_tc": 0.0, + "equity": 1000.0, + "strategy_returns": 0.0, "accumulated_returns": 1.0, - "accumulated_strategy_returns": 1.0, "accumulated_strategy_returns_tc": 1.0, + "accumulated_strategy_returns": 1.0, }, { "close_time": Timestamp("2023-09-01 14:19:59.999000+0000", tz="UTC"), @@ -74,17 +77,18 @@ "close": 55388.96, "volume": 276.690734, "quote_volume": 15295597.50785806, - "trades": 7614, + "trades": 0.0, "taker_buy_asset_volume": 145.211424, "taker_buy_quote_volume": 8027028.99029815, "returns": 0.0, "rolling_returns": 0.0, "side": 0, - "strategy_returns": 0.0, "strategy_returns_tc": 0.0, + "equity": 1000.0, + "strategy_returns": 0.0, "accumulated_returns": 1.0, - "accumulated_strategy_returns": 1.0, "accumulated_strategy_returns_tc": 1.0, + "accumulated_strategy_returns": 1.0, }, { "close_time": Timestamp("2023-09-01 14:29:59.999000+0000", tz="UTC"), @@ -94,17 +98,18 @@ "close": 55552.4, "volume": 149.363426, "quote_volume": 8288967.03877351, - "trades": 5260, + "trades": 1.0, "taker_buy_asset_volume": 82.67909, "taker_buy_quote_volume": 4588065.23181743, "returns": 0.002946423556387118, "rolling_returns": 0.0007366058890967795, "side": 1, - "strategy_returns": 0.0, "strategy_returns_tc": 0.0, + "equity": 1000.0, + "strategy_returns": 0.0, "accumulated_returns": 1.002950768528602, - "accumulated_strategy_returns": 1.0, "accumulated_strategy_returns_tc": 1.0, + "accumulated_strategy_returns": 1.0, }, { "close_time": Timestamp("2023-09-01 14:34:59.999000+0000", tz="UTC"), @@ -114,17 +119,18 @@ "close": 55932.48, "volume": 692.924319, "quote_volume": 38726480.58078431, - "trades": 16507, + "trades": 0.0, "taker_buy_asset_volume": 411.223017, "taker_buy_quote_volume": 22979821.33981915, "returns": 0.006818529518377586, "rolling_returns": 0.002441238268691176, "side": 1, - "strategy_returns": 0.006818529518377586, "strategy_returns_tc": 0.006818529518377586, + "equity": 1006.8418286158653, + "strategy_returns": 0.006818529518377586, "accumulated_returns": 1.0098127857970252, - "accumulated_strategy_returns": 1.0068418286158654, "accumulated_strategy_returns_tc": 1.0068418286158654, + "accumulated_strategy_returns": 1.0068418286158654, }, { "close_time": Timestamp("2023-09-01 14:39:59.999000+0000", tz="UTC"), @@ -134,17 +140,18 @@ "close": 56264.93, "volume": 603.660118, "quote_volume": 33896505.6971466, - "trades": 14656, + "trades": 0.0, "taker_buy_asset_volume": 356.915883, "taker_buy_quote_volume": 20037884.70780964, "returns": 0.005926179097336494, "rolling_returns": 0.0039227830430252995, "side": 1, - "strategy_returns": 0.005926179097336494, "strategy_returns_tc": 0.005926179097336494, + "equity": 1012.8262685320526, + "strategy_returns": 0.005926179097336494, "accumulated_returns": 1.0158148844101784, - "accumulated_strategy_returns": 1.0128262685320526, "accumulated_strategy_returns_tc": 1.0128262685320526, + "accumulated_strategy_returns": 1.0128262685320526, }, { "close_time": Timestamp("2023-09-01 14:44:59.999000+0000", tz="UTC"), @@ -154,17 +161,18 @@ "close": 56168.82, "volume": 370.500359, "quote_volume": 20822485.25288953, - "trades": 8616, + "trades": 0.0, "taker_buy_asset_volume": 178.075904, "taker_buy_quote_volume": 10007121.78892216, "returns": -0.00170962942015996, "rolling_returns": 0.0034953756879853096, "side": 1, - "strategy_returns": -0.00170962942015996, "strategy_returns_tc": -0.00170962942015996, + "equity": 1011.0961902636069, + "strategy_returns": -0.00170962942015996, "accumulated_returns": 1.0140797010812264, - "accumulated_strategy_returns": 1.0110961902636069, "accumulated_strategy_returns_tc": 1.0110961902636069, + "accumulated_strategy_returns": 1.0110961902636069, }, { "close_time": Timestamp("2023-09-01 14:49:59.999000+0000", tz="UTC"), @@ -174,17 +182,18 @@ "close": 56191.11, "volume": 324.51432, "quote_volume": 18225087.41727558, - "trades": 8352, + "trades": 0.0, "taker_buy_asset_volume": 145.064381, "taker_buy_quote_volume": 8146012.47892439, "returns": 0.0003967606653441501, "rolling_returns": 0.0028579599652245676, "side": 1, - "strategy_returns": 0.0003967606653441501, "strategy_returns_tc": 0.0003967606653441501, + "equity": 1011.4974330541975, + "strategy_returns": 0.0003967606653441501, "accumulated_returns": 1.0144821278464156, - "accumulated_strategy_returns": 1.0114974330541975, "accumulated_strategy_returns_tc": 1.0114974330541975, + "accumulated_strategy_returns": 1.0114974330541975, }, { "close_time": Timestamp("2023-09-01 14:54:59.999000+0000", tz="UTC"), @@ -194,17 +203,18 @@ "close": 56145.0, "volume": 254.091606, "quote_volume": 14265787.89818125, - "trades": 6455, + "trades": 0.0, "taker_buy_asset_volume": 134.1124, "taker_buy_quote_volume": 7529521.30623853, "returns": -0.0008209293091875578, "rolling_returns": 0.0009480952583332816, "side": 1, - "strategy_returns": -0.0008209293091875578, "strategy_returns_tc": -0.0008209293091875578, + "equity": 1010.6674059086556, + "strategy_returns": -0.0008209293091875578, "accumulated_returns": 1.0136496514828948, - "accumulated_strategy_returns": 1.0106674059086556, "accumulated_strategy_returns_tc": 1.0106674059086556, + "accumulated_strategy_returns": 1.0106674059086556, }, { "close_time": Timestamp("2023-09-01 14:59:59.999000+0000", tz="UTC"), @@ -214,17 +224,18 @@ "close": 56182.11, "volume": 270.145731, "quote_volume": 15171017.18758856, - "trades": 7707, + "trades": 2.0, "taker_buy_asset_volume": 168.231118, "taker_buy_quote_volume": 9447425.0774598, "returns": 0.0006607487960858385, "rolling_returns": -0.0003682623169793823, "side": -1, - "strategy_returns": 0.0006607487960858385, "strategy_returns_tc": 0.0006607487960858385, + "equity": 1011.3354238520748, + "strategy_returns": 0.0006607487960858385, "accumulated_returns": 1.014319640592638, - "accumulated_strategy_returns": 1.0113354238520749, "accumulated_strategy_returns_tc": 1.0113354238520749, + "accumulated_strategy_returns": 1.0113354238520749, }, { "close_time": Timestamp("2023-09-01 15:04:59.999000+0000", tz="UTC"), @@ -234,16 +245,17 @@ "close": 56289.89, "volume": 298.797415, "quote_volume": 16804824.55255641, - "trades": 9000, + "trades": 1.0, "taker_buy_asset_volume": 139.83665, "taker_buy_quote_volume": 7864202.02549528, "returns": 0.0019165664875115606, "rolling_returns": 0.0005382866599384979, "side": 0, - "strategy_returns": -0.0019165664875115606, - "strategy_returns_tc": -0.0019165664875115606, + "strategy_returns_tc": -0.0019165664875115203, + "equity": 1009.3989885173677, + "strategy_returns": -0.0019165664875115203, "accumulated_returns": 1.016265515727322, - "accumulated_strategy_returns": 1.0093989885173678, "accumulated_strategy_returns_tc": 1.0093989885173678, + "accumulated_strategy_returns": 1.0093989885173678, }, ] diff --git a/tests/backtesting/iterative/out/moving_average_crossover_trading_costs.py b/tests/backtesting/iterative/out/moving_average_crossover_trading_costs.py index 90d1ba6..0062b5d 100644 --- a/tests/backtesting/iterative/out/moving_average_crossover_trading_costs.py +++ b/tests/backtesting/iterative/out/moving_average_crossover_trading_costs.py @@ -14,18 +14,19 @@ "close": 55932.48, "volume": 692.924319, "quote_volume": 38726480.58078431, - "trades": 16507, + "trades": 1.0, "taker_buy_asset_volume": 411.223017, "taker_buy_quote_volume": 22979821.33981915, - "returns": 0, + "returns": 0.0, "SMA_S": 55565.7, "SMA_L": 55489.95428571429, "side": 1, + "strategy_returns_tc": 0.0, + "equity": 997.004495503373, "strategy_returns": 0.0, - "strategy_returns_tc": -0.003, - "accumulated_returns": 1.0068418286158654, + "accumulated_returns": 1.0, + "accumulated_strategy_returns_tc": 1.0, "accumulated_strategy_returns": 1.0, - "accumulated_strategy_returns_tc": 0.997004495503373, }, { "close_time": Timestamp("2023-09-01 14:39:59.999000+0000", tz="UTC"), @@ -35,18 +36,19 @@ "close": 56264.93, "volume": 603.660118, "quote_volume": 33896505.6971466, - "trades": 14656, + "trades": 0.0, "taker_buy_asset_volume": 356.915883, "taker_buy_quote_volume": 20037884.70780964, "returns": 0.005926179097336494, "SMA_S": 55784.692500000005, "SMA_L": 55615.09285714285, "side": 1, - "strategy_returns": 0.005926179097336494, "strategy_returns_tc": 0.005926179097336494, - "accumulated_returns": 1.0128262685320526, + "equity": 1002.9304645383612, + "strategy_returns": 0.005926179097336494, + "accumulated_returns": 1.0059437736356407, + "accumulated_strategy_returns_tc": 1.0059437736356407, "accumulated_strategy_returns": 1.0059437736356407, - "accumulated_strategy_returns_tc": 1.0029304645383612, }, { "close_time": Timestamp("2023-09-01 14:44:59.999000+0000", tz="UTC"), @@ -56,18 +58,19 @@ "close": 56168.82, "volume": 370.500359, "quote_volume": 20822485.25288953, - "trades": 8616, + "trades": 0.0, "taker_buy_asset_volume": 178.075904, "taker_buy_quote_volume": 10007121.78892216, "returns": -0.00170962942015996, "SMA_S": 55979.6575, "SMA_L": 55726.50142857143, "side": 1, - "strategy_returns": -0.00170962942015996, "strategy_returns_tc": -0.00170962942015996, - "accumulated_returns": 1.0110961902636069, + "equity": 1001.2172899739072, + "strategy_returns": -0.00170962942015996, + "accumulated_returns": 1.0042254518304927, + "accumulated_strategy_returns_tc": 1.0042254518304927, "accumulated_strategy_returns": 1.0042254518304927, - "accumulated_strategy_returns_tc": 1.0012172899739071, }, { "close_time": Timestamp("2023-09-01 14:49:59.999000+0000", tz="UTC"), @@ -77,18 +80,19 @@ "close": 56191.11, "volume": 324.51432, "quote_volume": 18225087.41727558, - "trades": 8352, + "trades": 0.0, "taker_buy_asset_volume": 145.064381, "taker_buy_quote_volume": 8146012.47892439, "returns": 0.0003967606653441501, "SMA_S": 56139.335, "SMA_L": 55841.09428571428, "side": 1, - "strategy_returns": 0.0003967606653441501, "strategy_returns_tc": 0.0003967606653441501, - "accumulated_returns": 1.0114974330541975, + "equity": 1001.6146124277798, + "strategy_returns": 0.0003967606653441501, + "accumulated_returns": 1.0046239680414673, + "accumulated_strategy_returns_tc": 1.0046239680414673, "accumulated_strategy_returns": 1.0046239680414673, - "accumulated_strategy_returns_tc": 1.0016146124277796, }, { "close_time": Timestamp("2023-09-01 14:54:59.999000+0000", tz="UTC"), @@ -98,18 +102,19 @@ "close": 56145.0, "volume": 254.091606, "quote_volume": 14265787.89818125, - "trades": 6455, + "trades": 0.0, "taker_buy_asset_volume": 134.1124, "taker_buy_quote_volume": 7529521.30623853, "returns": -0.0008209293091875578, "SMA_S": 56192.465000000004, "SMA_L": 55949.09999999999, "side": 1, - "strategy_returns": -0.0008209293091875578, "strategy_returns_tc": -0.0008209293091875578, - "accumulated_returns": 1.0106674059086556, + "equity": 1000.792695050119, + "strategy_returns": -0.0008209293091875578, + "accumulated_returns": 1.0037995812093439, + "accumulated_strategy_returns_tc": 1.0037995812093439, "accumulated_strategy_returns": 1.0037995812093439, - "accumulated_strategy_returns_tc": 1.000792695050119, }, { "close_time": Timestamp("2023-09-01 14:59:59.999000+0000", tz="UTC"), @@ -119,18 +124,19 @@ "close": 56182.11, "volume": 270.145731, "quote_volume": 15171017.18758856, - "trades": 7707, + "trades": 0.0, "taker_buy_asset_volume": 168.231118, "taker_buy_quote_volume": 9447425.0774598, "returns": 0.0006607487960858385, "SMA_S": 56171.759999999995, "SMA_L": 56062.40714285715, "side": 1, - "strategy_returns": 0.0006607487960858385, "strategy_returns_tc": 0.0006607487960858385, - "accumulated_returns": 1.0113354238520749, + "equity": 1001.454186134157, + "strategy_returns": 0.0006607487960858385, + "accumulated_returns": 1.0044630597463227, + "accumulated_strategy_returns_tc": 1.0044630597463227, "accumulated_strategy_returns": 1.0044630597463227, - "accumulated_strategy_returns_tc": 1.0014541861341568, }, { "close_time": Timestamp("2023-09-01 15:04:59.999000+0000", tz="UTC"), @@ -140,17 +146,18 @@ "close": 56289.89, "volume": 298.797415, "quote_volume": 16804824.55255641, - "trades": 9000, + "trades": 1.0, "taker_buy_asset_volume": 139.83665, "taker_buy_quote_volume": 7864202.02549528, "returns": 0.0019165664875115606, "SMA_S": 56202.027500000004, "SMA_L": 56167.76285714285, "side": 0, - "strategy_returns": 0.0019165664875115606, - "strategy_returns_tc": -0.0010834335124884395, - "accumulated_returns": 1.0132755740526063, + "strategy_returns_tc": -0.0010834335124883878, + "equity": 1000.3697646630362, + "strategy_returns": 0.0019165664875116122, + "accumulated_returns": 1.0063900259741747, + "accumulated_strategy_returns_tc": 1.0033753801260084, "accumulated_strategy_returns": 1.0063900259741747, - "accumulated_strategy_returns_tc": 1.000369764663036, }, ] diff --git a/tests/backtesting/iterative/out_margin/bollinger_bands_trading_costs.py b/tests/backtesting/iterative/out_margin/bollinger_bands_trading_costs.py index 003fc18..ff4a649 100644 --- a/tests/backtesting/iterative/out_margin/bollinger_bands_trading_costs.py +++ b/tests/backtesting/iterative/out_margin/bollinger_bands_trading_costs.py @@ -15,7 +15,7 @@ "close": 55388.96, "volume": 276.690734, "quote_volume": 15295597.50785806, - "trades": 7614, + "trades": 0.0, "taker_buy_asset_volume": 145.211424, "taker_buy_quote_volume": 8027028.99029815, "returns": 0.0, @@ -24,12 +24,12 @@ "lower": 55388.96, "distance": 0.0, "side": 0, - "strategy_returns": 0.0, "strategy_returns_tc": 0.0, + "equity": 1000.0, + "strategy_returns": 0.0, "accumulated_returns": 1.0, - "accumulated_strategy_returns": 1.0, "accumulated_strategy_returns_tc": 1.0, - "margin_ratio": 0.0, + "accumulated_strategy_returns": 1.0, }, { "close_time": Timestamp("2023-09-01 14:14:59.999000+0000", tz="UTC"), @@ -39,7 +39,7 @@ "close": 55388.96, "volume": 276.690734, "quote_volume": 15295597.50785806, - "trades": 7614, + "trades": 0.0, "taker_buy_asset_volume": 145.211424, "taker_buy_quote_volume": 8027028.99029815, "returns": 0.0, @@ -48,12 +48,12 @@ "lower": 55388.96, "distance": 0.0, "side": 0, - "strategy_returns": 0.0, "strategy_returns_tc": 0.0, + "equity": 1000.0, + "strategy_returns": 0.0, "accumulated_returns": 1.0, - "accumulated_strategy_returns": 1.0, "accumulated_strategy_returns_tc": 1.0, - "margin_ratio": 0.0, + "accumulated_strategy_returns": 1.0, }, { "close_time": Timestamp("2023-09-01 14:19:59.999000+0000", tz="UTC"), @@ -63,7 +63,7 @@ "close": 55388.96, "volume": 276.690734, "quote_volume": 15295597.50785806, - "trades": 7614, + "trades": 0.0, "taker_buy_asset_volume": 145.211424, "taker_buy_quote_volume": 8027028.99029815, "returns": 0.0, @@ -72,12 +72,12 @@ "lower": 55388.96, "distance": 0.0, "side": 0, - "strategy_returns": 0.0, "strategy_returns_tc": 0.0, + "equity": 1000.0, + "strategy_returns": 0.0, "accumulated_returns": 1.0, - "accumulated_strategy_returns": 1.0, "accumulated_strategy_returns_tc": 1.0, - "margin_ratio": 0.0, + "accumulated_strategy_returns": 1.0, }, { "close_time": Timestamp("2023-09-01 14:29:59.999000+0000", tz="UTC"), @@ -87,7 +87,7 @@ "close": 55552.4, "volume": 149.363426, "quote_volume": 8288967.03877351, - "trades": 5260, + "trades": 1.0, "taker_buy_asset_volume": 82.67909, "taker_buy_quote_volume": 4588065.23181743, "returns": 0.002946423556387118, @@ -96,12 +96,12 @@ "lower": 55349.07787200365, "distance": 108.95999999999913, "side": -1, - "strategy_returns": 0.0, - "strategy_returns_tc": -0.001, + "strategy_returns_tc": -0.0009999999999999697, + "equity": 999.000499833375, + "strategy_returns": 3.0357660829594124e-17, "accumulated_returns": 1.002950768528602, - "accumulated_strategy_returns": 1.0, "accumulated_strategy_returns_tc": 0.999000499833375, - "margin_ratio": 0.004010551780611173, + "accumulated_strategy_returns": 1.0, }, { "close_time": Timestamp("2023-09-01 14:34:59.999000+0000", tz="UTC"), @@ -111,7 +111,7 @@ "close": 55932.48, "volume": 692.924319, "quote_volume": 38726480.58078431, - "trades": 16507, + "trades": 0.0, "taker_buy_asset_volume": 411.223017, "taker_buy_quote_volume": 22979821.33981915, "returns": 0.006818529518377586, @@ -120,12 +120,12 @@ "lower": 55345.750335190285, "distance": 307.8666666666686, "side": -1, - "strategy_returns": -0.006818529518377586, - "strategy_returns_tc": -0.006818529518377586, + "strategy_returns_tc": -0.006818529518377635, + "equity": 992.2119556819862, + "strategy_returns": -0.006818529518377635, "accumulated_returns": 1.0098127857970252, - "accumulated_strategy_returns": 0.993204663909056, "accumulated_strategy_returns_tc": 0.9922119556819863, - "margin_ratio": 0.0040860863638124655, + "accumulated_strategy_returns": 0.993204663909056, }, { "close_time": Timestamp("2023-09-01 14:39:59.999000+0000", tz="UTC"), @@ -135,7 +135,7 @@ "close": 56264.93, "volume": 603.660118, "quote_volume": 33896505.6971466, - "trades": 14656, + "trades": 0.0, "taker_buy_asset_volume": 356.915883, "taker_buy_quote_volume": 20037884.70780964, "returns": 0.005926179097336494, @@ -144,12 +144,12 @@ "lower": 55560.07310791995, "distance": 348.32666666666773, "side": -1, - "strategy_returns": -0.005926179097336494, - "strategy_returns_tc": -0.005926179097336494, + "strategy_returns_tc": -0.005926179097336547, + "equity": 986.3493186065206, + "strategy_returns": -0.005926179097336547, "accumulated_returns": 1.0158148844101784, - "accumulated_strategy_returns": 0.9873361612642192, - "accumulated_strategy_returns_tc": 0.9863493186065206, - "margin_ratio": 0.004122377133615381, + "accumulated_strategy_returns_tc": 0.9863493186065205, + "accumulated_strategy_returns": 0.9873361612642191, }, { "close_time": Timestamp("2023-09-01 14:44:59.999000+0000", tz="UTC"), @@ -159,7 +159,7 @@ "close": 56168.82, "volume": 370.500359, "quote_volume": 20822485.25288953, - "trades": 8616, + "trades": 0.0, "taker_buy_asset_volume": 178.075904, "taker_buy_quote_volume": 10007121.78892216, "returns": -0.00170962942015996, @@ -168,12 +168,12 @@ "lower": 55950.9934850464, "distance": 46.743333333331975, "side": -1, - "strategy_returns": 0.00170962942015996, - "strategy_returns_tc": 0.00170962942015996, + "strategy_returns_tc": 0.0017096294201600275, + "equity": 988.0370527090222, + "strategy_returns": 0.0017096294201600275, "accumulated_returns": 1.0140797010812264, + "accumulated_strategy_returns_tc": 0.9880370527090222, "accumulated_strategy_returns": 0.9890255839449716, - "accumulated_strategy_returns_tc": 0.9880370527090223, - "margin_ratio": 0.00412006414805377, }, { "close_time": Timestamp("2023-09-01 14:49:59.999000+0000", tz="UTC"), @@ -183,7 +183,7 @@ "close": 56191.11, "volume": 324.51432, "quote_volume": 18225087.41727558, - "trades": 8352, + "trades": 1.0, "taker_buy_asset_volume": 145.064381, "taker_buy_quote_volume": 8146012.47892439, "returns": 0.0003967606653441501, @@ -192,12 +192,12 @@ "lower": 56157.9819806691, "distance": -17.176666666659003, "side": 0, - "strategy_returns": -0.0003967606653441501, - "strategy_returns_tc": -0.0013967606653441501, + "strategy_returns_tc": -0.0013967606653441894, + "equity": 986.6579647699991, + "strategy_returns": -0.0003967606653441894, "accumulated_returns": 1.0144821278464156, - "accumulated_strategy_returns": 0.9886332553316708, "accumulated_strategy_returns_tc": 0.9866579647699992, - "margin_ratio": 0, + "accumulated_strategy_returns": 0.9886332553316707, }, { "close_time": Timestamp("2023-09-01 14:54:59.999000+0000", tz="UTC"), @@ -207,7 +207,7 @@ "close": 56145.0, "volume": 254.091606, "quote_volume": 14265787.89818125, - "trades": 6455, + "trades": 1.0, "taker_buy_asset_volume": 134.1124, "taker_buy_quote_volume": 7529521.30623853, "returns": -0.0008209293091875578, @@ -216,12 +216,12 @@ "lower": 56145.250769744416, "distance": -23.30999999999767, "side": 1, - "strategy_returns": -0.0, - "strategy_returns_tc": -0.001, + "strategy_returns_tc": -0.0009999999999999697, + "equity": 985.6717999698096, + "strategy_returns": 3.0357660829594124e-17, "accumulated_returns": 1.0136496514828948, - "accumulated_strategy_returns": 0.9886332553316708, "accumulated_strategy_returns_tc": 0.9856717999698097, - "margin_ratio": 0.004, + "accumulated_strategy_returns": 0.9886332553316708, }, { "close_time": Timestamp("2023-09-01 14:59:59.999000+0000", tz="UTC"), @@ -231,7 +231,7 @@ "close": 56182.11, "volume": 270.145731, "quote_volume": 15171017.18758856, - "trades": 7707, + "trades": 1.0, "taker_buy_asset_volume": 168.231118, "taker_buy_quote_volume": 9447425.0774598, "returns": 0.0006607487960858385, @@ -240,12 +240,12 @@ "lower": 56148.29862728937, "distance": 9.37000000000262, "side": 0, - "strategy_returns": 0.0006607487960858385, - "strategy_returns_tc": -0.00033925120391416154, + "strategy_returns_tc": -0.00033925120391420095, + "equity": 985.3374663397555, + "strategy_returns": 0.0006607487960857991, "accumulated_returns": 1.014319640592638, - "accumulated_strategy_returns": 0.9892867094256302, "accumulated_strategy_returns_tc": 0.9853374663397555, - "margin_ratio": 0, + "accumulated_strategy_returns": 0.9892867094256302, }, { "close_time": Timestamp("2023-09-01 15:04:59.999000+0000", tz="UTC"), @@ -255,7 +255,7 @@ "close": 56289.89, "volume": 298.797415, "quote_volume": 16804824.55255641, - "trades": 9000, + "trades": 0.0, "taker_buy_asset_volume": 139.83665, "taker_buy_quote_volume": 7864202.02549528, "returns": 0.0019165664875115606, @@ -264,12 +264,12 @@ "lower": 56130.404023653595, "distance": 84.22333333333518, "side": 0, - "strategy_returns": 0.0, "strategy_returns_tc": 0.0, + "equity": 985.3374663397555, + "strategy_returns": 0.0, "accumulated_returns": 1.016265515727322, - "accumulated_strategy_returns": 0.9892867094256302, "accumulated_strategy_returns_tc": 0.9853374663397555, - "margin_ratio": 0, + "accumulated_strategy_returns": 0.9892867094256302, }, ], 10: [ @@ -281,7 +281,7 @@ "close": 55388.96, "volume": 276.690734, "quote_volume": 15295597.50785806, - "trades": 7614, + "trades": 0.0, "taker_buy_asset_volume": 145.211424, "taker_buy_quote_volume": 8027028.99029815, "returns": 0.0, @@ -290,12 +290,13 @@ "lower": 55388.96, "distance": 0.0, "side": 0, - "strategy_returns": 0.0, "strategy_returns_tc": 0.0, + "equity": 1000.0, + "margin_ratio": 0.0, + "strategy_returns": 0.0, "accumulated_returns": 1.0, - "accumulated_strategy_returns": 1.0, "accumulated_strategy_returns_tc": 1.0, - "margin_ratio": 0.0, + "accumulated_strategy_returns": 1.0, }, { "close_time": Timestamp("2023-09-01 14:14:59.999000+0000", tz="UTC"), @@ -305,7 +306,7 @@ "close": 55388.96, "volume": 276.690734, "quote_volume": 15295597.50785806, - "trades": 7614, + "trades": 0.0, "taker_buy_asset_volume": 145.211424, "taker_buy_quote_volume": 8027028.99029815, "returns": 0.0, @@ -314,12 +315,13 @@ "lower": 55388.96, "distance": 0.0, "side": 0, - "strategy_returns": 0.0, "strategy_returns_tc": 0.0, + "equity": 1000.0, + "margin_ratio": 0.0, + "strategy_returns": 0.0, "accumulated_returns": 1.0, - "accumulated_strategy_returns": 1.0, "accumulated_strategy_returns_tc": 1.0, - "margin_ratio": 0.0, + "accumulated_strategy_returns": 1.0, }, { "close_time": Timestamp("2023-09-01 14:19:59.999000+0000", tz="UTC"), @@ -329,7 +331,7 @@ "close": 55388.96, "volume": 276.690734, "quote_volume": 15295597.50785806, - "trades": 7614, + "trades": 0.0, "taker_buy_asset_volume": 145.211424, "taker_buy_quote_volume": 8027028.99029815, "returns": 0.0, @@ -338,12 +340,13 @@ "lower": 55388.96, "distance": 0.0, "side": 0, - "strategy_returns": 0.0, "strategy_returns_tc": 0.0, + "equity": 1000.0, + "margin_ratio": 0.0, + "strategy_returns": 0.0, "accumulated_returns": 1.0, - "accumulated_strategy_returns": 1.0, "accumulated_strategy_returns_tc": 1.0, - "margin_ratio": 0.0, + "accumulated_strategy_returns": 1.0, }, { "close_time": Timestamp("2023-09-01 14:29:59.999000+0000", tz="UTC"), @@ -353,7 +356,7 @@ "close": 55552.4, "volume": 149.363426, "quote_volume": 8288967.03877351, - "trades": 5260, + "trades": 1.0, "taker_buy_asset_volume": 82.67909, "taker_buy_quote_volume": 4588065.23181743, "returns": 0.002946423556387118, @@ -362,12 +365,13 @@ "lower": 55349.07787200365, "distance": 108.95999999999913, "side": -1, - "strategy_returns": 0.0, - "strategy_returns_tc": -0.001, + "strategy_returns_tc": -0.010045287044276782, + "equity": 990.0049983337502, + "margin_ratio": 0.0, + "strategy_returns": -0.009045287044276783, "accumulated_returns": 1.002950768528602, - "accumulated_strategy_returns": 1.0, - "accumulated_strategy_returns_tc": 0.999000499833375, - "margin_ratio": 0.040587319862747356, + "accumulated_strategy_returns_tc": 0.9900049983337502, + "accumulated_strategy_returns": 0.9909954984996252, }, { "close_time": Timestamp("2023-09-01 14:34:59.999000+0000", tz="UTC"), @@ -377,7 +381,7 @@ "close": 55932.48, "volume": 692.924319, "quote_volume": 38726480.58078431, - "trades": 16507, + "trades": 0.0, "taker_buy_asset_volume": 411.223017, "taker_buy_quote_volume": 22979821.33981915, "returns": 0.006818529518377586, @@ -386,12 +390,13 @@ "lower": 55345.750335190285, "distance": 307.8666666666686, "side": -1, - "strategy_returns": -0.006818529518377586, - "strategy_returns_tc": -0.006818529518377586, + "strategy_returns_tc": -0.07103510561662879, + "equity": 922.1195568198623, + "margin_ratio": 0.04524246815849952, + "strategy_returns": -0.07103510561662879, "accumulated_returns": 1.0098127857970252, - "accumulated_strategy_returns": 0.993204663909056, - "accumulated_strategy_returns_tc": 0.9922119556819863, - "margin_ratio": 0.04524246815849945, + "accumulated_strategy_returns_tc": 0.9221195568198624, + "accumulated_strategy_returns": 0.9230421375901856, }, { "close_time": Timestamp("2023-09-01 14:39:59.999000+0000", tz="UTC"), @@ -401,7 +406,7 @@ "close": 56264.93, "volume": 603.660118, "quote_volume": 33896505.6971466, - "trades": 14656, + "trades": 0.0, "taker_buy_asset_volume": 356.915883, "taker_buy_quote_volume": 20037884.70780964, "returns": 0.005926179097336494, @@ -410,12 +415,13 @@ "lower": 55560.07310791995, "distance": 348.32666666666773, "side": -1, - "strategy_returns": -0.005926179097336494, - "strategy_returns_tc": -0.005926179097336494, + "strategy_returns_tc": -0.06568887983082582, + "equity": 863.4931860652058, + "margin_ratio": 0.04780533637834203, + "strategy_returns": -0.06568887983082582, "accumulated_returns": 1.0158148844101784, - "accumulated_strategy_returns": 0.9873361612642192, - "accumulated_strategy_returns_tc": 0.9863493186065206, - "margin_ratio": 0.047805336378341966, + "accumulated_strategy_returns_tc": 0.8634931860652059, + "accumulated_strategy_returns": 0.8643571111418156, }, { "close_time": Timestamp("2023-09-01 14:44:59.999000+0000", tz="UTC"), @@ -425,7 +431,7 @@ "close": 56168.82, "volume": 370.500359, "quote_volume": 20822485.25288953, - "trades": 8616, + "trades": 0.0, "taker_buy_asset_volume": 178.075904, "taker_buy_quote_volume": 10007121.78892216, "returns": -0.00170962942015996, @@ -434,12 +440,13 @@ "lower": 55950.9934850464, "distance": 46.743333333331975, "side": -1, - "strategy_returns": 0.00170962942015996, - "strategy_returns_tc": 0.00170962942015996, + "strategy_returns_tc": 0.01935686587530768, + "equity": 880.3705270902225, + "margin_ratio": 0.047634773547172785, + "strategy_returns": 0.01935686587530768, "accumulated_returns": 1.0140797010812264, - "accumulated_strategy_returns": 0.9890255839449716, - "accumulated_strategy_returns_tc": 0.9880370527090223, - "margin_ratio": 0.04763477354717271, + "accumulated_strategy_returns_tc": 0.8803705270902226, + "accumulated_strategy_returns": 0.8812513379493414, }, { "close_time": Timestamp("2023-09-01 14:49:59.999000+0000", tz="UTC"), @@ -449,7 +456,7 @@ "close": 56191.11, "volume": 324.51432, "quote_volume": 18225087.41727558, - "trades": 8352, + "trades": 1.0, "taker_buy_asset_volume": 145.064381, "taker_buy_quote_volume": 8146012.47892439, "returns": 0.0003967606653441501, @@ -458,12 +465,13 @@ "lower": 56157.9819806691, "distance": -17.176666666659003, "side": 0, - "strategy_returns": -0.0003967606653441501, - "strategy_returns_tc": -0.0013967606653441501, + "strategy_returns_tc": -0.015788848565329142, + "equity": 866.5796476999917, + "margin_ratio": 0.0, + "strategy_returns": -0.014788848565329141, "accumulated_returns": 1.0144821278464156, - "accumulated_strategy_returns": 0.9886332553316708, - "accumulated_strategy_returns_tc": 0.9866579647699992, - "margin_ratio": 0, + "accumulated_strategy_returns_tc": 0.8665796476999919, + "accumulated_strategy_returns": 0.8683145413107047, }, { "close_time": Timestamp("2023-09-01 14:54:59.999000+0000", tz="UTC"), @@ -473,7 +481,7 @@ "close": 56145.0, "volume": 254.091606, "quote_volume": 14265787.89818125, - "trades": 6455, + "trades": 1.0, "taker_buy_asset_volume": 134.1124, "taker_buy_quote_volume": 7529521.30623853, "returns": -0.0008209293091875578, @@ -482,12 +490,13 @@ "lower": 56145.250769744416, "distance": -23.30999999999767, "side": 1, - "strategy_returns": -0.0, - "strategy_returns_tc": -0.001, + "strategy_returns_tc": -0.010045287044276782, + "equity": 857.9181826772922, + "margin_ratio": 0.04638367874221724, + "strategy_returns": -0.009045287044276783, "accumulated_returns": 1.0136496514828948, - "accumulated_strategy_returns": 0.9886332553316708, - "accumulated_strategy_returns_tc": 0.9856717999698097, - "margin_ratio": 0.0406068338420678, + "accumulated_strategy_returns_tc": 0.8579181826772923, + "accumulated_strategy_returns": 0.8604958017206752, }, { "close_time": Timestamp("2023-09-01 14:59:59.999000+0000", tz="UTC"), @@ -497,7 +506,7 @@ "close": 56182.11, "volume": 270.145731, "quote_volume": 15171017.18758856, - "trades": 7707, + "trades": 1.0, "taker_buy_asset_volume": 168.231118, "taker_buy_quote_volume": 9447425.0774598, "returns": 0.0006607487960858385, @@ -506,12 +515,13 @@ "lower": 56148.29862728937, "distance": 9.37000000000262, "side": 0, - "strategy_returns": 0.0006607487960858385, - "strategy_returns_tc": -0.00033925120391416154, + "strategy_returns_tc": -0.0034286278995133306, + "equity": 854.9817373265047, + "margin_ratio": 0.0, + "strategy_returns": -0.0024286278995133306, "accumulated_returns": 1.014319640592638, - "accumulated_strategy_returns": 0.9892867094256302, - "accumulated_strategy_returns_tc": 0.9853374663397555, - "margin_ratio": 0, + "accumulated_strategy_returns_tc": 0.8549817373265047, + "accumulated_strategy_returns": 0.8584085132586416, }, { "close_time": Timestamp("2023-09-01 15:04:59.999000+0000", tz="UTC"), @@ -521,7 +531,7 @@ "close": 56289.89, "volume": 298.797415, "quote_volume": 16804824.55255641, - "trades": 9000, + "trades": 0.0, "taker_buy_asset_volume": 139.83665, "taker_buy_quote_volume": 7864202.02549528, "returns": 0.0019165664875115606, @@ -530,12 +540,13 @@ "lower": 56130.404023653595, "distance": 84.22333333333518, "side": 0, - "strategy_returns": 0.0, "strategy_returns_tc": 0.0, + "equity": 854.9817373265047, + "margin_ratio": 0.0, + "strategy_returns": 0.0, "accumulated_returns": 1.016265515727322, - "accumulated_strategy_returns": 0.9892867094256302, - "accumulated_strategy_returns_tc": 0.9853374663397555, - "margin_ratio": 0, + "accumulated_strategy_returns_tc": 0.8549817373265047, + "accumulated_strategy_returns": 0.8584085132586416, }, - ], + ] } diff --git a/tests/backtesting/iterative/out_margin/momentum_no_trading_costs.py b/tests/backtesting/iterative/out_margin/momentum_no_trading_costs.py index 56ef140..22982e8 100644 --- a/tests/backtesting/iterative/out_margin/momentum_no_trading_costs.py +++ b/tests/backtesting/iterative/out_margin/momentum_no_trading_costs.py @@ -15,18 +15,18 @@ "close": 55388.96, "volume": 276.690734, "quote_volume": 15295597.50785806, - "trades": 7614, + "trades": 0.0, "taker_buy_asset_volume": 145.211424, "taker_buy_quote_volume": 8027028.99029815, "returns": 0.0, "rolling_returns": 0.0, "side": 0, - "strategy_returns": 0.0, "strategy_returns_tc": 0.0, + "equity": 1000.0, + "strategy_returns": 0.0, "accumulated_returns": 1.0, - "accumulated_strategy_returns": 1.0, "accumulated_strategy_returns_tc": 1.0, - "margin_ratio": 0.0, + "accumulated_strategy_returns": 1.0, }, { "close_time": Timestamp("2023-09-01 14:09:59.999000+0000", tz="UTC"), @@ -36,18 +36,18 @@ "close": 55388.96, "volume": 276.690734, "quote_volume": 15295597.50785806, - "trades": 7614, + "trades": 0.0, "taker_buy_asset_volume": 145.211424, "taker_buy_quote_volume": 8027028.99029815, "returns": 0.0, "rolling_returns": 0.0, "side": 0, - "strategy_returns": 0.0, "strategy_returns_tc": 0.0, + "equity": 1000.0, + "strategy_returns": 0.0, "accumulated_returns": 1.0, - "accumulated_strategy_returns": 1.0, "accumulated_strategy_returns_tc": 1.0, - "margin_ratio": 0.0, + "accumulated_strategy_returns": 1.0, }, { "close_time": Timestamp("2023-09-01 14:14:59.999000+0000", tz="UTC"), @@ -57,18 +57,18 @@ "close": 55388.96, "volume": 276.690734, "quote_volume": 15295597.50785806, - "trades": 7614, + "trades": 0.0, "taker_buy_asset_volume": 145.211424, "taker_buy_quote_volume": 8027028.99029815, "returns": 0.0, "rolling_returns": 0.0, "side": 0, - "strategy_returns": 0.0, "strategy_returns_tc": 0.0, + "equity": 1000.0, + "strategy_returns": 0.0, "accumulated_returns": 1.0, - "accumulated_strategy_returns": 1.0, "accumulated_strategy_returns_tc": 1.0, - "margin_ratio": 0.0, + "accumulated_strategy_returns": 1.0, }, { "close_time": Timestamp("2023-09-01 14:19:59.999000+0000", tz="UTC"), @@ -78,18 +78,18 @@ "close": 55388.96, "volume": 276.690734, "quote_volume": 15295597.50785806, - "trades": 7614, + "trades": 0.0, "taker_buy_asset_volume": 145.211424, "taker_buy_quote_volume": 8027028.99029815, "returns": 0.0, "rolling_returns": 0.0, "side": 0, - "strategy_returns": 0.0, "strategy_returns_tc": 0.0, + "equity": 1000.0, + "strategy_returns": 0.0, "accumulated_returns": 1.0, - "accumulated_strategy_returns": 1.0, "accumulated_strategy_returns_tc": 1.0, - "margin_ratio": 0.0, + "accumulated_strategy_returns": 1.0, }, { "close_time": Timestamp("2023-09-01 14:29:59.999000+0000", tz="UTC"), @@ -99,18 +99,18 @@ "close": 55552.4, "volume": 149.363426, "quote_volume": 8288967.03877351, - "trades": 5260, + "trades": 1.0, "taker_buy_asset_volume": 82.67909, "taker_buy_quote_volume": 4588065.23181743, "returns": 0.002946423556387118, "rolling_returns": 0.0007366058890967795, "side": 1, - "strategy_returns": 0.0, "strategy_returns_tc": 0.0, + "equity": 1000.0, + "strategy_returns": 0.0, "accumulated_returns": 1.002950768528602, - "accumulated_strategy_returns": 1.0, "accumulated_strategy_returns_tc": 1.0, - "margin_ratio": 0.004, + "accumulated_strategy_returns": 1.0, }, { "close_time": Timestamp("2023-09-01 14:34:59.999000+0000", tz="UTC"), @@ -120,18 +120,18 @@ "close": 55932.48, "volume": 692.924319, "quote_volume": 38726480.58078431, - "trades": 16507, + "trades": 0.0, "taker_buy_asset_volume": 411.223017, "taker_buy_quote_volume": 22979821.33981915, "returns": 0.006818529518377586, "rolling_returns": 0.002441238268691176, "side": 1, - "strategy_returns": 0.006818529518377586, "strategy_returns_tc": 0.006818529518377586, + "equity": 1006.8418286158653, + "strategy_returns": 0.006818529518377586, "accumulated_returns": 1.0098127857970252, - "accumulated_strategy_returns": 1.0068418286158654, "accumulated_strategy_returns_tc": 1.0068418286158654, - "margin_ratio": 0.004, + "accumulated_strategy_returns": 1.0068418286158654, }, { "close_time": Timestamp("2023-09-01 14:39:59.999000+0000", tz="UTC"), @@ -141,18 +141,18 @@ "close": 56264.93, "volume": 603.660118, "quote_volume": 33896505.6971466, - "trades": 14656, + "trades": 0.0, "taker_buy_asset_volume": 356.915883, "taker_buy_quote_volume": 20037884.70780964, "returns": 0.005926179097336494, "rolling_returns": 0.0039227830430252995, "side": 1, - "strategy_returns": 0.005926179097336494, "strategy_returns_tc": 0.005926179097336494, + "equity": 1012.8262685320526, + "strategy_returns": 0.005926179097336494, "accumulated_returns": 1.0158148844101784, - "accumulated_strategy_returns": 1.0128262685320526, "accumulated_strategy_returns_tc": 1.0128262685320526, - "margin_ratio": 0.004, + "accumulated_strategy_returns": 1.0128262685320526, }, { "close_time": Timestamp("2023-09-01 14:44:59.999000+0000", tz="UTC"), @@ -162,18 +162,18 @@ "close": 56168.82, "volume": 370.500359, "quote_volume": 20822485.25288953, - "trades": 8616, + "trades": 0.0, "taker_buy_asset_volume": 178.075904, "taker_buy_quote_volume": 10007121.78892216, "returns": -0.00170962942015996, "rolling_returns": 0.0034953756879853096, "side": 1, - "strategy_returns": -0.00170962942015996, "strategy_returns_tc": -0.00170962942015996, + "equity": 1011.0961902636069, + "strategy_returns": -0.00170962942015996, "accumulated_returns": 1.0140797010812264, - "accumulated_strategy_returns": 1.0110961902636069, "accumulated_strategy_returns_tc": 1.0110961902636069, - "margin_ratio": 0.004, + "accumulated_strategy_returns": 1.0110961902636069, }, { "close_time": Timestamp("2023-09-01 14:49:59.999000+0000", tz="UTC"), @@ -183,18 +183,18 @@ "close": 56191.11, "volume": 324.51432, "quote_volume": 18225087.41727558, - "trades": 8352, + "trades": 0.0, "taker_buy_asset_volume": 145.064381, "taker_buy_quote_volume": 8146012.47892439, "returns": 0.0003967606653441501, "rolling_returns": 0.0028579599652245676, "side": 1, - "strategy_returns": 0.0003967606653441501, "strategy_returns_tc": 0.0003967606653441501, + "equity": 1011.4974330541975, + "strategy_returns": 0.0003967606653441501, "accumulated_returns": 1.0144821278464156, - "accumulated_strategy_returns": 1.0114974330541975, "accumulated_strategy_returns_tc": 1.0114974330541975, - "margin_ratio": 0.004, + "accumulated_strategy_returns": 1.0114974330541975, }, { "close_time": Timestamp("2023-09-01 14:54:59.999000+0000", tz="UTC"), @@ -204,18 +204,18 @@ "close": 56145.0, "volume": 254.091606, "quote_volume": 14265787.89818125, - "trades": 6455, + "trades": 0.0, "taker_buy_asset_volume": 134.1124, "taker_buy_quote_volume": 7529521.30623853, "returns": -0.0008209293091875578, "rolling_returns": 0.0009480952583332816, "side": 1, - "strategy_returns": -0.0008209293091875578, "strategy_returns_tc": -0.0008209293091875578, + "equity": 1010.6674059086556, + "strategy_returns": -0.0008209293091875578, "accumulated_returns": 1.0136496514828948, - "accumulated_strategy_returns": 1.0106674059086556, "accumulated_strategy_returns_tc": 1.0106674059086556, - "margin_ratio": 0.004, + "accumulated_strategy_returns": 1.0106674059086556, }, { "close_time": Timestamp("2023-09-01 14:59:59.999000+0000", tz="UTC"), @@ -225,18 +225,18 @@ "close": 56182.11, "volume": 270.145731, "quote_volume": 15171017.18758856, - "trades": 7707, + "trades": 2.0, "taker_buy_asset_volume": 168.231118, "taker_buy_quote_volume": 9447425.0774598, "returns": 0.0006607487960858385, "rolling_returns": -0.0003682623169793823, "side": -1, - "strategy_returns": 0.0006607487960858385, "strategy_returns_tc": 0.0006607487960858385, + "equity": 1011.3354238520748, + "strategy_returns": 0.0006607487960858385, "accumulated_returns": 1.014319640592638, - "accumulated_strategy_returns": 1.0113354238520749, "accumulated_strategy_returns_tc": 1.0113354238520749, - "margin_ratio": 0.004004215661202738, + "accumulated_strategy_returns": 1.0113354238520749, }, { "close_time": Timestamp("2023-09-01 15:04:59.999000+0000", tz="UTC"), @@ -246,18 +246,18 @@ "close": 56289.89, "volume": 298.797415, "quote_volume": 16804824.55255641, - "trades": 9000, + "trades": 1.0, "taker_buy_asset_volume": 139.83665, "taker_buy_quote_volume": 7864202.02549528, "returns": 0.0019165664875115606, "rolling_returns": 0.0005382866599384979, "side": 0, - "strategy_returns": -0.0019165664875115606, - "strategy_returns_tc": -0.0019165664875115606, + "strategy_returns_tc": -0.0019165664875115203, + "equity": 1009.3989885173677, + "strategy_returns": -0.0019165664875115203, "accumulated_returns": 1.016265515727322, - "accumulated_strategy_returns": 1.0093989885173678, "accumulated_strategy_returns_tc": 1.0093989885173678, - "margin_ratio": 0, + "accumulated_strategy_returns": 1.0093989885173678, }, ], 10: [ @@ -269,18 +269,19 @@ "close": 55388.96, "volume": 276.690734, "quote_volume": 15295597.50785806, - "trades": 7614, + "trades": 0.0, "taker_buy_asset_volume": 145.211424, "taker_buy_quote_volume": 8027028.99029815, "returns": 0.0, "rolling_returns": 0.0, "side": 0, - "strategy_returns": 0.0, "strategy_returns_tc": 0.0, + "equity": 1000.0, + "margin_ratio": 0.0, + "strategy_returns": 0.0, "accumulated_returns": 1.0, - "accumulated_strategy_returns": 1.0, "accumulated_strategy_returns_tc": 1.0, - "margin_ratio": 0.0, + "accumulated_strategy_returns": 1.0, }, { "close_time": Timestamp("2023-09-01 14:09:59.999000+0000", tz="UTC"), @@ -290,18 +291,19 @@ "close": 55388.96, "volume": 276.690734, "quote_volume": 15295597.50785806, - "trades": 7614, + "trades": 0.0, "taker_buy_asset_volume": 145.211424, "taker_buy_quote_volume": 8027028.99029815, "returns": 0.0, "rolling_returns": 0.0, "side": 0, - "strategy_returns": 0.0, "strategy_returns_tc": 0.0, + "equity": 1000.0, + "margin_ratio": 0.0, + "strategy_returns": 0.0, "accumulated_returns": 1.0, - "accumulated_strategy_returns": 1.0, "accumulated_strategy_returns_tc": 1.0, - "margin_ratio": 0.0, + "accumulated_strategy_returns": 1.0, }, { "close_time": Timestamp("2023-09-01 14:14:59.999000+0000", tz="UTC"), @@ -311,18 +313,19 @@ "close": 55388.96, "volume": 276.690734, "quote_volume": 15295597.50785806, - "trades": 7614, + "trades": 0.0, "taker_buy_asset_volume": 145.211424, "taker_buy_quote_volume": 8027028.99029815, "returns": 0.0, "rolling_returns": 0.0, "side": 0, - "strategy_returns": 0.0, "strategy_returns_tc": 0.0, + "equity": 1000.0, + "margin_ratio": 0.0, + "strategy_returns": 0.0, "accumulated_returns": 1.0, - "accumulated_strategy_returns": 1.0, "accumulated_strategy_returns_tc": 1.0, - "margin_ratio": 0.0, + "accumulated_strategy_returns": 1.0, }, { "close_time": Timestamp("2023-09-01 14:19:59.999000+0000", tz="UTC"), @@ -332,18 +335,19 @@ "close": 55388.96, "volume": 276.690734, "quote_volume": 15295597.50785806, - "trades": 7614, + "trades": 0.0, "taker_buy_asset_volume": 145.211424, "taker_buy_quote_volume": 8027028.99029815, "returns": 0.0, "rolling_returns": 0.0, "side": 0, - "strategy_returns": 0.0, "strategy_returns_tc": 0.0, + "equity": 1000.0, + "margin_ratio": 0.0, + "strategy_returns": 0.0, "accumulated_returns": 1.0, - "accumulated_strategy_returns": 1.0, "accumulated_strategy_returns_tc": 1.0, - "margin_ratio": 0.0, + "accumulated_strategy_returns": 1.0, }, { "close_time": Timestamp("2023-09-01 14:29:59.999000+0000", tz="UTC"), @@ -353,18 +357,19 @@ "close": 55552.4, "volume": 149.363426, "quote_volume": 8288967.03877351, - "trades": 5260, + "trades": 1.0, "taker_buy_asset_volume": 82.67909, "taker_buy_quote_volume": 4588065.23181743, "returns": 0.002946423556387118, "rolling_returns": 0.0007366058890967795, "side": 1, - "strategy_returns": 0.0, "strategy_returns_tc": 0.0, + "equity": 1000.0, + "margin_ratio": 0.0, + "strategy_returns": 0.0, "accumulated_returns": 1.002950768528602, - "accumulated_strategy_returns": 1.0, "accumulated_strategy_returns_tc": 1.0, - "margin_ratio": 0.041091325886208535, + "accumulated_strategy_returns": 1.0, }, { "close_time": Timestamp("2023-09-01 14:34:59.999000+0000", tz="UTC"), @@ -374,18 +379,19 @@ "close": 55932.48, "volume": 692.924319, "quote_volume": 38726480.58078431, - "trades": 16507, + "trades": 0.0, "taker_buy_asset_volume": 411.223017, "taker_buy_quote_volume": 22979821.33981915, "returns": 0.006818529518377586, "rolling_returns": 0.002441238268691176, "side": 1, - "strategy_returns": 0.006818529518377586, - "strategy_returns_tc": 0.006818529518377586, + "strategy_returns_tc": 0.06617931756831429, + "equity": 1068.4182861586535, + "margin_ratio": 0.04000978801634217, + "strategy_returns": 0.06617931756831429, "accumulated_returns": 1.0098127857970252, - "accumulated_strategy_returns": 1.0068418286158654, - "accumulated_strategy_returns_tc": 1.0068418286158654, - "margin_ratio": 0.040009788016342196, + "accumulated_strategy_returns_tc": 1.0684182861586535, + "accumulated_strategy_returns": 1.0684182861586535, }, { "close_time": Timestamp("2023-09-01 14:39:59.999000+0000", tz="UTC"), @@ -395,18 +401,19 @@ "close": 56264.93, "volume": 603.660118, "quote_volume": 33896505.6971466, - "trades": 14656, + "trades": 0.0, "taker_buy_asset_volume": 356.915883, "taker_buy_quote_volume": 20037884.70780964, "returns": 0.005926179097336494, "rolling_returns": 0.0039227830430252995, "side": 1, - "strategy_returns": 0.005926179097336494, - "strategy_returns_tc": 0.005926179097336494, + "strategy_returns_tc": 0.054499685453103845, + "equity": 1128.2626853205259, + "margin_ratio": 0.03769466852671801, + "strategy_returns": 0.054499685453103845, "accumulated_returns": 1.0158148844101784, - "accumulated_strategy_returns": 1.0128262685320526, - "accumulated_strategy_returns_tc": 1.0128262685320526, - "margin_ratio": 0.03769466852671804, + "accumulated_strategy_returns_tc": 1.128262685320526, + "accumulated_strategy_returns": 1.128262685320526, }, { "close_time": Timestamp("2023-09-01 14:44:59.999000+0000", tz="UTC"), @@ -416,18 +423,19 @@ "close": 56168.82, "volume": 370.500359, "quote_volume": 20822485.25288953, - "trades": 8616, + "trades": 0.0, "taker_buy_asset_volume": 178.075904, "taker_buy_quote_volume": 10007121.78892216, "returns": -0.00170962942015996, "rolling_returns": 0.0034953756879853096, "side": 1, - "strategy_returns": -0.00170962942015996, - "strategy_returns_tc": -0.00170962942015996, + "strategy_returns_tc": -0.015452784008520227, + "equity": 1110.9619026360692, + "margin_ratio": 0.03667174305481815, + "strategy_returns": -0.015452784008520227, "accumulated_returns": 1.0140797010812264, - "accumulated_strategy_returns": 1.0110961902636069, - "accumulated_strategy_returns_tc": 1.0110961902636069, - "margin_ratio": 0.036671743054818164, + "accumulated_strategy_returns_tc": 1.1109619026360693, + "accumulated_strategy_returns": 1.1109619026360693, }, { "close_time": Timestamp("2023-09-01 14:49:59.999000+0000", tz="UTC"), @@ -437,18 +445,19 @@ "close": 56191.11, "volume": 324.51432, "quote_volume": 18225087.41727558, - "trades": 8352, + "trades": 0.0, "taker_buy_asset_volume": 145.064381, "taker_buy_quote_volume": 8146012.47892439, "returns": 0.0003967606653441501, "rolling_returns": 0.0028579599652245676, "side": 1, - "strategy_returns": 0.0003967606653441501, - "strategy_returns_tc": 0.0003967606653441501, + "strategy_returns_tc": 0.003605163698727144, + "equity": 1114.9743305419752, + "margin_ratio": 0.03687232321904072, + "strategy_returns": 0.003605163698727144, "accumulated_returns": 1.0144821278464156, - "accumulated_strategy_returns": 1.0114974330541975, - "accumulated_strategy_returns_tc": 1.0114974330541975, - "margin_ratio": 0.03687232321904076, + "accumulated_strategy_returns_tc": 1.1149743305419753, + "accumulated_strategy_returns": 1.1149743305419753, }, { "close_time": Timestamp("2023-09-01 14:54:59.999000+0000", tz="UTC"), @@ -458,18 +467,19 @@ "close": 56145.0, "volume": 254.091606, "quote_volume": 14265787.89818125, - "trades": 6455, + "trades": 0.0, "taker_buy_asset_volume": 134.1124, "taker_buy_quote_volume": 7529521.30623853, "returns": -0.0008209293091875578, "rolling_returns": 0.0009480952583332816, "side": 1, - "strategy_returns": -0.0008209293091875578, - "strategy_returns_tc": -0.0008209293091875578, + "strategy_returns_tc": -0.00747220857615742, + "equity": 1106.674059086556, + "margin_ratio": 0.03672697281215937, + "strategy_returns": -0.00747220857615742, "accumulated_returns": 1.0136496514828948, - "accumulated_strategy_returns": 1.0106674059086556, - "accumulated_strategy_returns_tc": 1.0106674059086556, - "margin_ratio": 0.03672697281215942, + "accumulated_strategy_returns_tc": 1.1066740590865562, + "accumulated_strategy_returns": 1.1066740590865562, }, { "close_time": Timestamp("2023-09-01 14:59:59.999000+0000", tz="UTC"), @@ -479,18 +489,19 @@ "close": 56182.11, "volume": 270.145731, "quote_volume": 15171017.18758856, - "trades": 7707, + "trades": 2.0, "taker_buy_asset_volume": 168.231118, "taker_buy_quote_volume": 9447425.0774598, "returns": 0.0006607487960858385, "rolling_returns": -0.0003682623169793823, "side": -1, - "strategy_returns": 0.0006607487960858385, - "strategy_returns_tc": 0.0006607487960858385, + "strategy_returns_tc": 0.0060181211231883315, + "equity": 1113.354238520748, + "margin_ratio": 0.036732382840055554, + "strategy_returns": 0.0060181211231883315, "accumulated_returns": 1.014319640592638, - "accumulated_strategy_returns": 1.0113354238520749, - "accumulated_strategy_returns_tc": 1.0113354238520749, - "margin_ratio": 0.04023296623621458, + "accumulated_strategy_returns_tc": 1.113354238520748, + "accumulated_strategy_returns": 1.113354238520748, }, { "close_time": Timestamp("2023-09-01 15:04:59.999000+0000", tz="UTC"), @@ -500,18 +511,19 @@ "close": 56289.89, "volume": 298.797415, "quote_volume": 16804824.55255641, - "trades": 9000, + "trades": 1.0, "taker_buy_asset_volume": 139.83665, "taker_buy_quote_volume": 7864202.02549528, "returns": 0.0019165664875115606, "rolling_returns": 0.0005382866599384979, "side": 0, - "strategy_returns": -0.0019165664875115606, - "strategy_returns_tc": -0.0019165664875115606, + "strategy_returns_tc": -0.019332994267678524, + "equity": 1092.0364992557104, + "margin_ratio": 0.0, + "strategy_returns": -0.019332994267678524, "accumulated_returns": 1.016265515727322, - "accumulated_strategy_returns": 1.0093989885173678, - "accumulated_strategy_returns_tc": 1.0093989885173678, - "margin_ratio": 0, + "accumulated_strategy_returns_tc": 1.0920364992557106, + "accumulated_strategy_returns": 1.0920364992557106, }, - ], + ] } diff --git a/tests/backtesting/iterative/out_margin/moving_average_crossover_trading_costs.py b/tests/backtesting/iterative/out_margin/moving_average_crossover_trading_costs.py index 995eea7..c8ae3e7 100644 --- a/tests/backtesting/iterative/out_margin/moving_average_crossover_trading_costs.py +++ b/tests/backtesting/iterative/out_margin/moving_average_crossover_trading_costs.py @@ -15,19 +15,19 @@ "close": 55932.48, "volume": 692.924319, "quote_volume": 38726480.58078431, - "trades": 16507, + "trades": 1.0, "taker_buy_asset_volume": 411.223017, "taker_buy_quote_volume": 22979821.33981915, "returns": 0.0, "SMA_S": 55565.7, "SMA_L": 55489.95428571429, "side": 1, + "strategy_returns_tc": 0.0, + "equity": 997.004495503373, "strategy_returns": 0.0, - "strategy_returns_tc": -0.003, "accumulated_returns": 1.0, + "accumulated_strategy_returns_tc": 1.0, "accumulated_strategy_returns": 1.0, - "accumulated_strategy_returns_tc": 0.997004495503373, - "margin_ratio": 0.004, }, { "close_time": Timestamp("2023-09-01 14:39:59.999000+0000", tz="UTC"), @@ -37,19 +37,19 @@ "close": 56264.93, "volume": 603.660118, "quote_volume": 33896505.6971466, - "trades": 14656, + "trades": 0.0, "taker_buy_asset_volume": 356.915883, "taker_buy_quote_volume": 20037884.70780964, "returns": 0.005926179097336494, "SMA_S": 55784.692500000005, "SMA_L": 55615.09285714285, "side": 1, - "strategy_returns": 0.005926179097336494, "strategy_returns_tc": 0.005926179097336494, + "equity": 1002.9304645383612, + "strategy_returns": 0.005926179097336494, "accumulated_returns": 1.0059437736356407, + "accumulated_strategy_returns_tc": 1.0059437736356407, "accumulated_strategy_returns": 1.0059437736356407, - "accumulated_strategy_returns_tc": 1.0029304645383612, - "margin_ratio": 0.004, }, { "close_time": Timestamp("2023-09-01 14:44:59.999000+0000", tz="UTC"), @@ -59,19 +59,19 @@ "close": 56168.82, "volume": 370.500359, "quote_volume": 20822485.25288953, - "trades": 8616, + "trades": 0.0, "taker_buy_asset_volume": 178.075904, "taker_buy_quote_volume": 10007121.78892216, "returns": -0.00170962942015996, "SMA_S": 55979.6575, "SMA_L": 55726.50142857143, "side": 1, - "strategy_returns": -0.00170962942015996, "strategy_returns_tc": -0.00170962942015996, + "equity": 1001.2172899739072, + "strategy_returns": -0.00170962942015996, "accumulated_returns": 1.0042254518304927, + "accumulated_strategy_returns_tc": 1.0042254518304927, "accumulated_strategy_returns": 1.0042254518304927, - "accumulated_strategy_returns_tc": 1.0012172899739071, - "margin_ratio": 0.004, }, { "close_time": Timestamp("2023-09-01 14:49:59.999000+0000", tz="UTC"), @@ -81,19 +81,19 @@ "close": 56191.11, "volume": 324.51432, "quote_volume": 18225087.41727558, - "trades": 8352, + "trades": 0.0, "taker_buy_asset_volume": 145.064381, "taker_buy_quote_volume": 8146012.47892439, "returns": 0.0003967606653441501, "SMA_S": 56139.335, "SMA_L": 55841.09428571428, "side": 1, - "strategy_returns": 0.0003967606653441501, "strategy_returns_tc": 0.0003967606653441501, + "equity": 1001.6146124277798, + "strategy_returns": 0.0003967606653441501, "accumulated_returns": 1.0046239680414673, + "accumulated_strategy_returns_tc": 1.0046239680414673, "accumulated_strategy_returns": 1.0046239680414673, - "accumulated_strategy_returns_tc": 1.0016146124277796, - "margin_ratio": 0.004, }, { "close_time": Timestamp("2023-09-01 14:54:59.999000+0000", tz="UTC"), @@ -103,19 +103,19 @@ "close": 56145.0, "volume": 254.091606, "quote_volume": 14265787.89818125, - "trades": 6455, + "trades": 0.0, "taker_buy_asset_volume": 134.1124, "taker_buy_quote_volume": 7529521.30623853, "returns": -0.0008209293091875578, "SMA_S": 56192.465000000004, "SMA_L": 55949.09999999999, "side": 1, - "strategy_returns": -0.0008209293091875578, "strategy_returns_tc": -0.0008209293091875578, + "equity": 1000.792695050119, + "strategy_returns": -0.0008209293091875578, "accumulated_returns": 1.0037995812093439, + "accumulated_strategy_returns_tc": 1.0037995812093439, "accumulated_strategy_returns": 1.0037995812093439, - "accumulated_strategy_returns_tc": 1.000792695050119, - "margin_ratio": 0.004, }, { "close_time": Timestamp("2023-09-01 14:59:59.999000+0000", tz="UTC"), @@ -125,19 +125,19 @@ "close": 56182.11, "volume": 270.145731, "quote_volume": 15171017.18758856, - "trades": 7707, + "trades": 0.0, "taker_buy_asset_volume": 168.231118, "taker_buy_quote_volume": 9447425.0774598, "returns": 0.0006607487960858385, "SMA_S": 56171.759999999995, "SMA_L": 56062.40714285715, "side": 1, - "strategy_returns": 0.0006607487960858385, "strategy_returns_tc": 0.0006607487960858385, + "equity": 1001.454186134157, + "strategy_returns": 0.0006607487960858385, "accumulated_returns": 1.0044630597463227, + "accumulated_strategy_returns_tc": 1.0044630597463227, "accumulated_strategy_returns": 1.0044630597463227, - "accumulated_strategy_returns_tc": 1.0014541861341568, - "margin_ratio": 0.004, }, { "close_time": Timestamp("2023-09-01 15:04:59.999000+0000", tz="UTC"), @@ -147,19 +147,19 @@ "close": 56289.89, "volume": 298.797415, "quote_volume": 16804824.55255641, - "trades": 9000, + "trades": 1.0, "taker_buy_asset_volume": 139.83665, "taker_buy_quote_volume": 7864202.02549528, "returns": 0.0019165664875115606, "SMA_S": 56202.027500000004, "SMA_L": 56167.76285714285, "side": 0, - "strategy_returns": 0.0019165664875115606, - "strategy_returns_tc": -0.0010834335124884395, + "strategy_returns_tc": -0.0010834335124883878, + "equity": 1000.3697646630362, + "strategy_returns": 0.0019165664875116122, "accumulated_returns": 1.0063900259741747, + "accumulated_strategy_returns_tc": 1.0033753801260084, "accumulated_strategy_returns": 1.0063900259741747, - "accumulated_strategy_returns_tc": 1.000369764663036, - "margin_ratio": 0, }, ], 10: [ @@ -171,19 +171,20 @@ "close": 55932.48, "volume": 692.924319, "quote_volume": 38726480.58078431, - "trades": 16507, + "trades": 1.0, "taker_buy_asset_volume": 411.223017, "taker_buy_quote_volume": 22979821.33981915, "returns": 0.0, "SMA_S": 55565.7, "SMA_L": 55489.95428571429, "side": 1, + "strategy_returns_tc": 0.0, + "equity": 970.04495503373, + "margin_ratio": 0.0, "strategy_returns": 0.0, - "strategy_returns_tc": -0.003, "accumulated_returns": 1.0, + "accumulated_strategy_returns_tc": 1.0, "accumulated_strategy_returns": 1.0, - "accumulated_strategy_returns_tc": 0.997004495503373, - "margin_ratio": 0.04390819079245117, }, { "close_time": Timestamp("2023-09-01 14:39:59.999000+0000", tz="UTC"), @@ -193,19 +194,20 @@ "close": 56264.93, "volume": 603.660118, "quote_volume": 33896505.6971466, - "trades": 14656, + "trades": 0.0, "taker_buy_asset_volume": 356.915883, "taker_buy_quote_volume": 20037884.70780964, "returns": 0.005926179097336494, "SMA_S": 55784.692500000005, "SMA_L": 55615.09285714285, "side": 1, - "strategy_returns": 0.005926179097336494, - "strategy_returns_tc": 0.005926179097336494, + "strategy_returns_tc": 0.059296335851582546, + "equity": 1029.304645383612, + "margin_ratio": 0.04110996916752309, + "strategy_returns": 0.059296335851582546, "accumulated_returns": 1.0059437736356407, - "accumulated_strategy_returns": 1.0059437736356407, - "accumulated_strategy_returns_tc": 1.0029304645383612, - "margin_ratio": 0.04110996916752311, + "accumulated_strategy_returns_tc": 1.061089633055018, + "accumulated_strategy_returns": 1.061089633055018, }, { "close_time": Timestamp("2023-09-01 14:44:59.999000+0000", tz="UTC"), @@ -215,19 +217,20 @@ "close": 56168.82, "volume": 370.500359, "quote_volume": 20822485.25288953, - "trades": 8616, + "trades": 0.0, "taker_buy_asset_volume": 178.075904, "taker_buy_quote_volume": 10007121.78892216, "returns": -0.00170962942015996, "SMA_S": 55979.6575, "SMA_L": 55726.50142857143, "side": 1, - "strategy_returns": -0.00170962942015996, - "strategy_returns_tc": -0.00170962942015996, + "strategy_returns_tc": -0.016784066871866978, + "equity": 1012.1728997390724, + "margin_ratio": 0.03988465437025636, + "strategy_returns": -0.016784066871866978, "accumulated_returns": 1.0042254518304927, - "accumulated_strategy_returns": 1.0042254518304927, - "accumulated_strategy_returns_tc": 1.0012172899739071, - "margin_ratio": 0.039884654370256394, + "accumulated_strategy_returns_tc": 1.0434288581026405, + "accumulated_strategy_returns": 1.0434288581026405, }, { "close_time": Timestamp("2023-09-01 14:49:59.999000+0000", tz="UTC"), @@ -237,19 +240,20 @@ "close": 56191.11, "volume": 324.51432, "quote_volume": 18225087.41727558, - "trades": 8352, + "trades": 0.0, "taker_buy_asset_volume": 145.064381, "taker_buy_quote_volume": 8146012.47892439, "returns": 0.0003967606653441501, "SMA_S": 56139.335, "SMA_L": 55841.09428571428, "side": 1, - "strategy_returns": 0.0003967606653441501, - "strategy_returns_tc": 0.0003967606653441501, + "strategy_returns_tc": 0.003917756106116597, + "equity": 1016.1461242777975, + "margin_ratio": 0.0401243898900471, + "strategy_returns": 0.003917756106116597, "accumulated_returns": 1.0046239680414673, - "accumulated_strategy_returns": 1.0046239680414673, - "accumulated_strategy_returns_tc": 1.0016146124277796, - "margin_ratio": 0.040124389890047164, + "accumulated_strategy_returns_tc": 1.0475247760475848, + "accumulated_strategy_returns": 1.0475247760475848, }, { "close_time": Timestamp("2023-09-01 14:54:59.999000+0000", tz="UTC"), @@ -259,19 +263,20 @@ "close": 56145.0, "volume": 254.091606, "quote_volume": 14265787.89818125, - "trades": 6455, + "trades": 0.0, "taker_buy_asset_volume": 134.1124, "taker_buy_quote_volume": 7529521.30623853, "returns": -0.0008209293091875578, "SMA_S": 56192.465000000004, "SMA_L": 55949.09999999999, "side": 1, - "strategy_returns": -0.0008209293091875578, - "strategy_returns_tc": -0.0008209293091875578, + "strategy_returns_tc": -0.00812146464057162, + "equity": 1007.9269505011899, + "margin_ratio": 0.039950639823381526, + "strategy_returns": -0.00812146464057162, "accumulated_returns": 1.0037995812093439, - "accumulated_strategy_returns": 1.0037995812093439, - "accumulated_strategy_returns_tc": 1.000792695050119, - "margin_ratio": 0.039950639823381574, + "accumulated_strategy_returns_tc": 1.0390517937038728, + "accumulated_strategy_returns": 1.0390517937038728, }, { "close_time": Timestamp("2023-09-01 14:59:59.999000+0000", tz="UTC"), @@ -281,19 +286,20 @@ "close": 56182.11, "volume": 270.145731, "quote_volume": 15171017.18758856, - "trades": 7707, + "trades": 0.0, "taker_buy_asset_volume": 168.231118, "taker_buy_quote_volume": 9447425.0774598, "returns": 0.0006607487960858385, "SMA_S": 56171.759999999995, "SMA_L": 56062.40714285715, "side": 1, - "strategy_returns": 0.0006607487960858385, - "strategy_returns_tc": 0.0006607487960858385, + "strategy_returns_tc": 0.006541445177869725, + "equity": 1014.5418613415692, + "margin_ratio": 0.03995710447610706, + "strategy_returns": 0.006541445177869725, "accumulated_returns": 1.0044630597463227, - "accumulated_strategy_returns": 1.0044630597463227, - "accumulated_strategy_returns_tc": 1.0014541861341568, - "margin_ratio": 0.03995710447610708, + "accumulated_strategy_returns_tc": 1.0458709733780245, + "accumulated_strategy_returns": 1.0458709733780245, }, { "close_time": Timestamp("2023-09-01 15:04:59.999000+0000", tz="UTC"), @@ -303,19 +309,21 @@ "close": 56289.89, "volume": 298.797415, "quote_volume": 16804824.55255641, - "trades": 9000, + "trades": 1.0, "taker_buy_asset_volume": 139.83665, "taker_buy_quote_volume": 7864202.02549528, "returns": 0.0019165664875115606, "SMA_S": 56202.027500000004, "SMA_L": 56167.76285714285, "side": 0, - "strategy_returns": 0.0019165664875115606, - "strategy_returns_tc": -0.0010834335124884395, + "strategy_returns_tc": -0.010746315319505905, + "equity": 1003.6976466303616, + "margin_ratio": 0.0, + "strategy_returns": -0.007746315319505905, "accumulated_returns": 1.0063900259741747, - "accumulated_strategy_returns": 1.0063900259741747, - "accumulated_strategy_returns_tc": 1.000369764663036, - "margin_ratio": 0, + "accumulated_strategy_returns_tc": 1.0346918886820677, + "accumulated_strategy_returns": 1.0378006251212206, }, - ], + ] + } diff --git a/tests/backtesting/iterative/test_iterative.py b/tests/backtesting/iterative/test_iterative.py index e7e7e76..2fb0fec 100644 --- a/tests/backtesting/iterative/test_iterative.py +++ b/tests/backtesting/iterative/test_iterative.py @@ -23,6 +23,7 @@ class TestIterativeBacktester: + @pytest.mark.parametrize( "fixture", [ diff --git a/tests/backtesting/iterative/test_iterative_with_margin.py b/tests/backtesting/iterative/test_iterative_with_margin.py index 2d9be13..eae3a47 100644 --- a/tests/backtesting/iterative/test_iterative_with_margin.py +++ b/tests/backtesting/iterative/test_iterative_with_margin.py @@ -54,7 +54,6 @@ def test_run(self, leverage, fixture, mocked_plotly_figure_show): symbol='BTCUSDT', amount=amount, trading_costs=trading_costs, - include_margin=True, leverage=leverage ) @@ -62,13 +61,15 @@ def test_run(self, leverage, fixture, mocked_plotly_figure_show): print(ite.processed_data.to_dict(orient="records")) - assert round(ite.trades[0].profit / ite.trades[0].pnl * leverage) == amount + assert round(ite.trades[0].profit / ite.trades[0].pnl) == amount - for trade in ite.trades: - assert trade.liquidation_price is not None + if leverage > 1: + for trade in ite.trades: + assert trade.liquidation_price is not None for i, d in enumerate(ite.processed_data.to_dict(orient="records")): for key in d: + print(key) assert d[key] == pytest.approx( fixture["out_margin"]["expected_results"][leverage][i][key], 0.2 ) @@ -84,7 +85,7 @@ def test_run(self, leverage, fixture, mocked_plotly_figure_show): id='invalid_leverage' ), pytest.param( - 1, + 10, 'Invalid Symbol', 1, SymbolInvalid, @@ -108,29 +109,21 @@ def test_exceptions(self, leverage, symbol, second_leverage, exception, mocked_p ite = IterativeBacktester( strategy, symbol=symbol, - include_margin=True, leverage=leverage ) ite.run(leverage=second_leverage) - @pytest.mark.parametrize( - "include_margin", - [ - pytest.param(True, id="include_margin=True"), - pytest.param(False, id="include_margin=False") - ], - ) @pytest.mark.parametrize( "margin_threshold, expected_result", [ - pytest.param(0.1, 23, id="margin_threshold=0.1"), - pytest.param(0.5, 91, id="margin_threshold=0.5"), + pytest.param(0.1, 24, id="margin_threshold=0.1"), + pytest.param(0.5, 93, id="margin_threshold=0.5"), pytest.param(1, 124, id="margin_threshold=1") ], ) def test_maximum_leverage( - self, include_margin, margin_threshold, expected_result, mocked_plotly_figure_show + self, margin_threshold, expected_result, mocked_plotly_figure_show ): test_data = data.set_index("open_time") @@ -139,7 +132,6 @@ def test_maximum_leverage( ite = IterativeBacktester( strategy_instance, symbol="BTCUSDT", - include_margin=include_margin, ) result = ite.maximum_leverage(margin_threshold=margin_threshold) diff --git a/tests/backtesting/vectorized/out/bollinger_bands_trading_costs.py b/tests/backtesting/vectorized/out/bollinger_bands_trading_costs.py index a722717..40d4c4a 100644 --- a/tests/backtesting/vectorized/out/bollinger_bands_trading_costs.py +++ b/tests/backtesting/vectorized/out/bollinger_bands_trading_costs.py @@ -14,7 +14,7 @@ "close": 55388.96, "volume": 276.690734, "quote_volume": 15295597.50785806, - "trades": 0.0, + "trades": 0, "taker_buy_asset_volume": 145.211424, "taker_buy_quote_volume": 8027028.99029815, "returns": 0.0, @@ -22,12 +22,13 @@ "upper": 55388.96, "lower": 55388.96, "distance": 0.0, - "side": 0.0, + "side": 0, "strategy_returns": 0.0, "strategy_returns_tc": 0.0, + "equity": 0, "accumulated_returns": 1.0, - "accumulated_strategy_returns": 1.0, "accumulated_strategy_returns_tc": 1.0, + "accumulated_strategy_returns": 1.0, }, { "close_time": Timestamp("2023-09-01 14:14:59.999000+0000", tz="UTC"), @@ -37,7 +38,7 @@ "close": 55388.96, "volume": 276.690734, "quote_volume": 15295597.50785806, - "trades": 0.0, + "trades": 0, "taker_buy_asset_volume": 145.211424, "taker_buy_quote_volume": 8027028.99029815, "returns": 0.0, @@ -45,12 +46,13 @@ "upper": 55388.96, "lower": 55388.96, "distance": 0.0, - "side": 0.0, + "side": 0, "strategy_returns": 0.0, "strategy_returns_tc": 0.0, + "equity": 0, "accumulated_returns": 1.0, - "accumulated_strategy_returns": 1.0, "accumulated_strategy_returns_tc": 1.0, + "accumulated_strategy_returns": 1.0, }, { "close_time": Timestamp("2023-09-01 14:19:59.999000+0000", tz="UTC"), @@ -60,7 +62,7 @@ "close": 55388.96, "volume": 276.690734, "quote_volume": 15295597.50785806, - "trades": 0.0, + "trades": 0, "taker_buy_asset_volume": 145.211424, "taker_buy_quote_volume": 8027028.99029815, "returns": 0.0, @@ -68,12 +70,13 @@ "upper": 55388.96, "lower": 55388.96, "distance": 0.0, - "side": 0.0, + "side": 0, "strategy_returns": 0.0, "strategy_returns_tc": 0.0, + "equity": 0, "accumulated_returns": 1.0, - "accumulated_strategy_returns": 1.0, "accumulated_strategy_returns_tc": 1.0, + "accumulated_strategy_returns": 1.0, }, { "close_time": Timestamp("2023-09-01 14:29:59.999000+0000", tz="UTC"), @@ -83,7 +86,7 @@ "close": 55552.4, "volume": 149.363426, "quote_volume": 8288967.03877351, - "trades": 0.0, + "trades": 0, "taker_buy_asset_volume": 82.67909, "taker_buy_quote_volume": 4588065.23181743, "returns": 0.002946423556387118, @@ -91,12 +94,13 @@ "upper": 55632.164255992706, "lower": 55254.7157440073, "distance": 108.95999999999913, - "side": 0.0, + "side": 0, "strategy_returns": 0.0, "strategy_returns_tc": 0.0, + "equity": 0, "accumulated_returns": 1.002950768528602, - "accumulated_strategy_returns": 1.0, "accumulated_strategy_returns_tc": 1.0, + "accumulated_strategy_returns": 1.0, }, { "close_time": Timestamp("2023-09-01 14:34:59.999000+0000", tz="UTC"), @@ -106,7 +110,7 @@ "close": 55932.48, "volume": 692.924319, "quote_volume": 38726480.58078431, - "trades": 0.0, + "trades": 0, "taker_buy_asset_volume": 411.223017, "taker_buy_quote_volume": 22979821.33981915, "returns": 0.006818529518377586, @@ -114,12 +118,13 @@ "upper": 56182.33932961943, "lower": 55066.887337047236, "distance": 307.8666666666686, - "side": 0.0, + "side": 0, "strategy_returns": 0.0, "strategy_returns_tc": 0.0, + "equity": 0, "accumulated_returns": 1.0098127857970252, - "accumulated_strategy_returns": 1.0, "accumulated_strategy_returns_tc": 1.0, + "accumulated_strategy_returns": 1.0, }, { "close_time": Timestamp("2023-09-01 14:39:59.999000+0000", tz="UTC"), @@ -129,7 +134,7 @@ "close": 56264.93, "volume": 603.660118, "quote_volume": 33896505.6971466, - "trades": 0.0, + "trades": 0, "taker_buy_asset_volume": 356.915883, "taker_buy_quote_volume": 20037884.70780964, "returns": 0.005926179097336494, @@ -137,12 +142,13 @@ "upper": 56629.663784160104, "lower": 55203.54288250656, "distance": 348.32666666666773, - "side": 0.0, + "side": 0, "strategy_returns": 0.0, "strategy_returns_tc": 0.0, + "equity": 0, "accumulated_returns": 1.0158148844101784, - "accumulated_strategy_returns": 1.0, "accumulated_strategy_returns_tc": 1.0, + "accumulated_strategy_returns": 1.0, }, { "close_time": Timestamp("2023-09-01 14:44:59.999000+0000", tz="UTC"), @@ -152,7 +158,7 @@ "close": 56168.82, "volume": 370.500359, "quote_volume": 20822485.25288953, - "trades": 0.0, + "trades": 0, "taker_buy_asset_volume": 178.075904, "taker_buy_quote_volume": 10007121.78892216, "returns": -0.00170962942015996, @@ -160,12 +166,13 @@ "upper": 56464.24302990721, "lower": 55779.91030342613, "distance": 46.743333333331975, - "side": 0.0, - "strategy_returns": -0.0, - "strategy_returns_tc": -0.0, + "side": 0, + "strategy_returns": 0.0, + "strategy_returns_tc": 0.0, + "equity": 0, "accumulated_returns": 1.0140797010812264, - "accumulated_strategy_returns": 1.0, "accumulated_strategy_returns_tc": 1.0, + "accumulated_strategy_returns": 1.0, }, { "close_time": Timestamp("2023-09-01 14:49:59.999000+0000", tz="UTC"), @@ -175,7 +182,7 @@ "close": 56191.11, "volume": 324.51432, "quote_volume": 18225087.41727558, - "trades": 0.0, + "trades": 0, "taker_buy_asset_volume": 145.064381, "taker_buy_quote_volume": 8146012.47892439, "returns": 0.0003967606653441501, @@ -183,12 +190,13 @@ "upper": 56308.89603866177, "lower": 56107.67729467155, "distance": -17.176666666659003, - "side": 0.0, + "side": 0, "strategy_returns": 0.0, "strategy_returns_tc": 0.0, + "equity": 0, "accumulated_returns": 1.0144821278464156, - "accumulated_strategy_returns": 1.0, "accumulated_strategy_returns_tc": 1.0, + "accumulated_strategy_returns": 1.0, }, { "close_time": Timestamp("2023-09-01 14:54:59.999000+0000", tz="UTC"), @@ -198,7 +206,7 @@ "close": 56145.0, "volume": 254.091606, "quote_volume": 14265787.89818125, - "trades": 0.0, + "trades": 0, "taker_buy_asset_volume": 134.1124, "taker_buy_quote_volume": 7529521.30623853, "returns": -0.0008209293091875578, @@ -206,12 +214,13 @@ "upper": 56214.42846051117, "lower": 56122.19153948883, "distance": -23.30999999999767, - "side": 0.0, - "strategy_returns": -0.0, - "strategy_returns_tc": -0.0, + "side": 0, + "strategy_returns": 0.0, + "strategy_returns_tc": 0.0, + "equity": 0, "accumulated_returns": 1.0136496514828948, - "accumulated_strategy_returns": 1.0, "accumulated_strategy_returns_tc": 1.0, + "accumulated_strategy_returns": 1.0, }, { "close_time": Timestamp("2023-09-01 14:59:59.999000+0000", tz="UTC"), @@ -221,7 +230,7 @@ "close": 56182.11, "volume": 270.145731, "quote_volume": 15171017.18758856, - "trades": 0.0, + "trades": 0, "taker_buy_asset_volume": 168.231118, "taker_buy_quote_volume": 9447425.0774598, "returns": 0.0006607487960858385, @@ -229,12 +238,13 @@ "upper": 56221.622745421264, "lower": 56123.85725457873, "distance": 9.37000000000262, - "side": 0.0, + "side": 0, "strategy_returns": 0.0, "strategy_returns_tc": 0.0, + "equity": 0, "accumulated_returns": 1.014319640592638, - "accumulated_strategy_returns": 1.0, "accumulated_strategy_returns_tc": 1.0, + "accumulated_strategy_returns": 1.0, }, { "close_time": Timestamp("2023-09-01 15:04:59.999000+0000", tz="UTC"), @@ -244,7 +254,7 @@ "close": 56289.89, "volume": 298.797415, "quote_volume": 16804824.55255641, - "trades": 0.0, + "trades": 0, "taker_buy_asset_volume": 139.83665, "taker_buy_quote_volume": 7864202.02549528, "returns": 0.0019165664875115606, @@ -252,11 +262,12 @@ "upper": 56356.1919526928, "lower": 56055.141380640525, "distance": 84.22333333333518, - "side": 0.0, + "side": 0, "strategy_returns": 0.0, "strategy_returns_tc": 0.0, + "equity": 0, "accumulated_returns": 1.016265515727322, - "accumulated_strategy_returns": 1.0, "accumulated_strategy_returns_tc": 1.0, + "accumulated_strategy_returns": 1.0, }, ] diff --git a/tests/backtesting/vectorized/out/momentum_no_trading_costs.py b/tests/backtesting/vectorized/out/momentum_no_trading_costs.py index 8ad9537..1a18f64 100644 --- a/tests/backtesting/vectorized/out/momentum_no_trading_costs.py +++ b/tests/backtesting/vectorized/out/momentum_no_trading_costs.py @@ -15,17 +15,18 @@ "close": 55388.96, "volume": 276.690734, "quote_volume": 15295597.50785806, - "trades": 0.0, + "trades": 0, "taker_buy_asset_volume": 145.211424, "taker_buy_quote_volume": 8027028.99029815, "returns": 0.0, "rolling_returns": 0.0, - "side": 0.0, + "side": 0, "strategy_returns": 0.0, "strategy_returns_tc": 0.0, + "equity": 1000.0, "accumulated_returns": 1.0, - "accumulated_strategy_returns": 1.0, "accumulated_strategy_returns_tc": 1.0, + "accumulated_strategy_returns": 1.0, }, { "close_time": Timestamp("2023-09-01 14:09:59.999000+0000", tz="UTC"), @@ -35,17 +36,18 @@ "close": 55388.96, "volume": 276.690734, "quote_volume": 15295597.50785806, - "trades": 0.0, + "trades": 0, "taker_buy_asset_volume": 145.211424, "taker_buy_quote_volume": 8027028.99029815, "returns": 0.0, "rolling_returns": 0.0, - "side": 0.0, + "side": 0, "strategy_returns": 0.0, "strategy_returns_tc": 0.0, + "equity": 1000.0, "accumulated_returns": 1.0, - "accumulated_strategy_returns": 1.0, "accumulated_strategy_returns_tc": 1.0, + "accumulated_strategy_returns": 1.0, }, { "close_time": Timestamp("2023-09-01 14:14:59.999000+0000", tz="UTC"), @@ -55,17 +57,18 @@ "close": 55388.96, "volume": 276.690734, "quote_volume": 15295597.50785806, - "trades": 0.0, + "trades": 0, "taker_buy_asset_volume": 145.211424, "taker_buy_quote_volume": 8027028.99029815, "returns": 0.0, "rolling_returns": 0.0, - "side": 0.0, + "side": 0, "strategy_returns": 0.0, "strategy_returns_tc": 0.0, + "equity": 1000.0, "accumulated_returns": 1.0, - "accumulated_strategy_returns": 1.0, "accumulated_strategy_returns_tc": 1.0, + "accumulated_strategy_returns": 1.0, }, { "close_time": Timestamp("2023-09-01 14:19:59.999000+0000", tz="UTC"), @@ -75,17 +78,18 @@ "close": 55388.96, "volume": 276.690734, "quote_volume": 15295597.50785806, - "trades": 0.0, + "trades": 0, "taker_buy_asset_volume": 145.211424, "taker_buy_quote_volume": 8027028.99029815, "returns": 0.0, "rolling_returns": 0.0, - "side": 0.0, + "side": 0, "strategy_returns": 0.0, "strategy_returns_tc": 0.0, + "equity": 1000.0, "accumulated_returns": 1.0, - "accumulated_strategy_returns": 1.0, "accumulated_strategy_returns_tc": 1.0, + "accumulated_strategy_returns": 1.0, }, { "close_time": Timestamp("2023-09-01 14:29:59.999000+0000", tz="UTC"), @@ -95,17 +99,18 @@ "close": 55552.4, "volume": 149.363426, "quote_volume": 8288967.03877351, - "trades": 1.0, + "trades": 1, "taker_buy_asset_volume": 82.67909, "taker_buy_quote_volume": 4588065.23181743, "returns": 0.002946423556387118, "rolling_returns": 0.0007366058890967795, - "side": 1.0, + "side": 1, "strategy_returns": 0.0, "strategy_returns_tc": 0.0, + "equity": 1000.0, "accumulated_returns": 1.002950768528602, - "accumulated_strategy_returns": 1.0, "accumulated_strategy_returns_tc": 1.0, + "accumulated_strategy_returns": 1.0, }, { "close_time": Timestamp("2023-09-01 14:34:59.999000+0000", tz="UTC"), @@ -115,17 +120,18 @@ "close": 55932.48, "volume": 692.924319, "quote_volume": 38726480.58078431, - "trades": 0.0, + "trades": 0, "taker_buy_asset_volume": 411.223017, "taker_buy_quote_volume": 22979821.33981915, "returns": 0.006818529518377586, "rolling_returns": 0.002441238268691176, - "side": 1.0, + "side": 1, "strategy_returns": 0.006818529518377586, "strategy_returns_tc": 0.006818529518377586, + "equity": 1006.8418286158653, "accumulated_returns": 1.0098127857970252, - "accumulated_strategy_returns": 1.0068418286158654, "accumulated_strategy_returns_tc": 1.0068418286158654, + "accumulated_strategy_returns": 1.0068418286158654, }, { "close_time": Timestamp("2023-09-01 14:39:59.999000+0000", tz="UTC"), @@ -135,17 +141,18 @@ "close": 56264.93, "volume": 603.660118, "quote_volume": 33896505.6971466, - "trades": 0.0, + "trades": 0, "taker_buy_asset_volume": 356.915883, "taker_buy_quote_volume": 20037884.70780964, "returns": 0.005926179097336494, "rolling_returns": 0.0039227830430252995, - "side": 1.0, + "side": 1, "strategy_returns": 0.005926179097336494, "strategy_returns_tc": 0.005926179097336494, + "equity": 1012.8262685320526, "accumulated_returns": 1.0158148844101784, - "accumulated_strategy_returns": 1.0128262685320526, "accumulated_strategy_returns_tc": 1.0128262685320526, + "accumulated_strategy_returns": 1.0128262685320526, }, { "close_time": Timestamp("2023-09-01 14:44:59.999000+0000", tz="UTC"), @@ -155,17 +162,18 @@ "close": 56168.82, "volume": 370.500359, "quote_volume": 20822485.25288953, - "trades": 0.0, + "trades": 0, "taker_buy_asset_volume": 178.075904, "taker_buy_quote_volume": 10007121.78892216, "returns": -0.00170962942015996, "rolling_returns": 0.0034953756879853096, - "side": 1.0, + "side": 1, "strategy_returns": -0.00170962942015996, "strategy_returns_tc": -0.00170962942015996, + "equity": 1011.0961902636069, "accumulated_returns": 1.0140797010812264, - "accumulated_strategy_returns": 1.0110961902636069, "accumulated_strategy_returns_tc": 1.0110961902636069, + "accumulated_strategy_returns": 1.0110961902636069, }, { "close_time": Timestamp("2023-09-01 14:49:59.999000+0000", tz="UTC"), @@ -175,17 +183,18 @@ "close": 56191.11, "volume": 324.51432, "quote_volume": 18225087.41727558, - "trades": 0.0, + "trades": 0, "taker_buy_asset_volume": 145.064381, "taker_buy_quote_volume": 8146012.47892439, "returns": 0.0003967606653441501, "rolling_returns": 0.0028579599652245676, - "side": 1.0, + "side": 1, "strategy_returns": 0.0003967606653441501, "strategy_returns_tc": 0.0003967606653441501, + "equity": 1011.4974330541975, "accumulated_returns": 1.0144821278464156, - "accumulated_strategy_returns": 1.0114974330541975, "accumulated_strategy_returns_tc": 1.0114974330541975, + "accumulated_strategy_returns": 1.0114974330541975, }, { "close_time": Timestamp("2023-09-01 14:54:59.999000+0000", tz="UTC"), @@ -195,17 +204,18 @@ "close": 56145.0, "volume": 254.091606, "quote_volume": 14265787.89818125, - "trades": 0.0, + "trades": 0, "taker_buy_asset_volume": 134.1124, "taker_buy_quote_volume": 7529521.30623853, "returns": -0.0008209293091875578, "rolling_returns": 0.0009480952583332816, - "side": 1.0, + "side": 1, "strategy_returns": -0.0008209293091875578, "strategy_returns_tc": -0.0008209293091875578, + "equity": 1010.6674059086556, "accumulated_returns": 1.0136496514828948, - "accumulated_strategy_returns": 1.0106674059086556, "accumulated_strategy_returns_tc": 1.0106674059086556, + "accumulated_strategy_returns": 1.0106674059086556, }, { "close_time": Timestamp("2023-09-01 14:59:59.999000+0000", tz="UTC"), @@ -215,17 +225,18 @@ "close": 56182.11, "volume": 270.145731, "quote_volume": 15171017.18758856, - "trades": 2.0, + "trades": 2, "taker_buy_asset_volume": 168.231118, "taker_buy_quote_volume": 9447425.0774598, "returns": 0.0006607487960858385, "rolling_returns": -0.0003682623169793823, - "side": -1.0, + "side": -1, "strategy_returns": 0.0006607487960858385, "strategy_returns_tc": 0.0006607487960858385, + "equity": 1011.3354238520748, "accumulated_returns": 1.014319640592638, - "accumulated_strategy_returns": 1.0113354238520749, "accumulated_strategy_returns_tc": 1.0113354238520749, + "accumulated_strategy_returns": 1.0113354238520749, }, { "close_time": Timestamp("2023-09-01 15:04:59.999000+0000", tz="UTC"), @@ -235,16 +246,17 @@ "close": 56289.89, "volume": 298.797415, "quote_volume": 16804824.55255641, - "trades": 1.0, + "trades": 1, "taker_buy_asset_volume": 139.83665, "taker_buy_quote_volume": 7864202.02549528, "returns": 0.0019165664875115606, "rolling_returns": 0.0005382866599384979, - "side": 0.0, - "strategy_returns": -0.0019165664875115606, - "strategy_returns_tc": -0.0019165664875115606, + "side": 0, + "strategy_returns": -0.0019165664875115203, + "strategy_returns_tc": -0.0019165664875115203, + "equity": 1009.3989885173677, "accumulated_returns": 1.016265515727322, - "accumulated_strategy_returns": 1.0093989885173678, "accumulated_strategy_returns_tc": 1.0093989885173678, + "accumulated_strategy_returns": 1.0093989885173678, }, ] diff --git a/tests/backtesting/vectorized/out/momentum_trading_costs.py b/tests/backtesting/vectorized/out/momentum_trading_costs.py index 0203fb3..775f498 100644 --- a/tests/backtesting/vectorized/out/momentum_trading_costs.py +++ b/tests/backtesting/vectorized/out/momentum_trading_costs.py @@ -14,17 +14,18 @@ "close": 55388.96, "volume": 276.690734, "quote_volume": 15295597.50785806, - "trades": 0.0, + "trades": 0, "taker_buy_asset_volume": 145.211424, "taker_buy_quote_volume": 8027028.99029815, "returns": 0.0, "rolling_returns": 0.0, - "side": 0.0, + "side": 0, "strategy_returns": 0.0, "strategy_returns_tc": 0.0, + "equity": 1000.0, "accumulated_returns": 1.0, - "accumulated_strategy_returns": 1.0, "accumulated_strategy_returns_tc": 1.0, + "accumulated_strategy_returns": 1.0, }, { "close_time": Timestamp("2023-09-01 14:09:59.999000+0000", tz="UTC"), @@ -34,17 +35,18 @@ "close": 55388.96, "volume": 276.690734, "quote_volume": 15295597.50785806, - "trades": 0.0, + "trades": 0, "taker_buy_asset_volume": 145.211424, "taker_buy_quote_volume": 8027028.99029815, "returns": 0.0, "rolling_returns": 0.0, - "side": 0.0, + "side": 0, "strategy_returns": 0.0, "strategy_returns_tc": 0.0, + "equity": 1000.0, "accumulated_returns": 1.0, - "accumulated_strategy_returns": 1.0, "accumulated_strategy_returns_tc": 1.0, + "accumulated_strategy_returns": 1.0, }, { "close_time": Timestamp("2023-09-01 14:14:59.999000+0000", tz="UTC"), @@ -54,17 +56,18 @@ "close": 55388.96, "volume": 276.690734, "quote_volume": 15295597.50785806, - "trades": 0.0, + "trades": 0, "taker_buy_asset_volume": 145.211424, "taker_buy_quote_volume": 8027028.99029815, "returns": 0.0, "rolling_returns": 0.0, - "side": 0.0, + "side": 0, "strategy_returns": 0.0, "strategy_returns_tc": 0.0, + "equity": 1000.0, "accumulated_returns": 1.0, - "accumulated_strategy_returns": 1.0, "accumulated_strategy_returns_tc": 1.0, + "accumulated_strategy_returns": 1.0, }, { "close_time": Timestamp("2023-09-01 14:19:59.999000+0000", tz="UTC"), @@ -74,17 +77,18 @@ "close": 55388.96, "volume": 276.690734, "quote_volume": 15295597.50785806, - "trades": 0.0, + "trades": 0, "taker_buy_asset_volume": 145.211424, "taker_buy_quote_volume": 8027028.99029815, "returns": 0.0, "rolling_returns": 0.0, - "side": 0.0, + "side": 0, "strategy_returns": 0.0, "strategy_returns_tc": 0.0, + "equity": 1000.0, "accumulated_returns": 1.0, - "accumulated_strategy_returns": 1.0, "accumulated_strategy_returns_tc": 1.0, + "accumulated_strategy_returns": 1.0, }, { "close_time": Timestamp("2023-09-01 14:29:59.999000+0000", tz="UTC"), @@ -94,17 +98,18 @@ "close": 55552.4, "volume": 149.363426, "quote_volume": 8288967.03877351, - "trades": 1.0, + "trades": 1, "taker_buy_asset_volume": 82.67909, "taker_buy_quote_volume": 4588065.23181743, "returns": 0.002946423556387118, "rolling_returns": 0.0007366058890967795, - "side": 1.0, - "strategy_returns": 0.0, - "strategy_returns_tc": -0.001, + "side": 1, + "strategy_returns": 3.0357660829594124e-17, + "strategy_returns_tc": -0.0009999999999999697, + "equity": 999.000499833375, "accumulated_returns": 1.002950768528602, - "accumulated_strategy_returns": 1.0, "accumulated_strategy_returns_tc": 0.999000499833375, + "accumulated_strategy_returns": 1.0, }, { "close_time": Timestamp("2023-09-01 14:34:59.999000+0000", tz="UTC"), @@ -114,17 +119,18 @@ "close": 55932.48, "volume": 692.924319, "quote_volume": 38726480.58078431, - "trades": 0.0, + "trades": 0, "taker_buy_asset_volume": 411.223017, "taker_buy_quote_volume": 22979821.33981915, "returns": 0.006818529518377586, "rolling_returns": 0.002441238268691176, - "side": 1.0, + "side": 1, "strategy_returns": 0.006818529518377586, "strategy_returns_tc": 0.006818529518377586, + "equity": 1005.8354900403988, "accumulated_returns": 1.0098127857970252, - "accumulated_strategy_returns": 1.0068418286158654, "accumulated_strategy_returns_tc": 1.0058354900403987, + "accumulated_strategy_returns": 1.0068418286158654, }, { "close_time": Timestamp("2023-09-01 14:39:59.999000+0000", tz="UTC"), @@ -134,17 +140,18 @@ "close": 56264.93, "volume": 603.660118, "quote_volume": 33896505.6971466, - "trades": 0.0, + "trades": 0, "taker_buy_asset_volume": 356.915883, "taker_buy_quote_volume": 20037884.70780964, "returns": 0.005926179097336494, "rolling_returns": 0.0039227830430252995, - "side": 1.0, + "side": 1, "strategy_returns": 0.005926179097336494, "strategy_returns_tc": 0.005926179097336494, + "equity": 1011.8139485078926, "accumulated_returns": 1.0158148844101784, + "accumulated_strategy_returns_tc": 1.0118139485078927, "accumulated_strategy_returns": 1.0128262685320526, - "accumulated_strategy_returns_tc": 1.0118139485078925, }, { "close_time": Timestamp("2023-09-01 14:44:59.999000+0000", tz="UTC"), @@ -154,17 +161,18 @@ "close": 56168.82, "volume": 370.500359, "quote_volume": 20822485.25288953, - "trades": 0.0, + "trades": 0, "taker_buy_asset_volume": 178.075904, "taker_buy_quote_volume": 10007121.78892216, "returns": -0.00170962942015996, "rolling_returns": 0.0034953756879853096, - "side": 1.0, + "side": 1, "strategy_returns": -0.00170962942015996, "strategy_returns_tc": -0.00170962942015996, + "equity": 1010.0855994529645, "accumulated_returns": 1.0140797010812264, - "accumulated_strategy_returns": 1.0110961902636069, "accumulated_strategy_returns_tc": 1.0100855994529645, + "accumulated_strategy_returns": 1.0110961902636069, }, { "close_time": Timestamp("2023-09-01 14:49:59.999000+0000", tz="UTC"), @@ -174,17 +182,18 @@ "close": 56191.11, "volume": 324.51432, "quote_volume": 18225087.41727558, - "trades": 0.0, + "trades": 0, "taker_buy_asset_volume": 145.064381, "taker_buy_quote_volume": 8146012.47892439, "returns": 0.0003967606653441501, "rolling_returns": 0.0028579599652245676, - "side": 1.0, + "side": 1, "strategy_returns": 0.0003967606653441501, "strategy_returns_tc": 0.0003967606653441501, + "equity": 1010.486441201319, "accumulated_returns": 1.0144821278464156, - "accumulated_strategy_returns": 1.0114974330541975, "accumulated_strategy_returns_tc": 1.010486441201319, + "accumulated_strategy_returns": 1.0114974330541975, }, { "close_time": Timestamp("2023-09-01 14:54:59.999000+0000", tz="UTC"), @@ -194,17 +203,18 @@ "close": 56145.0, "volume": 254.091606, "quote_volume": 14265787.89818125, - "trades": 0.0, + "trades": 0, "taker_buy_asset_volume": 134.1124, "taker_buy_quote_volume": 7529521.30623853, "returns": -0.0008209293091875578, "rolling_returns": 0.0009480952583332816, - "side": 1.0, + "side": 1, "strategy_returns": -0.0008209293091875578, "strategy_returns_tc": -0.0008209293091875578, + "equity": 1009.6572436680474, "accumulated_returns": 1.0136496514828948, - "accumulated_strategy_returns": 1.0106674059086556, "accumulated_strategy_returns_tc": 1.0096572436680475, + "accumulated_strategy_returns": 1.0106674059086556, }, { "close_time": Timestamp("2023-09-01 14:59:59.999000+0000", tz="UTC"), @@ -214,17 +224,18 @@ "close": 56182.11, "volume": 270.145731, "quote_volume": 15171017.18758856, - "trades": 2.0, + "trades": 2, "taker_buy_asset_volume": 168.231118, "taker_buy_quote_volume": 9447425.0774598, "returns": 0.0006607487960858385, "rolling_returns": -0.0003682623169793823, - "side": -1.0, - "strategy_returns": 0.0006607487960858385, - "strategy_returns_tc": -0.0013392512039141617, + "side": -1, + "strategy_returns": 0.0006607487960858527, + "strategy_returns_tc": -0.0013392512039141474, + "equity": 1008.3059640423277, "accumulated_returns": 1.014319640592638, - "accumulated_strategy_returns": 1.0113354238520749, "accumulated_strategy_returns_tc": 1.0083059640423278, + "accumulated_strategy_returns": 1.0113354238520749, }, { "close_time": Timestamp("2023-09-01 15:04:59.999000+0000", tz="UTC"), @@ -234,16 +245,17 @@ "close": 56289.89, "volume": 298.797415, "quote_volume": 16804824.55255641, - "trades": 1.0, + "trades": 1, "taker_buy_asset_volume": 139.83665, "taker_buy_quote_volume": 7864202.02549528, "returns": 0.0019165664875115606, "rolling_returns": 0.0005382866599384979, - "side": 0.0, - "strategy_returns": -0.0019165664875115606, - "strategy_returns_tc": -0.0029165664875115604, + "side": 0, + "strategy_returns": -0.0019165664875115769, + "strategy_returns_tc": -0.002916566487511577, + "equity": 1005.3694569990421, "accumulated_returns": 1.016265515727322, - "accumulated_strategy_returns": 1.0093989885173678, "accumulated_strategy_returns_tc": 1.0053694569990421, + "accumulated_strategy_returns": 1.0093989885173678, }, ] diff --git a/tests/backtesting/vectorized/out/moving_average_convergence_divergence_no_trading_costs.py b/tests/backtesting/vectorized/out/moving_average_convergence_divergence_no_trading_costs.py index ed98ea8..91dd2f1 100644 --- a/tests/backtesting/vectorized/out/moving_average_convergence_divergence_no_trading_costs.py +++ b/tests/backtesting/vectorized/out/moving_average_convergence_divergence_no_trading_costs.py @@ -17,17 +17,18 @@ "close": 56168.82, "volume": 370.500359, "quote_volume": 20822485.25288953, - "trades": 1.0, + "trades": 1, "taker_buy_asset_volume": 178.075904, "taker_buy_quote_volume": 10007121.78892216, - "returns": 0, + "returns": 0.0, "macd_diff": 37.90364648896147, "side": 1, "strategy_returns": 0.0, "strategy_returns_tc": 0.0, - "accumulated_returns": 0.9982918311637462, - "accumulated_strategy_returns": 1.0, + "equity": 1000.0, + "accumulated_returns": 1.0, "accumulated_strategy_returns_tc": 1.0, + "accumulated_strategy_returns": 1.0, }, { "close_time": Timestamp("2023-09-01 14:49:59.999000+0000", tz="UTC"), @@ -37,7 +38,7 @@ "close": 56191.11, "volume": 324.51432, "quote_volume": 18225087.41727558, - "trades": 0.0, + "trades": 0, "taker_buy_asset_volume": 145.064381, "taker_buy_quote_volume": 8146012.47892439, "returns": 0.0003967606653441501, @@ -45,9 +46,10 @@ "side": 1, "strategy_returns": 0.0003967606653441501, "strategy_returns_tc": 0.0003967606653441501, - "accumulated_returns": 0.9986879926803429, - "accumulated_strategy_returns": 1.0003968393852676, + "equity": 1000.3968393852675, + "accumulated_returns": 1.0003968393852676, "accumulated_strategy_returns_tc": 1.0003968393852676, + "accumulated_strategy_returns": 1.0003968393852676, }, { "close_time": Timestamp("2023-09-01 14:54:59.999000+0000", tz="UTC"), @@ -57,7 +59,7 @@ "close": 56145.0, "volume": 254.091606, "quote_volume": 14265787.89818125, - "trades": 2.0, + "trades": 2, "taker_buy_asset_volume": 134.1124, "taker_buy_quote_volume": 7529521.30623853, "returns": -0.0008209293091875578, @@ -65,9 +67,10 @@ "side": -1, "strategy_returns": -0.0008209293091875578, "strategy_returns_tc": -0.0008209293091875578, - "accumulated_returns": 0.9978684768647185, - "accumulated_strategy_returns": 0.9995759213029578, + "equity": 999.5759213029578, + "accumulated_returns": 0.9995759213029578, "accumulated_strategy_returns_tc": 0.9995759213029578, + "accumulated_strategy_returns": 0.9995759213029578, }, { "close_time": Timestamp("2023-09-01 14:59:59.999000+0000", tz="UTC"), @@ -77,17 +80,18 @@ "close": 56182.11, "volume": 270.145731, "quote_volume": 15171017.18758856, - "trades": 0.0, + "trades": 0, "taker_buy_asset_volume": 168.231118, "taker_buy_quote_volume": 9447425.0774598, "returns": 0.0006607487960858385, "macd_diff": -28.20911405336851, "side": -1, - "strategy_returns": -0.0006607487960858385, - "strategy_returns_tc": -0.0006607487960858385, - "accumulated_returns": 0.9985280351366296, - "accumulated_strategy_returns": 0.9989156708702213, + "strategy_returns": -0.0006607487960858446, + "strategy_returns_tc": -0.0006607487960858446, + "equity": 998.9156708702212, + "accumulated_returns": 1.0002366081395337, "accumulated_strategy_returns_tc": 0.9989156708702213, + "accumulated_strategy_returns": 0.9989156708702213, }, { "close_time": Timestamp("2023-09-01 15:04:59.999000+0000", tz="UTC"), @@ -97,16 +101,17 @@ "close": 56289.89, "volume": 298.797415, "quote_volume": 16804824.55255641, - "trades": 1.0, + "trades": 1, "taker_buy_asset_volume": 139.83665, "taker_buy_quote_volume": 7864202.02549528, "returns": 0.0019165664875115606, "macd_diff": -16.167489029180103, "side": 0, - "strategy_returns": -0.0019165664875115606, - "strategy_returns_tc": -0.0019165664875115606, - "accumulated_returns": 1.0004436155878982, - "accumulated_strategy_returns": 0.9970030160221413, + "strategy_returns": -0.0019165664875115203, + "strategy_returns_tc": -0.0019165664875115203, + "equity": 997.0030160221412, + "accumulated_returns": 1.002155466324555, "accumulated_strategy_returns_tc": 0.9970030160221413, + "accumulated_strategy_returns": 0.9970030160221413, }, ] diff --git a/tests/backtesting/vectorized/out/moving_average_crossover_trading_costs.py b/tests/backtesting/vectorized/out/moving_average_crossover_trading_costs.py index 5c0fe61..f30b2d0 100644 --- a/tests/backtesting/vectorized/out/moving_average_crossover_trading_costs.py +++ b/tests/backtesting/vectorized/out/moving_average_crossover_trading_costs.py @@ -14,18 +14,19 @@ "close": 55932.48, "volume": 692.924319, "quote_volume": 38726480.58078431, - "trades": 1.0, + "trades": 1, "taker_buy_asset_volume": 411.223017, "taker_buy_quote_volume": 22979821.33981915, - "returns": 0, + "returns": 0.0, "SMA_S": 55565.7, "SMA_L": 55489.95428571429, "side": 1, "strategy_returns": 0.0, - "strategy_returns_tc": -0.003, - "accumulated_returns": 1.0068418286158654, + "strategy_returns_tc": 0.0, + "equity": 997.004495503373, + "accumulated_returns": 1.0, + "accumulated_strategy_returns_tc": 1.0, "accumulated_strategy_returns": 1.0, - "accumulated_strategy_returns_tc": 0.997004495503373, }, { "close_time": Timestamp("2023-09-01 14:39:59.999000+0000", tz="UTC"), @@ -35,7 +36,7 @@ "close": 56264.93, "volume": 603.660118, "quote_volume": 33896505.6971466, - "trades": 0.0, + "trades": 0, "taker_buy_asset_volume": 356.915883, "taker_buy_quote_volume": 20037884.70780964, "returns": 0.005926179097336494, @@ -44,9 +45,10 @@ "side": 1, "strategy_returns": 0.005926179097336494, "strategy_returns_tc": 0.005926179097336494, - "accumulated_returns": 1.0128262685320526, + "equity": 1002.9304645383612, + "accumulated_returns": 1.0059437736356407, + "accumulated_strategy_returns_tc": 1.0059437736356407, "accumulated_strategy_returns": 1.0059437736356407, - "accumulated_strategy_returns_tc": 1.0029304645383612, }, { "close_time": Timestamp("2023-09-01 14:44:59.999000+0000", tz="UTC"), @@ -56,7 +58,7 @@ "close": 56168.82, "volume": 370.500359, "quote_volume": 20822485.25288953, - "trades": 0.0, + "trades": 0, "taker_buy_asset_volume": 178.075904, "taker_buy_quote_volume": 10007121.78892216, "returns": -0.00170962942015996, @@ -65,9 +67,10 @@ "side": 1, "strategy_returns": -0.00170962942015996, "strategy_returns_tc": -0.00170962942015996, - "accumulated_returns": 1.0110961902636069, + "equity": 1001.2172899739072, + "accumulated_returns": 1.0042254518304927, + "accumulated_strategy_returns_tc": 1.0042254518304927, "accumulated_strategy_returns": 1.0042254518304927, - "accumulated_strategy_returns_tc": 1.0012172899739071, }, { "close_time": Timestamp("2023-09-01 14:49:59.999000+0000", tz="UTC"), @@ -77,7 +80,7 @@ "close": 56191.11, "volume": 324.51432, "quote_volume": 18225087.41727558, - "trades": 0.0, + "trades": 0, "taker_buy_asset_volume": 145.064381, "taker_buy_quote_volume": 8146012.47892439, "returns": 0.0003967606653441501, @@ -86,9 +89,10 @@ "side": 1, "strategy_returns": 0.0003967606653441501, "strategy_returns_tc": 0.0003967606653441501, - "accumulated_returns": 1.0114974330541975, + "equity": 1001.6146124277798, + "accumulated_returns": 1.0046239680414673, + "accumulated_strategy_returns_tc": 1.0046239680414673, "accumulated_strategy_returns": 1.0046239680414673, - "accumulated_strategy_returns_tc": 1.0016146124277796, }, { "close_time": Timestamp("2023-09-01 14:54:59.999000+0000", tz="UTC"), @@ -98,7 +102,7 @@ "close": 56145.0, "volume": 254.091606, "quote_volume": 14265787.89818125, - "trades": 0.0, + "trades": 0, "taker_buy_asset_volume": 134.1124, "taker_buy_quote_volume": 7529521.30623853, "returns": -0.0008209293091875578, @@ -107,9 +111,10 @@ "side": 1, "strategy_returns": -0.0008209293091875578, "strategy_returns_tc": -0.0008209293091875578, - "accumulated_returns": 1.0106674059086556, + "equity": 1000.792695050119, + "accumulated_returns": 1.0037995812093439, + "accumulated_strategy_returns_tc": 1.0037995812093439, "accumulated_strategy_returns": 1.0037995812093439, - "accumulated_strategy_returns_tc": 1.000792695050119, }, { "close_time": Timestamp("2023-09-01 14:59:59.999000+0000", tz="UTC"), @@ -119,7 +124,7 @@ "close": 56182.11, "volume": 270.145731, "quote_volume": 15171017.18758856, - "trades": 0.0, + "trades": 0, "taker_buy_asset_volume": 168.231118, "taker_buy_quote_volume": 9447425.0774598, "returns": 0.0006607487960858385, @@ -128,9 +133,10 @@ "side": 1, "strategy_returns": 0.0006607487960858385, "strategy_returns_tc": 0.0006607487960858385, - "accumulated_returns": 1.0113354238520749, + "equity": 1001.454186134157, + "accumulated_returns": 1.0044630597463227, + "accumulated_strategy_returns_tc": 1.0044630597463227, "accumulated_strategy_returns": 1.0044630597463227, - "accumulated_strategy_returns_tc": 1.0014541861341568, }, { "close_time": Timestamp("2023-09-01 15:04:59.999000+0000", tz="UTC"), @@ -140,17 +146,18 @@ "close": 56289.89, "volume": 298.797415, "quote_volume": 16804824.55255641, - "trades": 1.0, + "trades": 1, "taker_buy_asset_volume": 139.83665, "taker_buy_quote_volume": 7864202.02549528, "returns": 0.0019165664875115606, "SMA_S": 56202.027500000004, "SMA_L": 56167.76285714285, "side": 0, - "strategy_returns": 0.0019165664875115606, - "strategy_returns_tc": -0.0010834335124884395, - "accumulated_returns": 1.0132755740526063, + "strategy_returns": 0.0019165664875116122, + "strategy_returns_tc": -0.0010834335124883878, + "equity": 1000.3697646630362, + "accumulated_returns": 1.0063900259741747, + "accumulated_strategy_returns_tc": 1.0033753801260084, "accumulated_strategy_returns": 1.0063900259741747, - "accumulated_strategy_returns_tc": 1.000369764663036, }, ] diff --git a/tests/backtesting/vectorized/out/moving_average_no_trading_costs.py b/tests/backtesting/vectorized/out/moving_average_no_trading_costs.py index 415c93a..09aa281 100644 --- a/tests/backtesting/vectorized/out/moving_average_no_trading_costs.py +++ b/tests/backtesting/vectorized/out/moving_average_no_trading_costs.py @@ -23,9 +23,10 @@ "side": 0, "strategy_returns": 0.0, "strategy_returns_tc": 0.0, + "equity": 1000.0, "accumulated_returns": 1.0, - "accumulated_strategy_returns": 1.0, "accumulated_strategy_returns_tc": 1.0, + "accumulated_strategy_returns": 1.0, }, { "close_time": Timestamp("2023-09-01 14:19:59.999000+0000", tz="UTC"), @@ -43,9 +44,10 @@ "side": 0, "strategy_returns": 0.0, "strategy_returns_tc": 0.0, + "equity": 1000.0, "accumulated_returns": 1.0, - "accumulated_strategy_returns": 1.0, "accumulated_strategy_returns_tc": 1.0, + "accumulated_strategy_returns": 1.0, }, { "close_time": Timestamp("2023-09-01 14:29:59.999000+0000", tz="UTC"), @@ -63,9 +65,10 @@ "side": 1, "strategy_returns": 0.0, "strategy_returns_tc": 0.0, + "equity": 1000.0, "accumulated_returns": 1.002950768528602, - "accumulated_strategy_returns": 1.0, "accumulated_strategy_returns_tc": 1.0, + "accumulated_strategy_returns": 1.0, }, { "close_time": Timestamp("2023-09-01 14:34:59.999000+0000", tz="UTC"), @@ -83,9 +86,10 @@ "side": 1, "strategy_returns": 0.006818529518377586, "strategy_returns_tc": 0.006818529518377586, + "equity": 1006.8418286158653, "accumulated_returns": 1.0098127857970252, - "accumulated_strategy_returns": 1.0068418286158654, "accumulated_strategy_returns_tc": 1.0068418286158654, + "accumulated_strategy_returns": 1.0068418286158654, }, { "close_time": Timestamp("2023-09-01 14:39:59.999000+0000", tz="UTC"), @@ -103,9 +107,10 @@ "side": 1, "strategy_returns": 0.005926179097336494, "strategy_returns_tc": 0.005926179097336494, + "equity": 1012.8262685320526, "accumulated_returns": 1.0158148844101784, - "accumulated_strategy_returns": 1.0128262685320526, "accumulated_strategy_returns_tc": 1.0128262685320526, + "accumulated_strategy_returns": 1.0128262685320526, }, { "close_time": Timestamp("2023-09-01 14:44:59.999000+0000", tz="UTC"), @@ -123,9 +128,10 @@ "side": 1, "strategy_returns": -0.00170962942015996, "strategy_returns_tc": -0.00170962942015996, + "equity": 1011.0961902636069, "accumulated_returns": 1.0140797010812264, - "accumulated_strategy_returns": 1.0110961902636069, "accumulated_strategy_returns_tc": 1.0110961902636069, + "accumulated_strategy_returns": 1.0110961902636069, }, { "close_time": Timestamp("2023-09-01 14:49:59.999000+0000", tz="UTC"), @@ -143,9 +149,10 @@ "side": 1, "strategy_returns": 0.0003967606653441501, "strategy_returns_tc": 0.0003967606653441501, + "equity": 1011.4974330541975, "accumulated_returns": 1.0144821278464156, - "accumulated_strategy_returns": 1.0114974330541975, "accumulated_strategy_returns_tc": 1.0114974330541975, + "accumulated_strategy_returns": 1.0114974330541975, }, { "close_time": Timestamp("2023-09-01 14:54:59.999000+0000", tz="UTC"), @@ -163,9 +170,10 @@ "side": -1, "strategy_returns": -0.0008209293091875578, "strategy_returns_tc": -0.0008209293091875578, + "equity": 1010.6674059086556, "accumulated_returns": 1.0136496514828948, - "accumulated_strategy_returns": 1.0106674059086556, "accumulated_strategy_returns_tc": 1.0106674059086556, + "accumulated_strategy_returns": 1.0106674059086556, }, { "close_time": Timestamp("2023-09-01 14:59:59.999000+0000", tz="UTC"), @@ -181,11 +189,12 @@ "returns": 0.0006607487960858385, "SMA": 56171.759999999995, "side": 1, - "strategy_returns": -0.0006607487960858385, - "strategy_returns_tc": -0.0006607487960858385, + "strategy_returns": -0.0006607487960858446, + "strategy_returns_tc": -0.0006607487960858446, + "equity": 1009.9998292114958, "accumulated_returns": 1.014319640592638, - "accumulated_strategy_returns": 1.0099998292114958, "accumulated_strategy_returns_tc": 1.0099998292114958, + "accumulated_strategy_returns": 1.0099998292114958, }, { "close_time": Timestamp("2023-09-01 15:04:59.999000+0000", tz="UTC"), @@ -203,8 +212,12 @@ "side": 0, "strategy_returns": 0.0019165664875115606, "strategy_returns_tc": 0.0019165664875115606, + "equity": 1011.9374172015591, "accumulated_returns": 1.016265515727322, - "accumulated_strategy_returns": 1.0119374172015592, "accumulated_strategy_returns_tc": 1.0119374172015592, + "accumulated_strategy_returns": 1.0119374172015592, }, ] + + + diff --git a/tests/backtesting/vectorized/out_margin/bollinger_bands_no_trading_costs.py b/tests/backtesting/vectorized/out_margin/bollinger_bands_no_trading_costs.py index dd7fd16..d779005 100644 --- a/tests/backtesting/vectorized/out_margin/bollinger_bands_no_trading_costs.py +++ b/tests/backtesting/vectorized/out_margin/bollinger_bands_no_trading_costs.py @@ -1,3 +1,4 @@ +import numpy as np from pandas import Timestamp @@ -22,10 +23,10 @@ "side": 0, "strategy_returns": 0.0, "strategy_returns_tc": 0.0, + "equity": 1000.0, "accumulated_returns": 1.0, - "accumulated_strategy_returns": 1.0, "accumulated_strategy_returns_tc": 1.0, - "margin_ratio": 0.0, + "accumulated_strategy_returns": 1.0, }, { "close_time": Timestamp("2023-09-01 14:19:59.999000+0000", tz="UTC"), @@ -46,10 +47,10 @@ "side": 0, "strategy_returns": 0.0, "strategy_returns_tc": 0.0, + "equity": 1000.0, "accumulated_returns": 1.0, - "accumulated_strategy_returns": 1.0, "accumulated_strategy_returns_tc": 1.0, - "margin_ratio": 0.0, + "accumulated_strategy_returns": 1.0, }, { "close_time": Timestamp("2023-09-01 14:29:59.999000+0000", tz="UTC"), @@ -70,10 +71,10 @@ "side": -1, "strategy_returns": 0.0, "strategy_returns_tc": 0.0, + "equity": 1000.0, "accumulated_returns": 1.002950768528602, - "accumulated_strategy_returns": 1.0, "accumulated_strategy_returns_tc": 1.0, - "margin_ratio": 0.004002528142238611, + "accumulated_strategy_returns": 1.0, }, { "close_time": Timestamp("2023-09-01 14:34:59.999000+0000", tz="UTC"), @@ -92,12 +93,12 @@ "lower": 55309.32884093565, "distance": 366.7800000000061, "side": -1, - "strategy_returns": -0.006818529518377586, - "strategy_returns_tc": -0.006818529518377586, + "strategy_returns": -0.006818529518377635, + "strategy_returns_tc": -0.006818529518377635, + "equity": 993.2046639090561, "accumulated_returns": 1.0098127857970252, - "accumulated_strategy_returns": 0.993204663909056, "accumulated_strategy_returns_tc": 0.993204663909056, - "margin_ratio": 0.004077834681277391, + "accumulated_strategy_returns": 0.993204663909056, }, { "close_time": Timestamp("2023-09-01 14:39:59.999000+0000", tz="UTC"), @@ -116,12 +117,12 @@ "lower": 55391.82559349731, "distance": 480.23749999999563, "side": -1, - "strategy_returns": -0.005926179097336494, - "strategy_returns_tc": -0.005926179097336494, + "strategy_returns": -0.005926179097336547, + "strategy_returns_tc": -0.005926179097336547, + "equity": 987.3361612642191, "accumulated_returns": 1.0158148844101784, - "accumulated_strategy_returns": 0.9873361612642192, - "accumulated_strategy_returns_tc": 0.9873361612642192, - "margin_ratio": 0.004114014876268444, + "accumulated_strategy_returns_tc": 0.9873361612642191, + "accumulated_strategy_returns": 0.9873361612642191, }, { "close_time": Timestamp("2023-09-01 14:44:59.999000+0000", tz="UTC"), @@ -140,12 +141,12 @@ "lower": 55662.41020504175, "distance": 189.16249999999854, "side": -1, - "strategy_returns": 0.00170962942015996, - "strategy_returns_tc": 0.00170962942015996, + "strategy_returns": 0.0017096294201600275, + "strategy_returns_tc": 0.0017096294201600275, + "equity": 989.0255839449717, "accumulated_returns": 1.0140797010812264, - "accumulated_strategy_returns": 0.9890255839449716, "accumulated_strategy_returns_tc": 0.9890255839449716, - "margin_ratio": 0.004111708957739713, + "accumulated_strategy_returns": 0.9890255839449716, }, { "close_time": Timestamp("2023-09-01 14:49:59.999000+0000", tz="UTC"), @@ -164,12 +165,12 @@ "lower": 55995.444867259794, "distance": 51.775000000001455, "side": -1, - "strategy_returns": -0.0003967606653441501, - "strategy_returns_tc": -0.0003967606653441501, + "strategy_returns": -0.0003967606653441885, + "strategy_returns_tc": -0.0003967606653441885, + "equity": 988.6332553316707, "accumulated_returns": 1.0144821278464156, - "accumulated_strategy_returns": 0.9886332553316708, - "accumulated_strategy_returns_tc": 0.9886332553316708, - "margin_ratio": 0.004104691162420367, + "accumulated_strategy_returns_tc": 0.9886332553316707, + "accumulated_strategy_returns": 0.9886332553316707, }, { "close_time": Timestamp("2023-09-01 14:54:59.999000+0000", tz="UTC"), @@ -188,12 +189,12 @@ "lower": 56140.61578110526, "distance": -47.46500000000378, "side": 0, - "strategy_returns": 0.0008209293091875578, - "strategy_returns_tc": 0.0008209293091875578, + "strategy_returns": 0.0008209293091876349, + "strategy_returns_tc": 0.0008209293091876349, + "equity": 989.4451865704872, "accumulated_returns": 1.0136496514828948, - "accumulated_strategy_returns": 0.9894451865704871, "accumulated_strategy_returns_tc": 0.9894451865704871, - "margin_ratio": 0.0, + "accumulated_strategy_returns": 0.9894451865704871, }, { "close_time": Timestamp("2023-09-01 14:59:59.999000+0000", tz="UTC"), @@ -214,10 +215,10 @@ "side": 0, "strategy_returns": 0.0, "strategy_returns_tc": 0.0, + "equity": 989.4451865704872, "accumulated_returns": 1.014319640592638, - "accumulated_strategy_returns": 0.9894451865704871, "accumulated_strategy_returns_tc": 0.9894451865704871, - "margin_ratio": 0.0, + "accumulated_strategy_returns": 0.9894451865704871, }, { "close_time": Timestamp("2023-09-01 15:04:59.999000+0000", tz="UTC"), @@ -238,12 +239,13 @@ "side": 0, "strategy_returns": 0.0, "strategy_returns_tc": 0.0, + "equity": 989.4451865704872, "accumulated_returns": 1.016265515727322, - "accumulated_strategy_returns": 0.9894451865704871, "accumulated_strategy_returns_tc": 0.9894451865704871, - "margin_ratio": 0.0, + "accumulated_strategy_returns": 0.9894451865704871, }, - ], + ] + , 10: [ { "close_time": Timestamp("2023-09-01 14:14:59.999000+0000", tz="UTC"), @@ -264,10 +266,11 @@ "side": 0, "strategy_returns": 0.0, "strategy_returns_tc": 0.0, + "margin_ratio": 0.0, + "equity": 1000.0, "accumulated_returns": 1.0, - "accumulated_strategy_returns": 1.0, "accumulated_strategy_returns_tc": 1.0, - "margin_ratio": 0.0, + "accumulated_strategy_returns": 1.0, }, { "close_time": Timestamp("2023-09-01 14:19:59.999000+0000", tz="UTC"), @@ -288,10 +291,263 @@ "side": 0, "strategy_returns": 0.0, "strategy_returns_tc": 0.0, + "margin_ratio": 0.0, + "equity": 1000.0, "accumulated_returns": 1.0, + "accumulated_strategy_returns_tc": 1.0, "accumulated_strategy_returns": 1.0, + }, + { + "close_time": Timestamp("2023-09-01 14:29:59.999000+0000", tz="UTC"), + "open": 55388.95, + "high": 55569.95, + "low": 55388.95, + "close": 55552.4, + "volume": 149.363426, + "quote_volume": 8288967.03877351, + "trades": 1, + "taker_buy_asset_volume": 82.67909, + "taker_buy_quote_volume": 4588065.23181743, + "returns": 0.002946423556387118, + "sma": 55429.82000000001, + "upper": 55511.54000000001, + "lower": 55348.100000000006, + "distance": 122.57999999999447, + "side": -1, + "strategy_returns": 0.0, + "strategy_returns_tc": 0.0, + "margin_ratio": 0.0, + "equity": 1000.0, + "accumulated_returns": 1.002950768528602, "accumulated_strategy_returns_tc": 1.0, + "accumulated_strategy_returns": 1.0, + }, + { + "close_time": Timestamp("2023-09-01 14:34:59.999000+0000", tz="UTC"), + "open": 55550.89, + "high": 56087.68, + "low": 55550.89, + "close": 55932.48, + "volume": 692.924319, + "quote_volume": 38726480.58078431, + "trades": 0, + "taker_buy_asset_volume": 411.223017, + "taker_buy_quote_volume": 22979821.33981915, + "returns": 0.006818529518377586, + "sma": 55565.7, + "upper": 55822.07115906435, + "lower": 55309.32884093565, + "distance": 366.7800000000061, + "side": -1, + "strategy_returns": -0.07037242360594073, + "strategy_returns_tc": -0.07037242360594073, + "margin_ratio": 0.044691734595494845, + "equity": 932.0466390905603, + "accumulated_returns": 1.0098127857970252, + "accumulated_strategy_returns_tc": 0.9320466390905604, + "accumulated_strategy_returns": 0.9320466390905604, + }, + { + "close_time": Timestamp("2023-09-01 14:39:59.999000+0000", tz="UTC"), + "open": 55932.48, + "high": 56333.0, + "low": 55932.48, + "close": 56264.93, + "volume": 603.660118, + "quote_volume": 33896505.6971466, + "trades": 0, + "taker_buy_asset_volume": 356.915883, + "taker_buy_quote_volume": 20037884.70780964, + "returns": 0.005926179097336494, + "sma": 55784.692500000005, + "upper": 56177.559406502696, + "lower": 55391.82559349731, + "distance": 480.23749999999563, + "side": -1, + "strategy_returns": -0.06503316692540898, + "strategy_returns_tc": -0.06503316692540898, + "margin_ratio": 0.04719350568838702, + "equity": 873.3616126421903, + "accumulated_returns": 1.0158148844101784, + "accumulated_strategy_returns_tc": 0.8733616126421903, + "accumulated_strategy_returns": 0.8733616126421903, + }, + { + "close_time": Timestamp("2023-09-01 14:44:59.999000+0000", tz="UTC"), + "open": 56260.11, + "high": 56317.43, + "low": 56118.31, + "close": 56168.82, + "volume": 370.500359, + "quote_volume": 20822485.25288953, + "trades": 0, + "taker_buy_asset_volume": 178.075904, + "taker_buy_quote_volume": 10007121.78892216, + "returns": -0.00170962942015996, + "sma": 55979.6575, + "upper": 56296.90479495825, + "lower": 55662.41020504175, + "distance": 189.16249999999854, + "side": -1, + "strategy_returns": 0.01915919302253324, + "strategy_returns_tc": 0.01915919302253324, + "margin_ratio": 0.04702710737107565, + "equity": 890.2558394497161, + "accumulated_returns": 1.0140797010812264, + "accumulated_strategy_returns_tc": 0.890255839449716, + "accumulated_strategy_returns": 0.890255839449716, + }, + { + "close_time": Timestamp("2023-09-01 14:49:59.999000+0000", tz="UTC"), + "open": 56168.82, + "high": 56269.99, + "low": 56080.96, + "close": 56191.11, + "volume": 324.51432, + "quote_volume": 18225087.41727558, + "trades": 0, + "taker_buy_asset_volume": 145.064381, + "taker_buy_quote_volume": 8146012.47892439, + "returns": 0.0003967606653441501, + "sma": 56139.335, + "upper": 56283.225132740205, + "lower": 55995.444867259794, + "distance": 51.775000000001455, + "side": -1, + "strategy_returns": -0.004416658947643235, + "strategy_returns_tc": -0.004416658947643235, + "margin_ratio": 0.04652671441712397, + "equity": 886.3325533167066, + "accumulated_returns": 1.0144821278464156, + "accumulated_strategy_returns_tc": 0.8863325533167066, + "accumulated_strategy_returns": 0.8863325533167066, + }, + { + "close_time": Timestamp("2023-09-01 14:54:59.999000+0000", tz="UTC"), + "open": 56191.11, + "high": 56200.0, + "low": 56107.98, + "close": 56145.0, + "volume": 254.091606, + "quote_volume": 14265787.89818125, + "trades": 1, + "taker_buy_asset_volume": 134.1124, + "taker_buy_quote_volume": 7529521.30623853, + "returns": -0.0008209293091875578, + "sma": 56192.465000000004, + "upper": 56244.314218894746, + "lower": 56140.61578110526, + "distance": -47.46500000000378, + "side": 0, + "strategy_returns": 0.009118867577638448, + "strategy_returns_tc": 0.009118867577638448, + "margin_ratio": 0.0, + "equity": 894.4518657048711, + "accumulated_returns": 1.0136496514828948, + "accumulated_strategy_returns_tc": 0.8944518657048711, + "accumulated_strategy_returns": 0.8944518657048711, + }, + { + "close_time": Timestamp("2023-09-01 14:59:59.999000+0000", tz="UTC"), + "open": 56145.0, + "high": 56211.7, + "low": 56106.97, + "close": 56182.11, + "volume": 270.145731, + "quote_volume": 15171017.18758856, + "trades": 0, + "taker_buy_asset_volume": 168.231118, + "taker_buy_quote_volume": 9447425.0774598, + "returns": 0.0006607487960858385, + "sma": 56171.759999999995, + "upper": 56191.812316574265, + "lower": 56151.707683425724, + "distance": 10.35000000000582, + "side": 0, + "strategy_returns": 0.0, + "strategy_returns_tc": 0.0, + "margin_ratio": 0.0, + "equity": 894.4518657048711, + "accumulated_returns": 1.014319640592638, + "accumulated_strategy_returns_tc": 0.8944518657048711, + "accumulated_strategy_returns": 0.8944518657048711, + }, + { + "close_time": Timestamp("2023-09-01 15:04:59.999000+0000", tz="UTC"), + "open": 56182.12, + "high": 56299.78, + "low": 56172.09, + "close": 56289.89, + "volume": 298.797415, + "quote_volume": 16804824.55255641, + "trades": 0, + "taker_buy_asset_volume": 139.83665, + "taker_buy_quote_volume": 7864202.02549528, + "returns": 0.0019165664875115606, + "sma": 56202.027500000004, + "upper": 56263.908712213364, + "lower": 56140.14628778664, + "distance": 87.86249999999563, + "side": 0, + "strategy_returns": 0.0, + "strategy_returns_tc": 0.0, + "margin_ratio": 0.0, + "equity": 894.4518657048711, + "accumulated_returns": 1.016265515727322, + "accumulated_strategy_returns_tc": 0.8944518657048711, + "accumulated_strategy_returns": 0.8944518657048711, + }, + ], + 100: [ + { + "close_time": Timestamp("2023-09-01 14:14:59.999000+0000", tz="UTC"), + "open": 55306.46, + "high": 55399.68, + "low": 55217.22, + "close": 55388.96, + "volume": 276.690734, + "quote_volume": 15295597.50785806, + "trades": 0, + "taker_buy_asset_volume": 145.211424, + "taker_buy_quote_volume": 8027028.99029815, + "returns": 0.0, + "sma": 55388.96, + "upper": 55388.96, + "lower": 55388.96, + "distance": 0.0, + "side": 0, + "strategy_returns": 0.0, + "strategy_returns_tc": 0.0, "margin_ratio": 0.0, + "equity": 1000.0, + "accumulated_returns": 1.0, + "accumulated_strategy_returns_tc": 1.0, + "accumulated_strategy_returns": 1.0, + }, + { + "close_time": Timestamp("2023-09-01 14:19:59.999000+0000", tz="UTC"), + "open": 55306.46, + "high": 55399.68, + "low": 55217.22, + "close": 55388.96, + "volume": 276.690734, + "quote_volume": 15295597.50785806, + "trades": 0, + "taker_buy_asset_volume": 145.211424, + "taker_buy_quote_volume": 8027028.99029815, + "returns": 0.0, + "sma": 55388.96, + "upper": 55388.96, + "lower": 55388.96, + "distance": 0.0, + "side": 0, + "strategy_returns": 0.0, + "strategy_returns_tc": 0.0, + "margin_ratio": 0.0, + "equity": 1000.0, + "accumulated_returns": 1.0, + "accumulated_strategy_returns_tc": 1.0, + "accumulated_strategy_returns": 1.0, }, { "close_time": Timestamp("2023-09-01 14:29:59.999000+0000", tz="UTC"), @@ -312,10 +568,11 @@ "side": -1, "strategy_returns": 0.0, "strategy_returns_tc": 0.0, + "margin_ratio": 0.0, + "equity": 1000.0, "accumulated_returns": 1.002950768528602, - "accumulated_strategy_returns": 1.0, "accumulated_strategy_returns_tc": 1.0, - "margin_ratio": 0.04013944442538307, + "accumulated_strategy_returns": 1.0, }, { "close_time": Timestamp("2023-09-01 14:34:59.999000+0000", tz="UTC"), @@ -334,12 +591,13 @@ "lower": 55309.32884093565, "distance": 366.7800000000061, "side": -1, - "strategy_returns": -0.006818529518377586, - "strategy_returns_tc": -0.006818529518377586, + "strategy_returns": -np.inf, + "strategy_returns_tc": -np.inf, + "margin_ratio": 1.0, + "equity": 0.0, "accumulated_returns": 1.0098127857970252, - "accumulated_strategy_returns": 0.993204663909056, - "accumulated_strategy_returns_tc": 0.993204663909056, - "margin_ratio": 0.04469173459549476, + "accumulated_strategy_returns_tc": 0.0, + "accumulated_strategy_returns": 0.0, }, { "close_time": Timestamp("2023-09-01 14:39:59.999000+0000", tz="UTC"), @@ -358,12 +616,13 @@ "lower": 55391.82559349731, "distance": 480.23749999999563, "side": -1, - "strategy_returns": -0.005926179097336494, - "strategy_returns_tc": -0.005926179097336494, + "strategy_returns": 0.0, + "strategy_returns_tc": 0.0, + "margin_ratio": 1.0, + "equity": 0.0, "accumulated_returns": 1.0158148844101784, - "accumulated_strategy_returns": 0.9873361612642192, - "accumulated_strategy_returns_tc": 0.9873361612642192, - "margin_ratio": 0.04719350568838694, + "accumulated_strategy_returns_tc": 0.0, + "accumulated_strategy_returns": 0.0, }, { "close_time": Timestamp("2023-09-01 14:44:59.999000+0000", tz="UTC"), @@ -382,12 +641,13 @@ "lower": 55662.41020504175, "distance": 189.16249999999854, "side": -1, - "strategy_returns": 0.00170962942015996, - "strategy_returns_tc": 0.00170962942015996, + "strategy_returns": 0.0, + "strategy_returns_tc": 0.0, + "margin_ratio": 1.0, + "equity": 0.0, "accumulated_returns": 1.0140797010812264, - "accumulated_strategy_returns": 0.9890255839449716, - "accumulated_strategy_returns_tc": 0.9890255839449716, - "margin_ratio": 0.047027107371075544, + "accumulated_strategy_returns_tc": 0.0, + "accumulated_strategy_returns": 0.0, }, { "close_time": Timestamp("2023-09-01 14:49:59.999000+0000", tz="UTC"), @@ -406,12 +666,13 @@ "lower": 55995.444867259794, "distance": 51.775000000001455, "side": -1, - "strategy_returns": -0.0003967606653441501, - "strategy_returns_tc": -0.0003967606653441501, + "strategy_returns": 0.0, + "strategy_returns_tc": 0.0, + "margin_ratio": 1.0, + "equity": 0.0, "accumulated_returns": 1.0144821278464156, - "accumulated_strategy_returns": 0.9886332553316708, - "accumulated_strategy_returns_tc": 0.9886332553316708, - "margin_ratio": 0.04652671441712397, + "accumulated_strategy_returns_tc": 0.0, + "accumulated_strategy_returns": 0.0, }, { "close_time": Timestamp("2023-09-01 14:54:59.999000+0000", tz="UTC"), @@ -430,12 +691,13 @@ "lower": 56140.61578110526, "distance": -47.46500000000378, "side": 0, - "strategy_returns": 0.0008209293091875578, - "strategy_returns_tc": 0.0008209293091875578, - "accumulated_returns": 1.0136496514828948, - "accumulated_strategy_returns": 0.9894451865704871, - "accumulated_strategy_returns_tc": 0.9894451865704871, + "strategy_returns": 0.0, + "strategy_returns_tc": 0.0, "margin_ratio": 0.0, + "equity": 0.0, + "accumulated_returns": 1.0136496514828948, + "accumulated_strategy_returns_tc": 0.0, + "accumulated_strategy_returns": 0.0, }, { "close_time": Timestamp("2023-09-01 14:59:59.999000+0000", tz="UTC"), @@ -456,10 +718,11 @@ "side": 0, "strategy_returns": 0.0, "strategy_returns_tc": 0.0, - "accumulated_returns": 1.014319640592638, - "accumulated_strategy_returns": 0.9894451865704871, - "accumulated_strategy_returns_tc": 0.9894451865704871, "margin_ratio": 0.0, + "equity": 0.0, + "accumulated_returns": 1.014319640592638, + "accumulated_strategy_returns_tc": 0.0, + "accumulated_strategy_returns": 0.0, }, { "close_time": Timestamp("2023-09-01 15:04:59.999000+0000", tz="UTC"), @@ -480,10 +743,11 @@ "side": 0, "strategy_returns": 0.0, "strategy_returns_tc": 0.0, - "accumulated_returns": 1.016265515727322, - "accumulated_strategy_returns": 0.9894451865704871, - "accumulated_strategy_returns_tc": 0.9894451865704871, "margin_ratio": 0.0, + "equity": 0.0, + "accumulated_returns": 1.016265515727322, + "accumulated_strategy_returns_tc": 0.0, + "accumulated_strategy_returns": 0.0, }, - ], + ] } diff --git a/tests/backtesting/vectorized/out_margin/bollinger_bands_trading_costs.py b/tests/backtesting/vectorized/out_margin/bollinger_bands_trading_costs.py index 1f811dc..67e46d5 100644 --- a/tests/backtesting/vectorized/out_margin/bollinger_bands_trading_costs.py +++ b/tests/backtesting/vectorized/out_margin/bollinger_bands_trading_costs.py @@ -26,10 +26,10 @@ "side": 0, "strategy_returns": 0.0, "strategy_returns_tc": 0.0, + "equity": 0, "accumulated_returns": 1.0, - "accumulated_strategy_returns": 1.0, "accumulated_strategy_returns_tc": 1.0, - "margin_ratio": 0, + "accumulated_strategy_returns": 1.0, }, { "close_time": Timestamp("2023-09-01 14:14:59.999000+0000", tz="UTC"), @@ -50,10 +50,10 @@ "side": 0, "strategy_returns": 0.0, "strategy_returns_tc": 0.0, + "equity": 0, "accumulated_returns": 1.0, - "accumulated_strategy_returns": 1.0, "accumulated_strategy_returns_tc": 1.0, - "margin_ratio": 0, + "accumulated_strategy_returns": 1.0, }, { "close_time": Timestamp("2023-09-01 14:19:59.999000+0000", tz="UTC"), @@ -74,10 +74,10 @@ "side": 0, "strategy_returns": 0.0, "strategy_returns_tc": 0.0, + "equity": 0, "accumulated_returns": 1.0, - "accumulated_strategy_returns": 1.0, "accumulated_strategy_returns_tc": 1.0, - "margin_ratio": 0, + "accumulated_strategy_returns": 1.0, }, { "close_time": Timestamp("2023-09-01 14:29:59.999000+0000", tz="UTC"), @@ -98,10 +98,10 @@ "side": 0, "strategy_returns": 0.0, "strategy_returns_tc": 0.0, + "equity": 0, "accumulated_returns": 1.002950768528602, - "accumulated_strategy_returns": 1.0, "accumulated_strategy_returns_tc": 1.0, - "margin_ratio": 0, + "accumulated_strategy_returns": 1.0, }, { "close_time": Timestamp("2023-09-01 14:34:59.999000+0000", tz="UTC"), @@ -122,10 +122,10 @@ "side": 0, "strategy_returns": 0.0, "strategy_returns_tc": 0.0, + "equity": 0, "accumulated_returns": 1.0098127857970252, - "accumulated_strategy_returns": 1.0, "accumulated_strategy_returns_tc": 1.0, - "margin_ratio": 0, + "accumulated_strategy_returns": 1.0, }, { "close_time": Timestamp("2023-09-01 14:39:59.999000+0000", tz="UTC"), @@ -146,10 +146,10 @@ "side": 0, "strategy_returns": 0.0, "strategy_returns_tc": 0.0, + "equity": 0, "accumulated_returns": 1.0158148844101784, - "accumulated_strategy_returns": 1.0, "accumulated_strategy_returns_tc": 1.0, - "margin_ratio": 0, + "accumulated_strategy_returns": 1.0, }, { "close_time": Timestamp("2023-09-01 14:44:59.999000+0000", tz="UTC"), @@ -168,12 +168,12 @@ "lower": 55779.91030342613, "distance": 46.743333333331975, "side": 0, - "strategy_returns": -0.0, - "strategy_returns_tc": -0.0, + "strategy_returns": 0.0, + "strategy_returns_tc": 0.0, + "equity": 0, "accumulated_returns": 1.0140797010812264, - "accumulated_strategy_returns": 1.0, "accumulated_strategy_returns_tc": 1.0, - "margin_ratio": 0, + "accumulated_strategy_returns": 1.0, }, { "close_time": Timestamp("2023-09-01 14:49:59.999000+0000", tz="UTC"), @@ -194,10 +194,10 @@ "side": 0, "strategy_returns": 0.0, "strategy_returns_tc": 0.0, + "equity": 0, "accumulated_returns": 1.0144821278464156, - "accumulated_strategy_returns": 1.0, "accumulated_strategy_returns_tc": 1.0, - "margin_ratio": 0, + "accumulated_strategy_returns": 1.0, }, { "close_time": Timestamp("2023-09-01 14:54:59.999000+0000", tz="UTC"), @@ -216,12 +216,12 @@ "lower": 56122.19153948883, "distance": -23.30999999999767, "side": 0, - "strategy_returns": -0.0, - "strategy_returns_tc": -0.0, + "strategy_returns": 0.0, + "strategy_returns_tc": 0.0, + "equity": 0, "accumulated_returns": 1.0136496514828948, - "accumulated_strategy_returns": 1.0, "accumulated_strategy_returns_tc": 1.0, - "margin_ratio": 0, + "accumulated_strategy_returns": 1.0, }, { "close_time": Timestamp("2023-09-01 14:59:59.999000+0000", tz="UTC"), @@ -242,10 +242,10 @@ "side": 0, "strategy_returns": 0.0, "strategy_returns_tc": 0.0, + "equity": 0, "accumulated_returns": 1.014319640592638, - "accumulated_strategy_returns": 1.0, "accumulated_strategy_returns_tc": 1.0, - "margin_ratio": 0, + "accumulated_strategy_returns": 1.0, }, { "close_time": Timestamp("2023-09-01 15:04:59.999000+0000", tz="UTC"), @@ -266,12 +266,13 @@ "side": 0, "strategy_returns": 0.0, "strategy_returns_tc": 0.0, + "equity": 0, "accumulated_returns": 1.016265515727322, - "accumulated_strategy_returns": 1.0, "accumulated_strategy_returns_tc": 1.0, - "margin_ratio": 0, + "accumulated_strategy_returns": 1.0, }, - ], + ] + , 10: [ { "close_time": Timestamp("2023-09-01 14:09:59.999000+0000", tz="UTC"), @@ -292,10 +293,11 @@ "side": 0, "strategy_returns": 0.0, "strategy_returns_tc": 0.0, + "margin_ratio": 0, + "equity": 0, "accumulated_returns": 1.0, - "accumulated_strategy_returns": 1.0, "accumulated_strategy_returns_tc": 1.0, - "margin_ratio": 0, + "accumulated_strategy_returns": 1.0, }, { "close_time": Timestamp("2023-09-01 14:14:59.999000+0000", tz="UTC"), @@ -316,13 +318,241 @@ "side": 0, "strategy_returns": 0.0, "strategy_returns_tc": 0.0, + "margin_ratio": 0, + "equity": 0, "accumulated_returns": 1.0, + "accumulated_strategy_returns_tc": 1.0, "accumulated_strategy_returns": 1.0, + }, + { + "close_time": Timestamp("2023-09-01 14:19:59.999000+0000", tz="UTC"), + "open": 55306.46, + "high": 55399.68, + "low": 55217.22, + "close": 55388.96, + "volume": 276.690734, + "quote_volume": 15295597.50785806, + "trades": 0, + "taker_buy_asset_volume": 145.211424, + "taker_buy_quote_volume": 8027028.99029815, + "returns": 0.0, + "sma": 55388.96, + "upper": 55388.96, + "lower": 55388.96, + "distance": 0.0, + "side": 0, + "strategy_returns": 0.0, + "strategy_returns_tc": 0.0, + "margin_ratio": 0, + "equity": 0, + "accumulated_returns": 1.0, "accumulated_strategy_returns_tc": 1.0, + "accumulated_strategy_returns": 1.0, + }, + { + "close_time": Timestamp("2023-09-01 14:29:59.999000+0000", tz="UTC"), + "open": 55388.95, + "high": 55569.95, + "low": 55388.95, + "close": 55552.4, + "volume": 149.363426, + "quote_volume": 8288967.03877351, + "trades": 0, + "taker_buy_asset_volume": 82.67909, + "taker_buy_quote_volume": 4588065.23181743, + "returns": 0.002946423556387118, + "sma": 55443.44, + "upper": 55632.164255992706, + "lower": 55254.7157440073, + "distance": 108.95999999999913, + "side": 0, + "strategy_returns": 0.0, + "strategy_returns_tc": 0.0, "margin_ratio": 0, + "equity": 0, + "accumulated_returns": 1.002950768528602, + "accumulated_strategy_returns_tc": 1.0, + "accumulated_strategy_returns": 1.0, }, { - "close_time": Timestamp("2023-09-01 14:19:59.999000+0000", tz="UTC"), + "close_time": Timestamp("2023-09-01 14:34:59.999000+0000", tz="UTC"), + "open": 55550.89, + "high": 56087.68, + "low": 55550.89, + "close": 55932.48, + "volume": 692.924319, + "quote_volume": 38726480.58078431, + "trades": 0, + "taker_buy_asset_volume": 411.223017, + "taker_buy_quote_volume": 22979821.33981915, + "returns": 0.006818529518377586, + "sma": 55624.613333333335, + "upper": 56182.33932961943, + "lower": 55066.887337047236, + "distance": 307.8666666666686, + "side": 0, + "strategy_returns": 0.0, + "strategy_returns_tc": 0.0, + "margin_ratio": 0, + "equity": 0, + "accumulated_returns": 1.0098127857970252, + "accumulated_strategy_returns_tc": 1.0, + "accumulated_strategy_returns": 1.0, + }, + { + "close_time": Timestamp("2023-09-01 14:39:59.999000+0000", tz="UTC"), + "open": 55932.48, + "high": 56333.0, + "low": 55932.48, + "close": 56264.93, + "volume": 603.660118, + "quote_volume": 33896505.6971466, + "trades": 0, + "taker_buy_asset_volume": 356.915883, + "taker_buy_quote_volume": 20037884.70780964, + "returns": 0.005926179097336494, + "sma": 55916.60333333333, + "upper": 56629.663784160104, + "lower": 55203.54288250656, + "distance": 348.32666666666773, + "side": 0, + "strategy_returns": 0.0, + "strategy_returns_tc": 0.0, + "margin_ratio": 0, + "equity": 0, + "accumulated_returns": 1.0158148844101784, + "accumulated_strategy_returns_tc": 1.0, + "accumulated_strategy_returns": 1.0, + }, + { + "close_time": Timestamp("2023-09-01 14:44:59.999000+0000", tz="UTC"), + "open": 56260.11, + "high": 56317.43, + "low": 56118.31, + "close": 56168.82, + "volume": 370.500359, + "quote_volume": 20822485.25288953, + "trades": 0, + "taker_buy_asset_volume": 178.075904, + "taker_buy_quote_volume": 10007121.78892216, + "returns": -0.00170962942015996, + "sma": 56122.07666666667, + "upper": 56464.24302990721, + "lower": 55779.91030342613, + "distance": 46.743333333331975, + "side": 0, + "strategy_returns": 0.0, + "strategy_returns_tc": 0.0, + "margin_ratio": 0, + "equity": 0, + "accumulated_returns": 1.0140797010812264, + "accumulated_strategy_returns_tc": 1.0, + "accumulated_strategy_returns": 1.0, + }, + { + "close_time": Timestamp("2023-09-01 14:49:59.999000+0000", tz="UTC"), + "open": 56168.82, + "high": 56269.99, + "low": 56080.96, + "close": 56191.11, + "volume": 324.51432, + "quote_volume": 18225087.41727558, + "trades": 0, + "taker_buy_asset_volume": 145.064381, + "taker_buy_quote_volume": 8146012.47892439, + "returns": 0.0003967606653441501, + "sma": 56208.28666666666, + "upper": 56308.89603866177, + "lower": 56107.67729467155, + "distance": -17.176666666659003, + "side": 0, + "strategy_returns": 0.0, + "strategy_returns_tc": 0.0, + "margin_ratio": 0, + "equity": 0, + "accumulated_returns": 1.0144821278464156, + "accumulated_strategy_returns_tc": 1.0, + "accumulated_strategy_returns": 1.0, + }, + { + "close_time": Timestamp("2023-09-01 14:54:59.999000+0000", tz="UTC"), + "open": 56191.11, + "high": 56200.0, + "low": 56107.98, + "close": 56145.0, + "volume": 254.091606, + "quote_volume": 14265787.89818125, + "trades": 0, + "taker_buy_asset_volume": 134.1124, + "taker_buy_quote_volume": 7529521.30623853, + "returns": -0.0008209293091875578, + "sma": 56168.31, + "upper": 56214.42846051117, + "lower": 56122.19153948883, + "distance": -23.30999999999767, + "side": 0, + "strategy_returns": 0.0, + "strategy_returns_tc": 0.0, + "margin_ratio": 0, + "equity": 0, + "accumulated_returns": 1.0136496514828948, + "accumulated_strategy_returns_tc": 1.0, + "accumulated_strategy_returns": 1.0, + }, + { + "close_time": Timestamp("2023-09-01 14:59:59.999000+0000", tz="UTC"), + "open": 56145.0, + "high": 56211.7, + "low": 56106.97, + "close": 56182.11, + "volume": 270.145731, + "quote_volume": 15171017.18758856, + "trades": 0, + "taker_buy_asset_volume": 168.231118, + "taker_buy_quote_volume": 9447425.0774598, + "returns": 0.0006607487960858385, + "sma": 56172.74, + "upper": 56221.622745421264, + "lower": 56123.85725457873, + "distance": 9.37000000000262, + "side": 0, + "strategy_returns": 0.0, + "strategy_returns_tc": 0.0, + "margin_ratio": 0, + "equity": 0, + "accumulated_returns": 1.014319640592638, + "accumulated_strategy_returns_tc": 1.0, + "accumulated_strategy_returns": 1.0, + }, + { + "close_time": Timestamp("2023-09-01 15:04:59.999000+0000", tz="UTC"), + "open": 56182.12, + "high": 56299.78, + "low": 56172.09, + "close": 56289.89, + "volume": 298.797415, + "quote_volume": 16804824.55255641, + "trades": 0, + "taker_buy_asset_volume": 139.83665, + "taker_buy_quote_volume": 7864202.02549528, + "returns": 0.0019165664875115606, + "sma": 56205.666666666664, + "upper": 56356.1919526928, + "lower": 56055.141380640525, + "distance": 84.22333333333518, + "side": 0, + "strategy_returns": 0.0, + "strategy_returns_tc": 0.0, + "margin_ratio": 0, + "equity": 0, + "accumulated_returns": 1.016265515727322, + "accumulated_strategy_returns_tc": 1.0, + "accumulated_strategy_returns": 1.0, + }, + ], + 100: [ + { + "close_time": Timestamp("2023-09-01 14:09:59.999000+0000", tz="UTC"), "open": 55306.46, "high": 55399.68, "low": 55217.22, @@ -340,10 +570,61 @@ "side": 0, "strategy_returns": 0.0, "strategy_returns_tc": 0.0, + "margin_ratio": 0, + "equity": 0, "accumulated_returns": 1.0, + "accumulated_strategy_returns_tc": 1.0, "accumulated_strategy_returns": 1.0, + }, + { + "close_time": Timestamp("2023-09-01 14:14:59.999000+0000", tz="UTC"), + "open": 55306.46, + "high": 55399.68, + "low": 55217.22, + "close": 55388.96, + "volume": 276.690734, + "quote_volume": 15295597.50785806, + "trades": 0, + "taker_buy_asset_volume": 145.211424, + "taker_buy_quote_volume": 8027028.99029815, + "returns": 0.0, + "sma": 55388.96, + "upper": 55388.96, + "lower": 55388.96, + "distance": 0.0, + "side": 0, + "strategy_returns": 0.0, + "strategy_returns_tc": 0.0, + "margin_ratio": 0, + "equity": 0, + "accumulated_returns": 1.0, "accumulated_strategy_returns_tc": 1.0, + "accumulated_strategy_returns": 1.0, + }, + { + "close_time": Timestamp("2023-09-01 14:19:59.999000+0000", tz="UTC"), + "open": 55306.46, + "high": 55399.68, + "low": 55217.22, + "close": 55388.96, + "volume": 276.690734, + "quote_volume": 15295597.50785806, + "trades": 0, + "taker_buy_asset_volume": 145.211424, + "taker_buy_quote_volume": 8027028.99029815, + "returns": 0.0, + "sma": 55388.96, + "upper": 55388.96, + "lower": 55388.96, + "distance": 0.0, + "side": 0, + "strategy_returns": 0.0, + "strategy_returns_tc": 0.0, "margin_ratio": 0, + "equity": 0, + "accumulated_returns": 1.0, + "accumulated_strategy_returns_tc": 1.0, + "accumulated_strategy_returns": 1.0, }, { "close_time": Timestamp("2023-09-01 14:29:59.999000+0000", tz="UTC"), @@ -364,10 +645,11 @@ "side": 0, "strategy_returns": 0.0, "strategy_returns_tc": 0.0, + "margin_ratio": 0, + "equity": 0, "accumulated_returns": 1.002950768528602, - "accumulated_strategy_returns": 1.0, "accumulated_strategy_returns_tc": 1.0, - "margin_ratio": 0, + "accumulated_strategy_returns": 1.0, }, { "close_time": Timestamp("2023-09-01 14:34:59.999000+0000", tz="UTC"), @@ -388,10 +670,11 @@ "side": 0, "strategy_returns": 0.0, "strategy_returns_tc": 0.0, + "margin_ratio": 0, + "equity": 0, "accumulated_returns": 1.0098127857970252, - "accumulated_strategy_returns": 1.0, "accumulated_strategy_returns_tc": 1.0, - "margin_ratio": 0, + "accumulated_strategy_returns": 1.0, }, { "close_time": Timestamp("2023-09-01 14:39:59.999000+0000", tz="UTC"), @@ -412,10 +695,11 @@ "side": 0, "strategy_returns": 0.0, "strategy_returns_tc": 0.0, + "margin_ratio": 0, + "equity": 0, "accumulated_returns": 1.0158148844101784, - "accumulated_strategy_returns": 1.0, "accumulated_strategy_returns_tc": 1.0, - "margin_ratio": 0, + "accumulated_strategy_returns": 1.0, }, { "close_time": Timestamp("2023-09-01 14:44:59.999000+0000", tz="UTC"), @@ -434,12 +718,13 @@ "lower": 55779.91030342613, "distance": 46.743333333331975, "side": 0, - "strategy_returns": -0.0, - "strategy_returns_tc": -0.0, + "strategy_returns": 0.0, + "strategy_returns_tc": 0.0, + "margin_ratio": 0, + "equity": 0, "accumulated_returns": 1.0140797010812264, - "accumulated_strategy_returns": 1.0, "accumulated_strategy_returns_tc": 1.0, - "margin_ratio": 0, + "accumulated_strategy_returns": 1.0, }, { "close_time": Timestamp("2023-09-01 14:49:59.999000+0000", tz="UTC"), @@ -460,10 +745,11 @@ "side": 0, "strategy_returns": 0.0, "strategy_returns_tc": 0.0, + "margin_ratio": 0, + "equity": 0, "accumulated_returns": 1.0144821278464156, - "accumulated_strategy_returns": 1.0, "accumulated_strategy_returns_tc": 1.0, - "margin_ratio": 0, + "accumulated_strategy_returns": 1.0, }, { "close_time": Timestamp("2023-09-01 14:54:59.999000+0000", tz="UTC"), @@ -482,12 +768,13 @@ "lower": 56122.19153948883, "distance": -23.30999999999767, "side": 0, - "strategy_returns": -0.0, - "strategy_returns_tc": -0.0, + "strategy_returns": 0.0, + "strategy_returns_tc": 0.0, + "margin_ratio": 0, + "equity": 0, "accumulated_returns": 1.0136496514828948, - "accumulated_strategy_returns": 1.0, "accumulated_strategy_returns_tc": 1.0, - "margin_ratio": 0, + "accumulated_strategy_returns": 1.0, }, { "close_time": Timestamp("2023-09-01 14:59:59.999000+0000", tz="UTC"), @@ -508,10 +795,11 @@ "side": 0, "strategy_returns": 0.0, "strategy_returns_tc": 0.0, + "margin_ratio": 0, + "equity": 0, "accumulated_returns": 1.014319640592638, - "accumulated_strategy_returns": 1.0, "accumulated_strategy_returns_tc": 1.0, - "margin_ratio": 0, + "accumulated_strategy_returns": 1.0, }, { "close_time": Timestamp("2023-09-01 15:04:59.999000+0000", tz="UTC"), @@ -532,10 +820,11 @@ "side": 0, "strategy_returns": 0.0, "strategy_returns_tc": 0.0, + "margin_ratio": 0, + "equity": 0, "accumulated_returns": 1.016265515727322, - "accumulated_strategy_returns": 1.0, "accumulated_strategy_returns_tc": 1.0, - "margin_ratio": 0, + "accumulated_strategy_returns": 1.0, }, - ], + ] } diff --git a/tests/backtesting/vectorized/out_margin/momentum_no_trading_costs.py b/tests/backtesting/vectorized/out_margin/momentum_no_trading_costs.py index 0b226a6..f247492 100644 --- a/tests/backtesting/vectorized/out_margin/momentum_no_trading_costs.py +++ b/tests/backtesting/vectorized/out_margin/momentum_no_trading_costs.py @@ -24,10 +24,10 @@ "side": 0, "strategy_returns": 0.0, "strategy_returns_tc": 0.0, + "equity": 1000.0, "accumulated_returns": 1.0, - "accumulated_strategy_returns": 1.0, "accumulated_strategy_returns_tc": 1.0, - "margin_ratio": 0, + "accumulated_strategy_returns": 1.0, }, { "close_time": Timestamp("2023-09-01 14:09:59.999000+0000", tz="UTC"), @@ -45,10 +45,10 @@ "side": 0, "strategy_returns": 0.0, "strategy_returns_tc": 0.0, + "equity": 1000.0, "accumulated_returns": 1.0, - "accumulated_strategy_returns": 1.0, "accumulated_strategy_returns_tc": 1.0, - "margin_ratio": 0, + "accumulated_strategy_returns": 1.0, }, { "close_time": Timestamp("2023-09-01 14:14:59.999000+0000", tz="UTC"), @@ -66,10 +66,10 @@ "side": 0, "strategy_returns": 0.0, "strategy_returns_tc": 0.0, + "equity": 1000.0, "accumulated_returns": 1.0, - "accumulated_strategy_returns": 1.0, "accumulated_strategy_returns_tc": 1.0, - "margin_ratio": 0, + "accumulated_strategy_returns": 1.0, }, { "close_time": Timestamp("2023-09-01 14:19:59.999000+0000", tz="UTC"), @@ -87,10 +87,10 @@ "side": 0, "strategy_returns": 0.0, "strategy_returns_tc": 0.0, + "equity": 1000.0, "accumulated_returns": 1.0, - "accumulated_strategy_returns": 1.0, "accumulated_strategy_returns_tc": 1.0, - "margin_ratio": 0, + "accumulated_strategy_returns": 1.0, }, { "close_time": Timestamp("2023-09-01 14:29:59.999000+0000", tz="UTC"), @@ -108,10 +108,10 @@ "side": 1, "strategy_returns": 0.0, "strategy_returns_tc": 0.0, + "equity": 1000.0, "accumulated_returns": 1.002950768528602, - "accumulated_strategy_returns": 1.0, "accumulated_strategy_returns_tc": 1.0, - "margin_ratio": 0.004, + "accumulated_strategy_returns": 1.0, }, { "close_time": Timestamp("2023-09-01 14:34:59.999000+0000", tz="UTC"), @@ -129,10 +129,10 @@ "side": 1, "strategy_returns": 0.006818529518377586, "strategy_returns_tc": 0.006818529518377586, + "equity": 1006.8418286158653, "accumulated_returns": 1.0098127857970252, - "accumulated_strategy_returns": 1.0068418286158654, "accumulated_strategy_returns_tc": 1.0068418286158654, - "margin_ratio": 0.004, + "accumulated_strategy_returns": 1.0068418286158654, }, { "close_time": Timestamp("2023-09-01 14:39:59.999000+0000", tz="UTC"), @@ -150,10 +150,10 @@ "side": 1, "strategy_returns": 0.005926179097336494, "strategy_returns_tc": 0.005926179097336494, + "equity": 1012.8262685320526, "accumulated_returns": 1.0158148844101784, - "accumulated_strategy_returns": 1.0128262685320526, "accumulated_strategy_returns_tc": 1.0128262685320526, - "margin_ratio": 0.004, + "accumulated_strategy_returns": 1.0128262685320526, }, { "close_time": Timestamp("2023-09-01 14:44:59.999000+0000", tz="UTC"), @@ -171,10 +171,10 @@ "side": 1, "strategy_returns": -0.00170962942015996, "strategy_returns_tc": -0.00170962942015996, + "equity": 1011.0961902636069, "accumulated_returns": 1.0140797010812264, - "accumulated_strategy_returns": 1.0110961902636069, "accumulated_strategy_returns_tc": 1.0110961902636069, - "margin_ratio": 0.004, + "accumulated_strategy_returns": 1.0110961902636069, }, { "close_time": Timestamp("2023-09-01 14:49:59.999000+0000", tz="UTC"), @@ -192,10 +192,10 @@ "side": 1, "strategy_returns": 0.0003967606653441501, "strategy_returns_tc": 0.0003967606653441501, + "equity": 1011.4974330541975, "accumulated_returns": 1.0144821278464156, - "accumulated_strategy_returns": 1.0114974330541975, "accumulated_strategy_returns_tc": 1.0114974330541975, - "margin_ratio": 0.004, + "accumulated_strategy_returns": 1.0114974330541975, }, { "close_time": Timestamp("2023-09-01 14:54:59.999000+0000", tz="UTC"), @@ -213,10 +213,10 @@ "side": 1, "strategy_returns": -0.0008209293091875578, "strategy_returns_tc": -0.0008209293091875578, + "equity": 1010.6674059086556, "accumulated_returns": 1.0136496514828948, - "accumulated_strategy_returns": 1.0106674059086556, "accumulated_strategy_returns_tc": 1.0106674059086556, - "margin_ratio": 0.004, + "accumulated_strategy_returns": 1.0106674059086556, }, { "close_time": Timestamp("2023-09-01 14:59:59.999000+0000", tz="UTC"), @@ -234,10 +234,10 @@ "side": -1, "strategy_returns": 0.0006607487960858385, "strategy_returns_tc": 0.0006607487960858385, + "equity": 1011.3354238520748, "accumulated_returns": 1.014319640592638, - "accumulated_strategy_returns": 1.0113354238520749, "accumulated_strategy_returns_tc": 1.0113354238520749, - "margin_ratio": 0.004004215661202738, + "accumulated_strategy_returns": 1.0113354238520749, }, { "close_time": Timestamp("2023-09-01 15:04:59.999000+0000", tz="UTC"), @@ -253,12 +253,12 @@ "returns": 0.0019165664875115606, "rolling_returns": 0.0005382866599384979, "side": 0, - "strategy_returns": -0.0019165664875115606, - "strategy_returns_tc": -0.0019165664875115606, + "strategy_returns": -0.0019165664875115203, + "strategy_returns_tc": -0.0019165664875115203, + "equity": 1009.3989885173677, "accumulated_returns": 1.016265515727322, - "accumulated_strategy_returns": 1.0093989885173678, "accumulated_strategy_returns_tc": 1.0093989885173678, - "margin_ratio": 0, + "accumulated_strategy_returns": 1.0093989885173678, }, ], 10: [ @@ -278,10 +278,11 @@ "side": 0, "strategy_returns": 0.0, "strategy_returns_tc": 0.0, + "margin_ratio": 0.0, + "equity": 1000.0, "accumulated_returns": 1.0, - "accumulated_strategy_returns": 1.0, "accumulated_strategy_returns_tc": 1.0, - "margin_ratio": 0, + "accumulated_strategy_returns": 1.0, }, { "close_time": Timestamp("2023-09-01 14:09:59.999000+0000", tz="UTC"), @@ -299,10 +300,11 @@ "side": 0, "strategy_returns": 0.0, "strategy_returns_tc": 0.0, + "margin_ratio": 0.0, + "equity": 1000.0, "accumulated_returns": 1.0, - "accumulated_strategy_returns": 1.0, "accumulated_strategy_returns_tc": 1.0, - "margin_ratio": 0, + "accumulated_strategy_returns": 1.0, }, { "close_time": Timestamp("2023-09-01 14:14:59.999000+0000", tz="UTC"), @@ -320,10 +322,11 @@ "side": 0, "strategy_returns": 0.0, "strategy_returns_tc": 0.0, + "margin_ratio": 0.0, + "equity": 1000.0, "accumulated_returns": 1.0, - "accumulated_strategy_returns": 1.0, "accumulated_strategy_returns_tc": 1.0, - "margin_ratio": 0, + "accumulated_strategy_returns": 1.0, }, { "close_time": Timestamp("2023-09-01 14:19:59.999000+0000", tz="UTC"), @@ -341,10 +344,11 @@ "side": 0, "strategy_returns": 0.0, "strategy_returns_tc": 0.0, + "margin_ratio": 0.0, + "equity": 1000.0, "accumulated_returns": 1.0, - "accumulated_strategy_returns": 1.0, "accumulated_strategy_returns_tc": 1.0, - "margin_ratio": 0, + "accumulated_strategy_returns": 1.0, }, { "close_time": Timestamp("2023-09-01 14:29:59.999000+0000", tz="UTC"), @@ -362,10 +366,11 @@ "side": 1, "strategy_returns": 0.0, "strategy_returns_tc": 0.0, + "margin_ratio": 0.0, + "equity": 1000.0, "accumulated_returns": 1.002950768528602, - "accumulated_strategy_returns": 1.0, "accumulated_strategy_returns_tc": 1.0, - "margin_ratio": 0.041091325886208535, + "accumulated_strategy_returns": 1.0, }, { "close_time": Timestamp("2023-09-01 14:34:59.999000+0000", tz="UTC"), @@ -381,12 +386,13 @@ "returns": 0.006818529518377586, "rolling_returns": 0.002441238268691176, "side": 1, - "strategy_returns": 0.006818529518377586, - "strategy_returns_tc": 0.006818529518377586, + "strategy_returns": 0.06617931756831429, + "strategy_returns_tc": 0.06617931756831429, + "margin_ratio": 0.04000978801634217, + "equity": 1068.4182861586535, "accumulated_returns": 1.0098127857970252, - "accumulated_strategy_returns": 1.0068418286158654, - "accumulated_strategy_returns_tc": 1.0068418286158654, - "margin_ratio": 0.040009788016342196, + "accumulated_strategy_returns_tc": 1.0684182861586535, + "accumulated_strategy_returns": 1.0684182861586535, }, { "close_time": Timestamp("2023-09-01 14:39:59.999000+0000", tz="UTC"), @@ -402,12 +408,13 @@ "returns": 0.005926179097336494, "rolling_returns": 0.0039227830430252995, "side": 1, - "strategy_returns": 0.005926179097336494, - "strategy_returns_tc": 0.005926179097336494, + "strategy_returns": 0.054499685453103845, + "strategy_returns_tc": 0.054499685453103845, + "margin_ratio": 0.03769466852671801, + "equity": 1128.2626853205259, "accumulated_returns": 1.0158148844101784, - "accumulated_strategy_returns": 1.0128262685320526, - "accumulated_strategy_returns_tc": 1.0128262685320526, - "margin_ratio": 0.03769466852671804, + "accumulated_strategy_returns_tc": 1.128262685320526, + "accumulated_strategy_returns": 1.128262685320526, }, { "close_time": Timestamp("2023-09-01 14:44:59.999000+0000", tz="UTC"), @@ -423,12 +430,13 @@ "returns": -0.00170962942015996, "rolling_returns": 0.0034953756879853096, "side": 1, - "strategy_returns": -0.00170962942015996, - "strategy_returns_tc": -0.00170962942015996, + "strategy_returns": -0.015452784008520227, + "strategy_returns_tc": -0.015452784008520227, + "margin_ratio": 0.03667174305481815, + "equity": 1110.9619026360692, "accumulated_returns": 1.0140797010812264, - "accumulated_strategy_returns": 1.0110961902636069, - "accumulated_strategy_returns_tc": 1.0110961902636069, - "margin_ratio": 0.036671743054818164, + "accumulated_strategy_returns_tc": 1.1109619026360693, + "accumulated_strategy_returns": 1.1109619026360693, }, { "close_time": Timestamp("2023-09-01 14:49:59.999000+0000", tz="UTC"), @@ -444,12 +452,13 @@ "returns": 0.0003967606653441501, "rolling_returns": 0.0028579599652245676, "side": 1, - "strategy_returns": 0.0003967606653441501, - "strategy_returns_tc": 0.0003967606653441501, + "strategy_returns": 0.003605163698727144, + "strategy_returns_tc": 0.003605163698727144, + "margin_ratio": 0.03687232321904072, + "equity": 1114.9743305419752, "accumulated_returns": 1.0144821278464156, - "accumulated_strategy_returns": 1.0114974330541975, - "accumulated_strategy_returns_tc": 1.0114974330541975, - "margin_ratio": 0.03687232321904076, + "accumulated_strategy_returns_tc": 1.1149743305419753, + "accumulated_strategy_returns": 1.1149743305419753, }, { "close_time": Timestamp("2023-09-01 14:54:59.999000+0000", tz="UTC"), @@ -465,12 +474,13 @@ "returns": -0.0008209293091875578, "rolling_returns": 0.0009480952583332816, "side": 1, - "strategy_returns": -0.0008209293091875578, - "strategy_returns_tc": -0.0008209293091875578, + "strategy_returns": -0.00747220857615742, + "strategy_returns_tc": -0.00747220857615742, + "margin_ratio": 0.03672697281215937, + "equity": 1106.674059086556, "accumulated_returns": 1.0136496514828948, - "accumulated_strategy_returns": 1.0106674059086556, - "accumulated_strategy_returns_tc": 1.0106674059086556, - "margin_ratio": 0.03672697281215942, + "accumulated_strategy_returns_tc": 1.1066740590865562, + "accumulated_strategy_returns": 1.1066740590865562, }, { "close_time": Timestamp("2023-09-01 14:59:59.999000+0000", tz="UTC"), @@ -486,12 +496,13 @@ "returns": 0.0006607487960858385, "rolling_returns": -0.0003682623169793823, "side": -1, - "strategy_returns": 0.0006607487960858385, - "strategy_returns_tc": 0.0006607487960858385, + "strategy_returns": 0.0060181211231883315, + "strategy_returns_tc": 0.0060181211231883315, + "margin_ratio": 0.036732382840055554, + "equity": 1113.354238520748, "accumulated_returns": 1.014319640592638, - "accumulated_strategy_returns": 1.0113354238520749, - "accumulated_strategy_returns_tc": 1.0113354238520749, - "margin_ratio": 0.04023296623621458, + "accumulated_strategy_returns_tc": 1.113354238520748, + "accumulated_strategy_returns": 1.113354238520748, }, { "close_time": Timestamp("2023-09-01 15:04:59.999000+0000", tz="UTC"), @@ -507,12 +518,279 @@ "returns": 0.0019165664875115606, "rolling_returns": 0.0005382866599384979, "side": 0, - "strategy_returns": -0.0019165664875115606, - "strategy_returns_tc": -0.0019165664875115606, + "strategy_returns": -0.019332994267678524, + "strategy_returns_tc": -0.019332994267678524, + "margin_ratio": 0.0, + "equity": 1092.0364992557104, "accumulated_returns": 1.016265515727322, - "accumulated_strategy_returns": 1.0093989885173678, - "accumulated_strategy_returns_tc": 1.0093989885173678, - "margin_ratio": 0, + "accumulated_strategy_returns_tc": 1.0920364992557106, + "accumulated_strategy_returns": 1.0920364992557106, }, ], + 100: [ + { + "close_time": Timestamp("2023-09-01 14:04:59.999000+0000", tz="UTC"), + "open": 55306.46, + "high": 55399.68, + "low": 55217.22, + "close": 55388.96, + "volume": 276.690734, + "quote_volume": 15295597.50785806, + "trades": 0, + "taker_buy_asset_volume": 145.211424, + "taker_buy_quote_volume": 8027028.99029815, + "returns": 0.0, + "rolling_returns": 0.0, + "side": 0, + "strategy_returns": 0.0, + "strategy_returns_tc": 0.0, + "margin_ratio": 0.0, + "equity": 1000.0, + "accumulated_returns": 1.0, + "accumulated_strategy_returns_tc": 1.0, + "accumulated_strategy_returns": 1.0, + }, + { + "close_time": Timestamp("2023-09-01 14:09:59.999000+0000", tz="UTC"), + "open": 55306.46, + "high": 55399.68, + "low": 55217.22, + "close": 55388.96, + "volume": 276.690734, + "quote_volume": 15295597.50785806, + "trades": 0, + "taker_buy_asset_volume": 145.211424, + "taker_buy_quote_volume": 8027028.99029815, + "returns": 0.0, + "rolling_returns": 0.0, + "side": 0, + "strategy_returns": 0.0, + "strategy_returns_tc": 0.0, + "margin_ratio": 0.0, + "equity": 1000.0, + "accumulated_returns": 1.0, + "accumulated_strategy_returns_tc": 1.0, + "accumulated_strategy_returns": 1.0, + }, + { + "close_time": Timestamp("2023-09-01 14:14:59.999000+0000", tz="UTC"), + "open": 55306.46, + "high": 55399.68, + "low": 55217.22, + "close": 55388.96, + "volume": 276.690734, + "quote_volume": 15295597.50785806, + "trades": 0, + "taker_buy_asset_volume": 145.211424, + "taker_buy_quote_volume": 8027028.99029815, + "returns": 0.0, + "rolling_returns": 0.0, + "side": 0, + "strategy_returns": 0.0, + "strategy_returns_tc": 0.0, + "margin_ratio": 0.0, + "equity": 1000.0, + "accumulated_returns": 1.0, + "accumulated_strategy_returns_tc": 1.0, + "accumulated_strategy_returns": 1.0, + }, + { + "close_time": Timestamp("2023-09-01 14:19:59.999000+0000", tz="UTC"), + "open": 55306.46, + "high": 55399.68, + "low": 55217.22, + "close": 55388.96, + "volume": 276.690734, + "quote_volume": 15295597.50785806, + "trades": 0, + "taker_buy_asset_volume": 145.211424, + "taker_buy_quote_volume": 8027028.99029815, + "returns": 0.0, + "rolling_returns": 0.0, + "side": 0, + "strategy_returns": 0.0, + "strategy_returns_tc": 0.0, + "margin_ratio": 0.0, + "equity": 1000.0, + "accumulated_returns": 1.0, + "accumulated_strategy_returns_tc": 1.0, + "accumulated_strategy_returns": 1.0, + }, + { + "close_time": Timestamp("2023-09-01 14:29:59.999000+0000", tz="UTC"), + "open": 55388.95, + "high": 55569.95, + "low": 55388.95, + "close": 55552.4, + "volume": 149.363426, + "quote_volume": 8288967.03877351, + "trades": 1, + "taker_buy_asset_volume": 82.67909, + "taker_buy_quote_volume": 4588065.23181743, + "returns": 0.002946423556387118, + "rolling_returns": 0.0007366058890967795, + "side": 1, + "strategy_returns": 0.0, + "strategy_returns_tc": 0.0, + "margin_ratio": 0.0, + "equity": 1000.0, + "accumulated_returns": 1.002950768528602, + "accumulated_strategy_returns_tc": 1.0, + "accumulated_strategy_returns": 1.0, + }, + { + "close_time": Timestamp("2023-09-01 14:34:59.999000+0000", tz="UTC"), + "open": 55550.89, + "high": 56087.68, + "low": 55550.89, + "close": 55932.48, + "volume": 692.924319, + "quote_volume": 38726480.58078431, + "trades": 0, + "taker_buy_asset_volume": 411.223017, + "taker_buy_quote_volume": 22979821.33981915, + "returns": 0.006818529518377586, + "rolling_returns": 0.002441238268691176, + "side": 1, + "strategy_returns": 0.5212804975653842, + "strategy_returns_tc": 0.5212804975653842, + "margin_ratio": 0.4512128754869022, + "equity": 1684.1828615865352, + "accumulated_returns": 1.0098127857970252, + "accumulated_strategy_returns_tc": 1.684182861586535, + "accumulated_strategy_returns": 1.684182861586535, + }, + { + "close_time": Timestamp("2023-09-01 14:39:59.999000+0000", tz="UTC"), + "open": 55932.48, + "high": 56333.0, + "low": 55932.48, + "close": 56264.93, + "volume": 603.660118, + "quote_volume": 33896505.6971466, + "trades": 0, + "taker_buy_asset_volume": 356.915883, + "taker_buy_quote_volume": 20037884.70780964, + "returns": 0.005926179097336494, + "rolling_returns": 0.0039227830430252995, + "side": 1, + "strategy_returns": 0.30404641080894773, + "strategy_returns_tc": 0.30404641080894773, + "margin_ratio": 0.2692230901107734, + "equity": 2282.6268532052595, + "accumulated_returns": 1.0158148844101784, + "accumulated_strategy_returns_tc": 2.28262685320526, + "accumulated_strategy_returns": 2.28262685320526, + }, + { + "close_time": Timestamp("2023-09-01 14:44:59.999000+0000", tz="UTC"), + "open": 56260.11, + "high": 56317.43, + "low": 56118.31, + "close": 56168.82, + "volume": 370.500359, + "quote_volume": 20822485.25288953, + "trades": 0, + "taker_buy_asset_volume": 178.075904, + "taker_buy_quote_volume": 10007121.78892216, + "returns": -0.00170962942015996, + "rolling_returns": 0.0034953756879853096, + "side": 1, + "strategy_returns": -0.07881953341575469, + "strategy_returns_tc": -0.07881953341575469, + "margin_ratio": 0.2254393481916912, + "equity": 2109.6190263606923, + "accumulated_returns": 1.0140797010812264, + "accumulated_strategy_returns_tc": 2.1096190263606927, + "accumulated_strategy_returns": 2.1096190263606927, + }, + { + "close_time": Timestamp("2023-09-01 14:49:59.999000+0000", tz="UTC"), + "open": 56168.82, + "high": 56269.99, + "low": 56080.96, + "close": 56191.11, + "volume": 324.51432, + "quote_volume": 18225087.41727558, + "trades": 0, + "taker_buy_asset_volume": 145.064381, + "taker_buy_quote_volume": 8146012.47892439, + "returns": 0.0003967606653441501, + "rolling_returns": 0.0028579599652245676, + "side": 1, + "strategy_returns": 0.018841067225081064, + "strategy_returns_tc": 0.018841067225081064, + "margin_ratio": 0.23303415602481037, + "equity": 2149.7433054197522, + "accumulated_returns": 1.0144821278464156, + "accumulated_strategy_returns_tc": 2.1497433054197526, + "accumulated_strategy_returns": 2.1497433054197526, + }, + { + "close_time": Timestamp("2023-09-01 14:54:59.999000+0000", tz="UTC"), + "open": 56191.11, + "high": 56200.0, + "low": 56107.98, + "close": 56145.0, + "volume": 254.091606, + "quote_volume": 14265787.89818125, + "trades": 0, + "taker_buy_asset_volume": 134.1124, + "taker_buy_quote_volume": 7529521.30623853, + "returns": -0.0008209293091875578, + "rolling_returns": 0.0009480952583332816, + "side": 1, + "strategy_returns": -0.039375669666786274, + "strategy_returns_tc": -0.039375669666786274, + "margin_ratio": 0.22748878592823088, + "equity": 2066.7405908655614, + "accumulated_returns": 1.0136496514828948, + "accumulated_strategy_returns_tc": 2.066740590865562, + "accumulated_strategy_returns": 2.066740590865562, + }, + { + "close_time": Timestamp("2023-09-01 14:59:59.999000+0000", tz="UTC"), + "open": 56145.0, + "high": 56211.7, + "low": 56106.97, + "close": 56182.11, + "volume": 270.145731, + "quote_volume": 15171017.18758856, + "trades": 2, + "taker_buy_asset_volume": 168.231118, + "taker_buy_quote_volume": 9447425.0774598, + "returns": 0.0006607487960858385, + "rolling_returns": -0.0003682623169793823, + "side": -1, + "strategy_returns": 0.031810917445643655, + "strategy_returns_tc": 0.031810917445643655, + "margin_ratio": 0.22769121353687222, + "equity": 2133.542385207479, + "accumulated_returns": 1.014319640592638, + "accumulated_strategy_returns_tc": 2.13354238520748, + "accumulated_strategy_returns": 2.13354238520748, + }, + { + "close_time": Timestamp("2023-09-01 15:04:59.999000+0000", tz="UTC"), + "open": 56182.12, + "high": 56299.78, + "low": 56172.09, + "close": 56289.89, + "volume": 298.797415, + "quote_volume": 16804824.55255641, + "trades": 1, + "taker_buy_asset_volume": 139.83665, + "taker_buy_quote_volume": 7864202.02549528, + "returns": 0.0019165664875115606, + "rolling_returns": 0.0005382866599384979, + "side": 0, + "strategy_returns": -0.2125413348076521, + "strategy_returns_tc": -0.2125413348076521, + "margin_ratio": 0.0, + "equity": 1725.026400760434, + "accumulated_returns": 1.016265515727322, + "accumulated_strategy_returns_tc": 1.7250264007604343, + "accumulated_strategy_returns": 1.7250264007604343, + }, + ] } diff --git a/tests/backtesting/vectorized/out_margin/momentum_trading_costs.py b/tests/backtesting/vectorized/out_margin/momentum_trading_costs.py index d57e949..63e1395 100644 --- a/tests/backtesting/vectorized/out_margin/momentum_trading_costs.py +++ b/tests/backtesting/vectorized/out_margin/momentum_trading_costs.py @@ -6,8 +6,8 @@ expected_optimization_results = ({"window": 5.0}, 1.012263) expected_results = { - 1: [ - { + 1: [ + { "close_time": Timestamp("2023-09-01 14:04:59.999000+0000", tz="UTC"), "open": 55306.46, "high": 55399.68, @@ -23,10 +23,10 @@ "side": 0, "strategy_returns": 0.0, "strategy_returns_tc": 0.0, + "equity": 1000.0, "accumulated_returns": 1.0, - "accumulated_strategy_returns": 1.0, "accumulated_strategy_returns_tc": 1.0, - "margin_ratio": 0.0, + "accumulated_strategy_returns": 1.0, }, { "close_time": Timestamp("2023-09-01 14:09:59.999000+0000", tz="UTC"), @@ -44,10 +44,10 @@ "side": 0, "strategy_returns": 0.0, "strategy_returns_tc": 0.0, + "equity": 1000.0, "accumulated_returns": 1.0, - "accumulated_strategy_returns": 1.0, "accumulated_strategy_returns_tc": 1.0, - "margin_ratio": 0.0, + "accumulated_strategy_returns": 1.0, }, { "close_time": Timestamp("2023-09-01 14:14:59.999000+0000", tz="UTC"), @@ -65,10 +65,10 @@ "side": 0, "strategy_returns": 0.0, "strategy_returns_tc": 0.0, + "equity": 1000.0, "accumulated_returns": 1.0, - "accumulated_strategy_returns": 1.0, "accumulated_strategy_returns_tc": 1.0, - "margin_ratio": 0.0, + "accumulated_strategy_returns": 1.0, }, { "close_time": Timestamp("2023-09-01 14:19:59.999000+0000", tz="UTC"), @@ -86,10 +86,10 @@ "side": 0, "strategy_returns": 0.0, "strategy_returns_tc": 0.0, + "equity": 1000.0, "accumulated_returns": 1.0, - "accumulated_strategy_returns": 1.0, "accumulated_strategy_returns_tc": 1.0, - "margin_ratio": 0.0, + "accumulated_strategy_returns": 1.0, }, { "close_time": Timestamp("2023-09-01 14:29:59.999000+0000", tz="UTC"), @@ -105,12 +105,12 @@ "returns": 0.002946423556387118, "rolling_returns": 0.0007366058890967795, "side": 1, - "strategy_returns": 0.0, - "strategy_returns_tc": -0.001, + "strategy_returns": 3.0357660829594124e-17, + "strategy_returns_tc": -0.0009999999999999697, + "equity": 999.000499833375, "accumulated_returns": 1.002950768528602, - "accumulated_strategy_returns": 1.0, "accumulated_strategy_returns_tc": 0.999000499833375, - "margin_ratio": 0.004, + "accumulated_strategy_returns": 1.0, }, { "close_time": Timestamp("2023-09-01 14:34:59.999000+0000", tz="UTC"), @@ -128,10 +128,10 @@ "side": 1, "strategy_returns": 0.006818529518377586, "strategy_returns_tc": 0.006818529518377586, + "equity": 1005.8354900403988, "accumulated_returns": 1.0098127857970252, - "accumulated_strategy_returns": 1.0068418286158654, "accumulated_strategy_returns_tc": 1.0058354900403987, - "margin_ratio": 0.004, + "accumulated_strategy_returns": 1.0068418286158654, }, { "close_time": Timestamp("2023-09-01 14:39:59.999000+0000", tz="UTC"), @@ -149,10 +149,10 @@ "side": 1, "strategy_returns": 0.005926179097336494, "strategy_returns_tc": 0.005926179097336494, + "equity": 1011.8139485078926, "accumulated_returns": 1.0158148844101784, + "accumulated_strategy_returns_tc": 1.0118139485078927, "accumulated_strategy_returns": 1.0128262685320526, - "accumulated_strategy_returns_tc": 1.0118139485078925, - "margin_ratio": 0.004, }, { "close_time": Timestamp("2023-09-01 14:44:59.999000+0000", tz="UTC"), @@ -170,10 +170,10 @@ "side": 1, "strategy_returns": -0.00170962942015996, "strategy_returns_tc": -0.00170962942015996, + "equity": 1010.0855994529645, "accumulated_returns": 1.0140797010812264, - "accumulated_strategy_returns": 1.0110961902636069, "accumulated_strategy_returns_tc": 1.0100855994529645, - "margin_ratio": 0.004, + "accumulated_strategy_returns": 1.0110961902636069, }, { "close_time": Timestamp("2023-09-01 14:49:59.999000+0000", tz="UTC"), @@ -191,10 +191,10 @@ "side": 1, "strategy_returns": 0.0003967606653441501, "strategy_returns_tc": 0.0003967606653441501, + "equity": 1010.486441201319, "accumulated_returns": 1.0144821278464156, - "accumulated_strategy_returns": 1.0114974330541975, "accumulated_strategy_returns_tc": 1.010486441201319, - "margin_ratio": 0.004, + "accumulated_strategy_returns": 1.0114974330541975, }, { "close_time": Timestamp("2023-09-01 14:54:59.999000+0000", tz="UTC"), @@ -212,10 +212,10 @@ "side": 1, "strategy_returns": -0.0008209293091875578, "strategy_returns_tc": -0.0008209293091875578, + "equity": 1009.6572436680474, "accumulated_returns": 1.0136496514828948, - "accumulated_strategy_returns": 1.0106674059086556, "accumulated_strategy_returns_tc": 1.0096572436680475, - "margin_ratio": 0.004, + "accumulated_strategy_returns": 1.0106674059086556, }, { "close_time": Timestamp("2023-09-01 14:59:59.999000+0000", tz="UTC"), @@ -231,12 +231,12 @@ "returns": 0.0006607487960858385, "rolling_returns": -0.0003682623169793823, "side": -1, - "strategy_returns": 0.0006607487960858385, - "strategy_returns_tc": -0.0013392512039141617, + "strategy_returns": 0.0006607487960858527, + "strategy_returns_tc": -0.0013392512039141474, + "equity": 1008.3059640423277, "accumulated_returns": 1.014319640592638, - "accumulated_strategy_returns": 1.0113354238520749, "accumulated_strategy_returns_tc": 1.0083059640423278, - "margin_ratio": 0.004004215661202739, + "accumulated_strategy_returns": 1.0113354238520749, }, { "close_time": Timestamp("2023-09-01 15:04:59.999000+0000", tz="UTC"), @@ -252,12 +252,12 @@ "returns": 0.0019165664875115606, "rolling_returns": 0.0005382866599384979, "side": 0, - "strategy_returns": -0.0019165664875115606, - "strategy_returns_tc": -0.0029165664875115604, + "strategy_returns": -0.0019165664875115769, + "strategy_returns_tc": -0.002916566487511577, + "equity": 1005.3694569990421, "accumulated_returns": 1.016265515727322, - "accumulated_strategy_returns": 1.0093989885173678, "accumulated_strategy_returns_tc": 1.0053694569990421, - "margin_ratio": 0, + "accumulated_strategy_returns": 1.0093989885173678, }, ], 10: [ @@ -277,10 +277,11 @@ "side": 0, "strategy_returns": 0.0, "strategy_returns_tc": 0.0, + "margin_ratio": 0.0, + "equity": 1000.0, "accumulated_returns": 1.0, - "accumulated_strategy_returns": 1.0, "accumulated_strategy_returns_tc": 1.0, - "margin_ratio": 0.0, + "accumulated_strategy_returns": 1.0, }, { "close_time": Timestamp("2023-09-01 14:09:59.999000+0000", tz="UTC"), @@ -298,10 +299,11 @@ "side": 0, "strategy_returns": 0.0, "strategy_returns_tc": 0.0, + "margin_ratio": 0.0, + "equity": 1000.0, "accumulated_returns": 1.0, - "accumulated_strategy_returns": 1.0, "accumulated_strategy_returns_tc": 1.0, - "margin_ratio": 0.0, + "accumulated_strategy_returns": 1.0, }, { "close_time": Timestamp("2023-09-01 14:14:59.999000+0000", tz="UTC"), @@ -319,13 +321,214 @@ "side": 0, "strategy_returns": 0.0, "strategy_returns_tc": 0.0, + "margin_ratio": 0.0, + "equity": 1000.0, "accumulated_returns": 1.0, + "accumulated_strategy_returns_tc": 1.0, "accumulated_strategy_returns": 1.0, + }, + { + "close_time": Timestamp("2023-09-01 14:19:59.999000+0000", tz="UTC"), + "open": 55306.46, + "high": 55399.68, + "low": 55217.22, + "close": 55388.96, + "volume": 276.690734, + "quote_volume": 15295597.50785806, + "trades": 0, + "taker_buy_asset_volume": 145.211424, + "taker_buy_quote_volume": 8027028.99029815, + "returns": 0.0, + "rolling_returns": 0.0, + "side": 0, + "strategy_returns": 0.0, + "strategy_returns_tc": 0.0, + "margin_ratio": 0.0, + "equity": 1000.0, + "accumulated_returns": 1.0, "accumulated_strategy_returns_tc": 1.0, + "accumulated_strategy_returns": 1.0, + }, + { + "close_time": Timestamp("2023-09-01 14:29:59.999000+0000", tz="UTC"), + "open": 55388.95, + "high": 55569.95, + "low": 55388.95, + "close": 55552.4, + "volume": 149.363426, + "quote_volume": 8288967.03877351, + "trades": 1, + "taker_buy_asset_volume": 82.67909, + "taker_buy_quote_volume": 4588065.23181743, + "returns": 0.002946423556387118, + "rolling_returns": 0.0007366058890967795, + "side": 1, + "strategy_returns": -0.009045287044276783, + "strategy_returns_tc": -0.010045287044276782, "margin_ratio": 0.0, + "equity": 990.0049983337502, + "accumulated_returns": 1.002950768528602, + "accumulated_strategy_returns_tc": 0.9900049983337502, + "accumulated_strategy_returns": 0.9909954984996252, }, { - "close_time": Timestamp("2023-09-01 14:19:59.999000+0000", tz="UTC"), + "close_time": Timestamp("2023-09-01 14:34:59.999000+0000", tz="UTC"), + "open": 55550.89, + "high": 56087.68, + "low": 55550.89, + "close": 55932.48, + "volume": 692.924319, + "quote_volume": 38726480.58078431, + "trades": 0, + "taker_buy_asset_volume": 411.223017, + "taker_buy_quote_volume": 22979821.33981915, + "returns": 0.006818529518377586, + "rolling_returns": 0.002441238268691176, + "side": 1, + "strategy_returns": 0.06676100884766353, + "strategy_returns_tc": 0.06676100884766353, + "margin_ratio": 0.04037324602405664, + "equity": 1058.354900403988, + "accumulated_returns": 1.0098127857970252, + "accumulated_strategy_returns_tc": 1.058354900403988, + "accumulated_strategy_returns": 1.0594137846582787, + }, + { + "close_time": Timestamp("2023-09-01 14:39:59.999000+0000", tz="UTC"), + "open": 55932.48, + "high": 56333.0, + "low": 55932.48, + "close": 56264.93, + "volume": 603.660118, + "quote_volume": 33896505.6971466, + "trades": 0, + "taker_buy_asset_volume": 356.915883, + "taker_buy_quote_volume": 20037884.70780964, + "returns": 0.005926179097336494, + "rolling_returns": 0.0039227830430252995, + "side": 1, + "strategy_returns": 0.054950408187444705, + "strategy_returns_tc": 0.054950408187444705, + "margin_ratio": 0.03801489333421169, + "equity": 1118.1394850789266, + "accumulated_returns": 1.0158148844101784, + "accumulated_strategy_returns_tc": 1.1181394850789266, + "accumulated_strategy_returns": 1.1192581838201514, + }, + { + "close_time": Timestamp("2023-09-01 14:44:59.999000+0000", tz="UTC"), + "open": 56260.11, + "high": 56317.43, + "low": 56118.31, + "close": 56168.82, + "volume": 370.500359, + "quote_volume": 20822485.25288953, + "trades": 0, + "taker_buy_asset_volume": 178.075904, + "taker_buy_quote_volume": 10007121.78892216, + "returns": -0.00170962942015996, + "rolling_returns": 0.0034953756879853096, + "side": 1, + "strategy_returns": -0.015578075963989505, + "strategy_returns_tc": -0.015578075963989505, + "margin_ratio": 0.03697374220610135, + "equity": 1100.8559945296456, + "accumulated_returns": 1.0140797010812264, + "accumulated_strategy_returns_tc": 1.1008559945296457, + "accumulated_strategy_returns": 1.1019574011356945, + }, + { + "close_time": Timestamp("2023-09-01 14:49:59.999000+0000", tz="UTC"), + "open": 56168.82, + "high": 56269.99, + "low": 56080.96, + "close": 56191.11, + "volume": 324.51432, + "quote_volume": 18225087.41727558, + "trades": 0, + "taker_buy_asset_volume": 145.064381, + "taker_buy_quote_volume": 8146012.47892439, + "returns": 0.0003967606653441501, + "rolling_returns": 0.0028579599652245676, + "side": 1, + "strategy_returns": 0.003634569353654515, + "strategy_returns_tc": 0.003634569353654515, + "margin_ratio": 0.03717785382592979, + "equity": 1104.864412013191, + "accumulated_returns": 1.0144821278464156, + "accumulated_strategy_returns_tc": 1.104864412013191, + "accumulated_strategy_returns": 1.1059698290416005, + }, + { + "close_time": Timestamp("2023-09-01 14:54:59.999000+0000", tz="UTC"), + "open": 56191.11, + "high": 56200.0, + "low": 56107.98, + "close": 56145.0, + "volume": 254.091606, + "quote_volume": 14265787.89818125, + "trades": 0, + "taker_buy_asset_volume": 134.1124, + "taker_buy_quote_volume": 7529521.30623853, + "returns": -0.0008209293091875578, + "rolling_returns": 0.0009480952583332816, + "side": 1, + "strategy_returns": -0.007533274962571162, + "strategy_returns_tc": -0.007533274962571162, + "margin_ratio": 0.037029942290806174, + "equity": 1096.5724366804745, + "accumulated_returns": 1.0136496514828948, + "accumulated_strategy_returns_tc": 1.0965724366804745, + "accumulated_strategy_returns": 1.0976695575861812, + }, + { + "close_time": Timestamp("2023-09-01 14:59:59.999000+0000", tz="UTC"), + "open": 56145.0, + "high": 56211.7, + "low": 56106.97, + "close": 56182.11, + "volume": 270.145731, + "quote_volume": 15171017.18758856, + "trades": 2, + "taker_buy_asset_volume": 168.231118, + "taker_buy_quote_volume": 9447425.0774598, + "returns": 0.0006607487960858385, + "rolling_returns": -0.0003682623169793823, + "side": -1, + "strategy_returns": -0.01039931227243361, + "strategy_returns_tc": -0.01239931227243361, + "margin_ratio": 0.03703544745121204, + "equity": 1083.0596404232772, + "accumulated_returns": 1.014319640592638, + "accumulated_strategy_returns_tc": 1.0830596404232773, + "accumulated_strategy_returns": 1.086313697990355, + }, + { + "close_time": Timestamp("2023-09-01 15:04:59.999000+0000", tz="UTC"), + "open": 56182.12, + "high": 56299.78, + "low": 56172.09, + "close": 56289.89, + "volume": 298.797415, + "quote_volume": 16804824.55255641, + "trades": 1, + "taker_buy_asset_volume": 139.83665, + "taker_buy_quote_volume": 7864202.02549528, + "returns": 0.0019165664875115606, + "rolling_returns": 0.0005382866599384979, + "side": 0, + "strategy_returns": -0.02855567187179531, + "strategy_returns_tc": -0.02955567187179531, + "margin_ratio": 0.0, + "equity": 1051.51750563662, + "accumulated_returns": 1.016265515727322, + "accumulated_strategy_returns_tc": 1.05151750563662, + "accumulated_strategy_returns": 1.0557319990266234, + }, + ], + 100: [ + { + "close_time": Timestamp("2023-09-01 14:04:59.999000+0000", tz="UTC"), "open": 55306.46, "high": 55399.68, "low": 55217.22, @@ -340,10 +543,77 @@ "side": 0, "strategy_returns": 0.0, "strategy_returns_tc": 0.0, + "margin_ratio": 0.0, + "equity": 1000.0, "accumulated_returns": 1.0, + "accumulated_strategy_returns_tc": 1.0, "accumulated_strategy_returns": 1.0, + }, + { + "close_time": Timestamp("2023-09-01 14:09:59.999000+0000", tz="UTC"), + "open": 55306.46, + "high": 55399.68, + "low": 55217.22, + "close": 55388.96, + "volume": 276.690734, + "quote_volume": 15295597.50785806, + "trades": 0, + "taker_buy_asset_volume": 145.211424, + "taker_buy_quote_volume": 8027028.99029815, + "returns": 0.0, + "rolling_returns": 0.0, + "side": 0, + "strategy_returns": 0.0, + "strategy_returns_tc": 0.0, + "margin_ratio": 0.0, + "equity": 1000.0, + "accumulated_returns": 1.0, "accumulated_strategy_returns_tc": 1.0, + "accumulated_strategy_returns": 1.0, + }, + { + "close_time": Timestamp("2023-09-01 14:14:59.999000+0000", tz="UTC"), + "open": 55306.46, + "high": 55399.68, + "low": 55217.22, + "close": 55388.96, + "volume": 276.690734, + "quote_volume": 15295597.50785806, + "trades": 0, + "taker_buy_asset_volume": 145.211424, + "taker_buy_quote_volume": 8027028.99029815, + "returns": 0.0, + "rolling_returns": 0.0, + "side": 0, + "strategy_returns": 0.0, + "strategy_returns_tc": 0.0, + "margin_ratio": 0.0, + "equity": 1000.0, + "accumulated_returns": 1.0, + "accumulated_strategy_returns_tc": 1.0, + "accumulated_strategy_returns": 1.0, + }, + { + "close_time": Timestamp("2023-09-01 14:19:59.999000+0000", tz="UTC"), + "open": 55306.46, + "high": 55399.68, + "low": 55217.22, + "close": 55388.96, + "volume": 276.690734, + "quote_volume": 15295597.50785806, + "trades": 0, + "taker_buy_asset_volume": 145.211424, + "taker_buy_quote_volume": 8027028.99029815, + "returns": 0.0, + "rolling_returns": 0.0, + "side": 0, + "strategy_returns": 0.0, + "strategy_returns_tc": 0.0, "margin_ratio": 0.0, + "equity": 1000.0, + "accumulated_returns": 1.0, + "accumulated_strategy_returns_tc": 1.0, + "accumulated_strategy_returns": 1.0, }, { "close_time": Timestamp("2023-09-01 14:29:59.999000+0000", tz="UTC"), @@ -359,12 +629,13 @@ "returns": 0.002946423556387118, "rolling_returns": 0.0007366058890967795, "side": 1, - "strategy_returns": 0.0, - "strategy_returns_tc": -0.001, + "strategy_returns": -0.1043049801582816, + "strategy_returns_tc": -0.1053049801582816, + "margin_ratio": 0.0, + "equity": 900.0499833375022, "accumulated_returns": 1.002950768528602, - "accumulated_strategy_returns": 1.0, - "accumulated_strategy_returns_tc": 0.999000499833375, - "margin_ratio": 0.041091325886208487, + "accumulated_strategy_returns_tc": 0.9000499833375022, + "accumulated_strategy_returns": 0.9009504834958773, }, { "close_time": Timestamp("2023-09-01 14:34:59.999000+0000", tz="UTC"), @@ -380,12 +651,13 @@ "returns": 0.006818529518377586, "rolling_returns": 0.002441238268691176, "side": 1, - "strategy_returns": 0.006818529518377586, - "strategy_returns_tc": 0.006818529518377586, + "strategy_returns": 0.5649735133383817, + "strategy_returns_tc": 0.5649735133383817, + "margin_ratio": 0.5008855643999831, + "equity": 1583.54900403988, "accumulated_returns": 1.0098127857970252, - "accumulated_strategy_returns": 1.0068418286158654, - "accumulated_strategy_returns_tc": 1.0058354900403987, - "margin_ratio": 0.0400097880163422, + "accumulated_strategy_returns_tc": 1.58354900403988, + "accumulated_strategy_returns": 1.5851333450824128, }, { "close_time": Timestamp("2023-09-01 14:39:59.999000+0000", tz="UTC"), @@ -401,12 +673,13 @@ "returns": 0.005926179097336494, "rolling_returns": 0.0039227830430252995, "side": 1, - "strategy_returns": 0.005926179097336494, - "strategy_returns_tc": 0.005926179097336494, + "strategy_returns": 0.3202959788222691, + "strategy_returns_tc": 0.3202959788222691, + "margin_ratio": 0.286005435268315, + "equity": 2181.394850789266, "accumulated_returns": 1.0158148844101784, - "accumulated_strategy_returns": 1.0128262685320526, - "accumulated_strategy_returns_tc": 1.0118139485078925, - "margin_ratio": 0.037694668526718024, + "accumulated_strategy_returns_tc": 2.181394850789266, + "accumulated_strategy_returns": 2.1835773367011377, }, { "close_time": Timestamp("2023-09-01 14:44:59.999000+0000", tz="UTC"), @@ -422,12 +695,13 @@ "returns": -0.00170962942015996, "rolling_returns": 0.0034953756879853096, "side": 1, - "strategy_returns": -0.00170962942015996, - "strategy_returns_tc": -0.00170962942015996, + "strategy_returns": -0.08254649182698297, + "strategy_returns_tc": -0.08254649182698297, + "margin_ratio": 0.237039360418965, + "equity": 2008.5599452964573, "accumulated_returns": 1.0140797010812264, - "accumulated_strategy_returns": 1.0110961902636069, - "accumulated_strategy_returns_tc": 1.0100855994529645, - "margin_ratio": 0.03667174305481814, + "accumulated_strategy_returns_tc": 2.0085599452964575, + "accumulated_strategy_returns": 2.0105695098565706, }, { "close_time": Timestamp("2023-09-01 14:49:59.999000+0000", tz="UTC"), @@ -443,12 +717,13 @@ "returns": 0.0003967606653441501, "rolling_returns": 0.0028579599652245676, "side": 1, - "strategy_returns": 0.0003967606653441501, - "strategy_returns_tc": 0.0003967606653441501, + "strategy_returns": 0.019760149336572413, + "strategy_returns_tc": 0.019760149336572413, + "margin_ratio": 0.2454610672983199, + "equity": 2048.644120131912, "accumulated_returns": 1.0144821278464156, - "accumulated_strategy_returns": 1.0114974330541975, - "accumulated_strategy_returns_tc": 1.010486441201319, - "margin_ratio": 0.03687232321904074, + "accumulated_strategy_returns_tc": 2.0486441201319128, + "accumulated_strategy_returns": 2.050693788915631, }, { "close_time": Timestamp("2023-09-01 14:54:59.999000+0000", tz="UTC"), @@ -464,12 +739,13 @@ "returns": -0.0008209293091875578, "rolling_returns": 0.0009480952583332816, "side": 1, - "strategy_returns": -0.0008209293091875578, - "strategy_returns_tc": -0.0008209293091875578, + "strategy_returns": -0.04131735761350675, + "strategy_returns_tc": -0.04131735761350675, + "margin_ratio": 0.23930898490937405, + "equity": 1965.7243668047486, "accumulated_returns": 1.0136496514828948, - "accumulated_strategy_returns": 1.0106674059086556, - "accumulated_strategy_returns_tc": 1.0096572436680475, - "margin_ratio": 0.036726972812159406, + "accumulated_strategy_returns_tc": 1.965724366804749, + "accumulated_strategy_returns": 1.9676910743614398, }, { "close_time": Timestamp("2023-09-01 14:59:59.999000+0000", tz="UTC"), @@ -485,12 +761,13 @@ "returns": 0.0006607487960858385, "rolling_returns": -0.0003682623169793823, "side": -1, - "strategy_returns": 0.0006607487960858385, - "strategy_returns_tc": -0.0013392512039141617, + "strategy_returns": -0.06921899418794335, + "strategy_returns_tc": -0.07121899418794335, + "margin_ratio": 0.23953327902351285, + "equity": 1830.5964042327755, "accumulated_returns": 1.014319640592638, - "accumulated_strategy_returns": 1.0113354238520749, - "accumulated_strategy_returns_tc": 1.0083059640423278, - "margin_ratio": 0.040232966236214605, + "accumulated_strategy_returns_tc": 1.830596404232776, + "accumulated_strategy_returns": 1.8360964393731591, }, { "close_time": Timestamp("2023-09-01 15:04:59.999000+0000", tz="UTC"), @@ -506,12 +783,13 @@ "returns": 0.0019165664875115606, "rolling_returns": 0.0005382866599384979, "side": 0, - "strategy_returns": -0.0019165664875115606, - "strategy_returns_tc": -0.0029165664875115604, + "strategy_returns": -0.3432266661561419, + "strategy_returns_tc": -0.3442266661561419, + "margin_ratio": 0.0, + "equity": 1297.4686209861013, "accumulated_returns": 1.016265515727322, - "accumulated_strategy_returns": 1.0093989885173678, - "accumulated_strategy_returns_tc": 1.0053694569990421, - "margin_ratio": 0, + "accumulated_strategy_returns_tc": 1.2974686209861015, + "accumulated_strategy_returns": 1.30266888907253, }, - ], + ] } diff --git a/tests/backtesting/vectorized/out_margin/moving_average_convergence_divergence_no_trading_costs.py b/tests/backtesting/vectorized/out_margin/moving_average_convergence_divergence_no_trading_costs.py index 67fdfcf..0fa59a3 100644 --- a/tests/backtesting/vectorized/out_margin/moving_average_convergence_divergence_no_trading_costs.py +++ b/tests/backtesting/vectorized/out_margin/moving_average_convergence_divergence_no_trading_costs.py @@ -26,10 +26,10 @@ "side": 1, "strategy_returns": 0.0, "strategy_returns_tc": 0.0, + "equity": 1000.0, "accumulated_returns": 1.0, - "accumulated_strategy_returns": 1.0, "accumulated_strategy_returns_tc": 1.0, - "margin_ratio": 0.004, + "accumulated_strategy_returns": 1.0, }, { "close_time": Timestamp("2023-09-01 14:49:59.999000+0000", tz="UTC"), @@ -47,10 +47,10 @@ "side": 1, "strategy_returns": 0.0003967606653441501, "strategy_returns_tc": 0.0003967606653441501, + "equity": 1000.3968393852675, "accumulated_returns": 1.0003968393852676, - "accumulated_strategy_returns": 1.0003968393852676, "accumulated_strategy_returns_tc": 1.0003968393852676, - "margin_ratio": 0.004, + "accumulated_strategy_returns": 1.0003968393852676, }, { "close_time": Timestamp("2023-09-01 14:54:59.999000+0000", tz="UTC"), @@ -68,10 +68,10 @@ "side": -1, "strategy_returns": -0.0008209293091875578, "strategy_returns_tc": -0.0008209293091875578, + "equity": 999.5759213029578, "accumulated_returns": 0.9995759213029578, - "accumulated_strategy_returns": 0.9995759213029578, "accumulated_strategy_returns_tc": 0.9995759213029578, - "margin_ratio": 0.004007844535567837, + "accumulated_strategy_returns": 0.9995759213029578, }, { "close_time": Timestamp("2023-09-01 14:59:59.999000+0000", tz="UTC"), @@ -87,12 +87,12 @@ "returns": 0.0006607487960858385, "macd_diff": -28.20911405336851, "side": -1, - "strategy_returns": -0.0006607487960858385, - "strategy_returns_tc": -0.0006607487960858385, + "strategy_returns": -0.0006607487960858446, + "strategy_returns_tc": -0.0006607487960858446, + "equity": 998.9156708702212, "accumulated_returns": 1.0002366081395337, - "accumulated_strategy_returns": 0.9989156708702213, "accumulated_strategy_returns_tc": 0.9989156708702213, - "margin_ratio": 0.004009515267046255, + "accumulated_strategy_returns": 0.9989156708702213, }, { "close_time": Timestamp("2023-09-01 15:04:59.999000+0000", tz="UTC"), @@ -108,14 +108,15 @@ "returns": 0.0019165664875115606, "macd_diff": -16.167489029180103, "side": 0, - "strategy_returns": -0.0019165664875115606, - "strategy_returns_tc": -0.0019165664875115606, + "strategy_returns": -0.0019165664875115203, + "strategy_returns_tc": -0.0019165664875115203, + "equity": 997.0030160221412, "accumulated_returns": 1.002155466324555, - "accumulated_strategy_returns": 0.9970030160221413, "accumulated_strategy_returns_tc": 0.9970030160221413, - "margin_ratio": 0, + "accumulated_strategy_returns": 0.9970030160221413, }, - ], + ] + , 10: [ { "close_time": Timestamp("2023-09-01 14:44:59.999000+0000", tz="UTC"), @@ -133,10 +134,11 @@ "side": 1, "strategy_returns": 0.0, "strategy_returns_tc": 0.0, + "margin_ratio": 0.0, + "equity": 1000.0, "accumulated_returns": 1.0, - "accumulated_strategy_returns": 1.0, "accumulated_strategy_returns_tc": 1.0, - "margin_ratio": 0.0403266687889347, + "accumulated_strategy_returns": 1.0, }, { "close_time": Timestamp("2023-09-01 14:49:59.999000+0000", tz="UTC"), @@ -152,12 +154,13 @@ "returns": 0.0003967606653441501, "macd_diff": 5.095611124768823, "side": 1, - "strategy_returns": 0.0003967606653441501, - "strategy_returns_tc": 0.0003967606653441501, + "strategy_returns": 0.003960540547606178, + "strategy_returns_tc": 0.003960540547606178, + "margin_ratio": 0.04057206500534814, + "equity": 1003.9683938526758, "accumulated_returns": 1.0003968393852676, - "accumulated_strategy_returns": 1.0003968393852676, - "accumulated_strategy_returns_tc": 1.0003968393852676, - "margin_ratio": 0.04057206500534813, + "accumulated_strategy_returns_tc": 1.0039683938526758, + "accumulated_strategy_returns": 1.0039683938526758, }, { "close_time": Timestamp("2023-09-01 14:54:59.999000+0000", tz="UTC"), @@ -173,12 +176,13 @@ "returns": -0.0008209293091875578, "macd_diff": -22.87327744557183, "side": -1, - "strategy_returns": -0.0008209293091875578, - "strategy_returns_tc": -0.0008209293091875578, + "strategy_returns": -0.008210345158717942, + "strategy_returns_tc": -0.008210345158717942, + "margin_ratio": 0.04039420868308765, + "equity": 995.7592130295782, "accumulated_returns": 0.9995759213029578, - "accumulated_strategy_returns": 0.9995759213029578, - "accumulated_strategy_returns_tc": 0.9995759213029578, - "margin_ratio": 0.040435290943430145, + "accumulated_strategy_returns_tc": 0.9957592130295781, + "accumulated_strategy_returns": 0.9957592130295781, }, { "close_time": Timestamp("2023-09-01 14:59:59.999000+0000", tz="UTC"), @@ -194,12 +198,13 @@ "returns": 0.0006607487960858385, "macd_diff": -28.20911405336851, "side": -1, - "strategy_returns": -0.0006607487960858385, - "strategy_returns_tc": -0.0006607487960858385, - "accumulated_returns": 1.0002366081395337, - "accumulated_strategy_returns": 0.9989156708702213, - "accumulated_strategy_returns_tc": 0.9989156708702213, + "strategy_returns": -0.006627217068784065, + "strategy_returns_tc": -0.006627217068784065, "margin_ratio": 0.040529002487472494, + "equity": 989.1819192263501, + "accumulated_returns": 1.0002366081395337, + "accumulated_strategy_returns_tc": 0.9891819192263501, + "accumulated_strategy_returns": 0.9891819192263501, }, { "close_time": Timestamp("2023-09-01 15:04:59.999000+0000", tz="UTC"), @@ -215,12 +220,125 @@ "returns": 0.0019165664875115606, "macd_diff": -16.167489029180103, "side": 0, - "strategy_returns": -0.0019165664875115606, - "strategy_returns_tc": -0.0019165664875115606, + "strategy_returns": -0.019449821191734596, + "strategy_returns_tc": -0.019449821191734596, + "margin_ratio": 0.0, + "equity": 970.1284021724503, "accumulated_returns": 1.002155466324555, - "accumulated_strategy_returns": 0.9970030160221413, - "accumulated_strategy_returns_tc": 0.9970030160221413, - "margin_ratio": 0, + "accumulated_strategy_returns_tc": 0.9701284021724502, + "accumulated_strategy_returns": 0.9701284021724502, }, ], + 100: [ + { + "close_time": Timestamp("2023-09-01 14:44:59.999000+0000", tz="UTC"), + "open": 56260.11, + "high": 56317.43, + "low": 56118.31, + "close": 56168.82, + "volume": 370.500359, + "quote_volume": 20822485.25288953, + "trades": 1, + "taker_buy_asset_volume": 178.075904, + "taker_buy_quote_volume": 10007121.78892216, + "returns": 0.0, + "macd_diff": 37.90364648896147, + "side": 1, + "strategy_returns": 0.0, + "strategy_returns_tc": 0.0, + "margin_ratio": 0.0, + "equity": 1000.0, + "accumulated_returns": 1.0, + "accumulated_strategy_returns_tc": 1.0, + "accumulated_strategy_returns": 1.0, + }, + { + "close_time": Timestamp("2023-09-01 14:49:59.999000+0000", tz="UTC"), + "open": 56168.82, + "high": 56269.99, + "low": 56080.96, + "close": 56191.11, + "volume": 324.51432, + "quote_volume": 18225087.41727558, + "trades": 0, + "taker_buy_asset_volume": 145.064381, + "taker_buy_quote_volume": 8146012.47892439, + "returns": 0.0003967606653441501, + "macd_diff": 5.095611124768823, + "side": 1, + "strategy_returns": 0.03891676170198583, + "strategy_returns_tc": 0.03891676170198583, + "margin_ratio": 0.5325145063126321, + "equity": 1039.6839385267579, + "accumulated_returns": 1.0003968393852676, + "accumulated_strategy_returns_tc": 1.0396839385267578, + "accumulated_strategy_returns": 1.0396839385267578, + }, + { + "close_time": Timestamp("2023-09-01 14:54:59.999000+0000", tz="UTC"), + "open": 56191.11, + "high": 56200.0, + "low": 56107.98, + "close": 56145.0, + "volume": 254.091606, + "quote_volume": 14265787.89818125, + "trades": 2, + "taker_buy_asset_volume": 134.1124, + "taker_buy_quote_volume": 7529521.30623853, + "returns": -0.0008209293091875578, + "macd_diff": -22.87327744557183, + "side": -1, + "strategy_returns": -0.08225010462807437, + "strategy_returns_tc": -0.08225010462807437, + "margin_ratio": 0.504055899571967, + "equity": 957.5921302957817, + "accumulated_returns": 0.9995759213029578, + "accumulated_strategy_returns_tc": 0.9575921302957816, + "accumulated_strategy_returns": 0.9575921302957816, + }, + { + "close_time": Timestamp("2023-09-01 14:59:59.999000+0000", tz="UTC"), + "open": 56145.0, + "high": 56211.7, + "low": 56106.97, + "close": 56182.11, + "volume": 270.145731, + "quote_volume": 15171017.18758856, + "trades": 0, + "taker_buy_asset_volume": 168.231118, + "taker_buy_quote_volume": 9447425.0774598, + "returns": 0.0006607487960858385, + "macd_diff": -28.20911405336851, + "side": -1, + "strategy_returns": -0.06833564640004638, + "strategy_returns_tc": -0.06833564640004638, + "margin_ratio": 0.5088282625334934, + "equity": 894.3402446772526, + "accumulated_returns": 1.0002366081395337, + "accumulated_strategy_returns_tc": 0.8943402446772525, + "accumulated_strategy_returns": 0.8943402446772525, + }, + { + "close_time": Timestamp("2023-09-01 15:04:59.999000+0000", tz="UTC"), + "open": 56182.12, + "high": 56299.78, + "low": 56172.09, + "close": 56289.89, + "volume": 298.797415, + "quote_volume": 16804824.55255641, + "trades": 1, + "taker_buy_asset_volume": 139.83665, + "taker_buy_quote_volume": 7864202.02549528, + "returns": 0.0019165664875115606, + "macd_diff": -16.167489029180103, + "side": 0, + "strategy_returns": -0.22926166773797793, + "strategy_returns_tc": -0.22926166773797793, + "margin_ratio": 0.0, + "equity": 711.1082168282761, + "accumulated_returns": 1.002155466324555, + "accumulated_strategy_returns_tc": 0.7111082168282761, + "accumulated_strategy_returns": 0.7111082168282761, + }, + ] } diff --git a/tests/backtesting/vectorized/out_margin/moving_average_crossover_trading_costs.py b/tests/backtesting/vectorized/out_margin/moving_average_crossover_trading_costs.py index 51012b7..6008f50 100644 --- a/tests/backtesting/vectorized/out_margin/moving_average_crossover_trading_costs.py +++ b/tests/backtesting/vectorized/out_margin/moving_average_crossover_trading_costs.py @@ -23,11 +23,11 @@ "SMA_L": 55489.95428571429, "side": 1, "strategy_returns": 0.0, - "strategy_returns_tc": -0.003, + "strategy_returns_tc": 0.0, + "equity": 997.004495503373, "accumulated_returns": 1.0, + "accumulated_strategy_returns_tc": 1.0, "accumulated_strategy_returns": 1.0, - "accumulated_strategy_returns_tc": 0.997004495503373, - "margin_ratio": 0.004, }, { "close_time": Timestamp("2023-09-01 14:39:59.999000+0000", tz="UTC"), @@ -46,10 +46,10 @@ "side": 1, "strategy_returns": 0.005926179097336494, "strategy_returns_tc": 0.005926179097336494, + "equity": 1002.9304645383612, "accumulated_returns": 1.0059437736356407, + "accumulated_strategy_returns_tc": 1.0059437736356407, "accumulated_strategy_returns": 1.0059437736356407, - "accumulated_strategy_returns_tc": 1.0029304645383612, - "margin_ratio": 0.004, }, { "close_time": Timestamp("2023-09-01 14:44:59.999000+0000", tz="UTC"), @@ -68,10 +68,10 @@ "side": 1, "strategy_returns": -0.00170962942015996, "strategy_returns_tc": -0.00170962942015996, + "equity": 1001.2172899739072, "accumulated_returns": 1.0042254518304927, + "accumulated_strategy_returns_tc": 1.0042254518304927, "accumulated_strategy_returns": 1.0042254518304927, - "accumulated_strategy_returns_tc": 1.0012172899739071, - "margin_ratio": 0.004, }, { "close_time": Timestamp("2023-09-01 14:49:59.999000+0000", tz="UTC"), @@ -90,10 +90,10 @@ "side": 1, "strategy_returns": 0.0003967606653441501, "strategy_returns_tc": 0.0003967606653441501, + "equity": 1001.6146124277798, "accumulated_returns": 1.0046239680414673, + "accumulated_strategy_returns_tc": 1.0046239680414673, "accumulated_strategy_returns": 1.0046239680414673, - "accumulated_strategy_returns_tc": 1.0016146124277796, - "margin_ratio": 0.004, }, { "close_time": Timestamp("2023-09-01 14:54:59.999000+0000", tz="UTC"), @@ -112,10 +112,10 @@ "side": 1, "strategy_returns": -0.0008209293091875578, "strategy_returns_tc": -0.0008209293091875578, + "equity": 1000.792695050119, "accumulated_returns": 1.0037995812093439, + "accumulated_strategy_returns_tc": 1.0037995812093439, "accumulated_strategy_returns": 1.0037995812093439, - "accumulated_strategy_returns_tc": 1.000792695050119, - "margin_ratio": 0.004, }, { "close_time": Timestamp("2023-09-01 14:59:59.999000+0000", tz="UTC"), @@ -134,10 +134,10 @@ "side": 1, "strategy_returns": 0.0006607487960858385, "strategy_returns_tc": 0.0006607487960858385, + "equity": 1001.454186134157, "accumulated_returns": 1.0044630597463227, + "accumulated_strategy_returns_tc": 1.0044630597463227, "accumulated_strategy_returns": 1.0044630597463227, - "accumulated_strategy_returns_tc": 1.0014541861341568, - "margin_ratio": 0.004, }, { "close_time": Timestamp("2023-09-01 15:04:59.999000+0000", tz="UTC"), @@ -154,14 +154,15 @@ "SMA_S": 56202.027500000004, "SMA_L": 56167.76285714285, "side": 0, - "strategy_returns": 0.0019165664875115606, - "strategy_returns_tc": -0.0010834335124884395, + "strategy_returns": 0.0019165664875116122, + "strategy_returns_tc": -0.0010834335124883878, + "equity": 1000.3697646630362, "accumulated_returns": 1.0063900259741747, + "accumulated_strategy_returns_tc": 1.0033753801260084, "accumulated_strategy_returns": 1.0063900259741747, - "accumulated_strategy_returns_tc": 1.000369764663036, - "margin_ratio": 0, }, - ], + ] +, 10: [ { "close_time": Timestamp("2023-09-01 14:34:59.999000+0000", tz="UTC"), @@ -179,11 +180,12 @@ "SMA_L": 55489.95428571429, "side": 1, "strategy_returns": 0.0, - "strategy_returns_tc": -0.003, + "strategy_returns_tc": 0.0, + "margin_ratio": 0.0, + "equity": 970.04495503373, "accumulated_returns": 1.0, + "accumulated_strategy_returns_tc": 1.0, "accumulated_strategy_returns": 1.0, - "accumulated_strategy_returns_tc": 0.997004495503373, - "margin_ratio": 0.042635867510876606, }, { "close_time": Timestamp("2023-09-01 14:39:59.999000+0000", tz="UTC"), @@ -200,12 +202,13 @@ "SMA_S": 55784.692500000005, "SMA_L": 55615.09285714285, "side": 1, - "strategy_returns": 0.005926179097336494, - "strategy_returns_tc": 0.005926179097336494, + "strategy_returns": 0.059296335851582546, + "strategy_returns_tc": 0.059296335851582546, + "margin_ratio": 0.04110996916752309, + "equity": 1029.304645383612, "accumulated_returns": 1.0059437736356407, - "accumulated_strategy_returns": 1.0059437736356407, - "accumulated_strategy_returns_tc": 1.0029304645383612, - "margin_ratio": 0.04, + "accumulated_strategy_returns_tc": 1.061089633055018, + "accumulated_strategy_returns": 1.061089633055018, }, { "close_time": Timestamp("2023-09-01 14:44:59.999000+0000", tz="UTC"), @@ -222,12 +225,13 @@ "SMA_S": 55979.6575, "SMA_L": 55726.50142857143, "side": 1, - "strategy_returns": -0.00170962942015996, - "strategy_returns_tc": -0.00170962942015996, + "strategy_returns": -0.016784066871866978, + "strategy_returns_tc": -0.016784066871866978, + "margin_ratio": 0.03988465437025636, + "equity": 1012.1728997390724, "accumulated_returns": 1.0042254518304927, - "accumulated_strategy_returns": 1.0042254518304927, - "accumulated_strategy_returns_tc": 1.0012172899739071, - "margin_ratio": 0.03884239665912109, + "accumulated_strategy_returns_tc": 1.0434288581026405, + "accumulated_strategy_returns": 1.0434288581026405, }, { "close_time": Timestamp("2023-09-01 14:49:59.999000+0000", tz="UTC"), @@ -244,12 +248,13 @@ "SMA_S": 56139.335, "SMA_L": 55841.09428571428, "side": 1, - "strategy_returns": 0.0003967606653441501, - "strategy_returns_tc": 0.0003967606653441501, + "strategy_returns": 0.003917756106116597, + "strategy_returns_tc": 0.003917756106116597, + "margin_ratio": 0.0401243898900471, + "equity": 1016.1461242777975, "accumulated_returns": 1.0046239680414673, - "accumulated_strategy_returns": 1.0046239680414673, - "accumulated_strategy_returns_tc": 1.0016146124277796, - "margin_ratio": 0.0390690468096016, + "accumulated_strategy_returns_tc": 1.0475247760475848, + "accumulated_strategy_returns": 1.0475247760475848, }, { "close_time": Timestamp("2023-09-01 14:54:59.999000+0000", tz="UTC"), @@ -266,12 +271,13 @@ "SMA_S": 56192.465000000004, "SMA_L": 55949.09999999999, "side": 1, - "strategy_returns": -0.0008209293091875578, - "strategy_returns_tc": -0.0008209293091875578, + "strategy_returns": -0.00812146464057162, + "strategy_returns_tc": -0.00812146464057162, + "margin_ratio": 0.039950639823381526, + "equity": 1007.9269505011899, "accumulated_returns": 1.0037995812093439, - "accumulated_strategy_returns": 1.0037995812093439, - "accumulated_strategy_returns_tc": 1.000792695050119, - "margin_ratio": 0.038904788352689346, + "accumulated_strategy_returns_tc": 1.0390517937038728, + "accumulated_strategy_returns": 1.0390517937038728, }, { "close_time": Timestamp("2023-09-01 14:59:59.999000+0000", tz="UTC"), @@ -288,12 +294,13 @@ "SMA_S": 56171.759999999995, "SMA_L": 56062.40714285715, "side": 1, - "strategy_returns": 0.0006607487960858385, - "strategy_returns_tc": 0.0006607487960858385, + "strategy_returns": 0.006541445177869725, + "strategy_returns_tc": 0.006541445177869725, + "margin_ratio": 0.03995710447610706, + "equity": 1014.5418613415692, "accumulated_returns": 1.0044630597463227, - "accumulated_strategy_returns": 1.0044630597463227, - "accumulated_strategy_returns_tc": 1.0014541861341568, - "margin_ratio": 0.038910900599160365, + "accumulated_strategy_returns_tc": 1.0458709733780245, + "accumulated_strategy_returns": 1.0458709733780245, }, { "close_time": Timestamp("2023-09-01 15:04:59.999000+0000", tz="UTC"), @@ -310,12 +317,176 @@ "SMA_S": 56202.027500000004, "SMA_L": 56167.76285714285, "side": 0, - "strategy_returns": 0.0019165664875115606, - "strategy_returns_tc": -0.0010834335124884395, + "strategy_returns": -0.007746315319505905, + "strategy_returns_tc": -0.010746315319505905, + "margin_ratio": 0.0, + "equity": 1003.6976466303616, "accumulated_returns": 1.0063900259741747, - "accumulated_strategy_returns": 1.0063900259741747, - "accumulated_strategy_returns_tc": 1.000369764663036, - "margin_ratio": 0, + "accumulated_strategy_returns_tc": 1.0346918886820677, + "accumulated_strategy_returns": 1.0378006251212206, }, ], -} + 100: [ + { + "close_time": Timestamp("2023-09-01 14:34:59.999000+0000", tz="UTC"), + "open": 55550.89, + "high": 56087.68, + "low": 55550.89, + "close": 55932.48, + "volume": 692.924319, + "quote_volume": 38726480.58078431, + "trades": 1, + "taker_buy_asset_volume": 411.223017, + "taker_buy_quote_volume": 22979821.33981915, + "returns": 0.0, + "SMA_S": 55565.7, + "SMA_L": 55489.95428571429, + "side": 1, + "strategy_returns": 0.0, + "strategy_returns_tc": 0.0, + "margin_ratio": 0.0, + "equity": 700.4495503373, + "accumulated_returns": 1.0, + "accumulated_strategy_returns_tc": 1.0, + "accumulated_strategy_returns": 1.0, + }, + { + "close_time": Timestamp("2023-09-01 14:39:59.999000+0000", tz="UTC"), + "open": 55932.48, + "high": 56333.0, + "low": 55932.48, + "close": 56264.93, + "volume": 603.660118, + "quote_volume": 33896505.6971466, + "trades": 0, + "taker_buy_asset_volume": 356.915883, + "taker_buy_quote_volume": 20037884.70780964, + "returns": 0.005926179097336494, + "SMA_S": 55784.692500000005, + "SMA_L": 55615.09285714285, + "side": 1, + "strategy_returns": 0.6130339616212771, + "strategy_returns_tc": 0.6130339616212771, + "margin_ratio": 0.63990042674252, + "equity": 1293.0464538361198, + "accumulated_returns": 1.0059437736356407, + "accumulated_strategy_returns_tc": 1.8460236760998074, + "accumulated_strategy_returns": 1.8460236760998074, + }, + { + "close_time": Timestamp("2023-09-01 14:44:59.999000+0000", tz="UTC"), + "open": 56260.11, + "high": 56317.43, + "low": 56118.31, + "close": 56168.82, + "volume": 370.500359, + "quote_volume": 20822485.25288953, + "trades": 0, + "taker_buy_asset_volume": 178.075904, + "taker_buy_quote_volume": 10007121.78892216, + "returns": -0.00170962942015996, + "SMA_S": 55979.6575, + "SMA_L": 55726.50142857143, + "side": 1, + "strategy_returns": -0.14212978369469245, + "strategy_returns_tc": -0.14212978369469245, + "margin_ratio": 0.4361416243132815, + "equity": 1121.7289973907223, + "accumulated_returns": 1.0042254518304927, + "accumulated_strategy_returns_tc": 1.6014415268744995, + "accumulated_strategy_returns": 1.6014415268744995, + }, + { + "close_time": Timestamp("2023-09-01 14:49:59.999000+0000", tz="UTC"), + "open": 56168.82, + "high": 56269.99, + "low": 56080.96, + "close": 56191.11, + "volume": 324.51432, + "quote_volume": 18225087.41727558, + "trades": 0, + "taker_buy_asset_volume": 145.064381, + "taker_buy_quote_volume": 8146012.47892439, + "returns": 0.0003967606653441501, + "SMA_S": 56139.335, + "SMA_L": 55841.09428571428, + "side": 1, + "strategy_returns": 0.03480766179812563, + "strategy_returns_tc": 0.03480766179812563, + "margin_ratio": 0.46586947302075615, + "equity": 1161.461242777974, + "accumulated_returns": 1.0046239680414673, + "accumulated_strategy_returns_tc": 1.6581654484875814, + "accumulated_strategy_returns": 1.6581654484875814, + }, + { + "close_time": Timestamp("2023-09-01 14:54:59.999000+0000", tz="UTC"), + "open": 56191.11, + "high": 56200.0, + "low": 56107.98, + "close": 56145.0, + "volume": 254.091606, + "quote_volume": 14265787.89818125, + "trades": 0, + "taker_buy_asset_volume": 134.1124, + "taker_buy_quote_volume": 7529521.30623853, + "returns": -0.0008209293091875578, + "SMA_S": 56192.465000000004, + "SMA_L": 55949.09999999999, + "side": 1, + "strategy_returns": -0.07339447638503446, + "strategy_returns_tc": -0.07339447638503446, + "margin_ratio": 0.44397290830123903, + "equity": 1079.2695050118982, + "accumulated_returns": 1.0037995812093439, + "accumulated_strategy_returns_tc": 1.5408240386365843, + "accumulated_strategy_returns": 1.5408240386365843, + }, + { + "close_time": Timestamp("2023-09-01 14:59:59.999000+0000", tz="UTC"), + "open": 56145.0, + "high": 56211.7, + "low": 56106.97, + "close": 56182.11, + "volume": 270.145731, + "quote_volume": 15171017.18758856, + "trades": 0, + "taker_buy_asset_volume": 168.231118, + "taker_buy_quote_volume": 9447425.0774598, + "returns": 0.0006607487960858385, + "SMA_S": 56171.759999999995, + "SMA_L": 56062.40714285715, + "side": 1, + "strategy_returns": 0.059485743389906566, + "strategy_returns_tc": 0.059485743389906566, + "margin_ratio": 0.44475389523299597, + "equity": 1145.4186134156907, + "accumulated_returns": 1.0044630597463227, + "accumulated_strategy_returns_tc": 1.635262115400198, + "accumulated_strategy_returns": 1.635262115400198, + }, + { + "close_time": Timestamp("2023-09-01 15:04:59.999000+0000", tz="UTC"), + "open": 56182.12, + "high": 56299.78, + "low": 56172.09, + "close": 56289.89, + "volume": 298.797415, + "quote_volume": 16804824.55255641, + "trades": 1, + "taker_buy_asset_volume": 139.83665, + "taker_buy_quote_volume": 7864202.02549528, + "returns": 0.0019165664875115606, + "SMA_S": 56202.027500000004, + "SMA_L": 56167.76285714285, + "side": 0, + "strategy_returns": -0.09646093645461837, + "strategy_returns_tc": -0.09946093645461837, + "margin_ratio": 0.0, + "equity": 1036.9764663036153, + "accumulated_returns": 1.0063900259741747, + "accumulated_strategy_returns_tc": 1.4804441887417323, + "accumulated_strategy_returns": 1.4848921899738052, + }, + ] +} \ No newline at end of file diff --git a/tests/backtesting/vectorized/out_margin/moving_average_no_trading_costs.py b/tests/backtesting/vectorized/out_margin/moving_average_no_trading_costs.py index bafd49e..150ed70 100644 --- a/tests/backtesting/vectorized/out_margin/moving_average_no_trading_costs.py +++ b/tests/backtesting/vectorized/out_margin/moving_average_no_trading_costs.py @@ -24,10 +24,10 @@ "side": 0, "strategy_returns": 0.0, "strategy_returns_tc": 0.0, + "equity": 1000.0, "accumulated_returns": 1.0, - "accumulated_strategy_returns": 1.0, "accumulated_strategy_returns_tc": 1.0, - "margin_ratio": 0.0, + "accumulated_strategy_returns": 1.0, }, { "close_time": Timestamp("2023-09-01 14:19:59.999000+0000", tz="UTC"), @@ -45,10 +45,10 @@ "side": 0, "strategy_returns": 0.0, "strategy_returns_tc": 0.0, + "equity": 1000.0, "accumulated_returns": 1.0, - "accumulated_strategy_returns": 1.0, "accumulated_strategy_returns_tc": 1.0, - "margin_ratio": 0.0, + "accumulated_strategy_returns": 1.0, }, { "close_time": Timestamp("2023-09-01 14:29:59.999000+0000", tz="UTC"), @@ -66,10 +66,10 @@ "side": 1, "strategy_returns": 0.0, "strategy_returns_tc": 0.0, + "equity": 1000.0, "accumulated_returns": 1.002950768528602, - "accumulated_strategy_returns": 1.0, "accumulated_strategy_returns_tc": 1.0, - "margin_ratio": 0.004, + "accumulated_strategy_returns": 1.0, }, { "close_time": Timestamp("2023-09-01 14:34:59.999000+0000", tz="UTC"), @@ -87,10 +87,10 @@ "side": 1, "strategy_returns": 0.006818529518377586, "strategy_returns_tc": 0.006818529518377586, + "equity": 1006.8418286158653, "accumulated_returns": 1.0098127857970252, - "accumulated_strategy_returns": 1.0068418286158654, "accumulated_strategy_returns_tc": 1.0068418286158654, - "margin_ratio": 0.004, + "accumulated_strategy_returns": 1.0068418286158654, }, { "close_time": Timestamp("2023-09-01 14:39:59.999000+0000", tz="UTC"), @@ -108,10 +108,10 @@ "side": 1, "strategy_returns": 0.005926179097336494, "strategy_returns_tc": 0.005926179097336494, + "equity": 1012.8262685320526, "accumulated_returns": 1.0158148844101784, - "accumulated_strategy_returns": 1.0128262685320526, "accumulated_strategy_returns_tc": 1.0128262685320526, - "margin_ratio": 0.004, + "accumulated_strategy_returns": 1.0128262685320526, }, { "close_time": Timestamp("2023-09-01 14:44:59.999000+0000", tz="UTC"), @@ -129,10 +129,10 @@ "side": 1, "strategy_returns": -0.00170962942015996, "strategy_returns_tc": -0.00170962942015996, + "equity": 1011.0961902636069, "accumulated_returns": 1.0140797010812264, - "accumulated_strategy_returns": 1.0110961902636069, "accumulated_strategy_returns_tc": 1.0110961902636069, - "margin_ratio": 0.004, + "accumulated_strategy_returns": 1.0110961902636069, }, { "close_time": Timestamp("2023-09-01 14:49:59.999000+0000", tz="UTC"), @@ -150,10 +150,10 @@ "side": 1, "strategy_returns": 0.0003967606653441501, "strategy_returns_tc": 0.0003967606653441501, + "equity": 1011.4974330541975, "accumulated_returns": 1.0144821278464156, - "accumulated_strategy_returns": 1.0114974330541975, "accumulated_strategy_returns_tc": 1.0114974330541975, - "margin_ratio": 0.004, + "accumulated_strategy_returns": 1.0114974330541975, }, { "close_time": Timestamp("2023-09-01 14:54:59.999000+0000", tz="UTC"), @@ -171,10 +171,10 @@ "side": -1, "strategy_returns": -0.0008209293091875578, "strategy_returns_tc": -0.0008209293091875578, + "equity": 1010.6674059086556, "accumulated_returns": 1.0136496514828948, - "accumulated_strategy_returns": 1.0106674059086556, "accumulated_strategy_returns_tc": 1.0106674059086556, - "margin_ratio": 0.0040078445355678375, + "accumulated_strategy_returns": 1.0106674059086556, }, { "close_time": Timestamp("2023-09-01 14:59:59.999000+0000", tz="UTC"), @@ -190,12 +190,12 @@ "returns": 0.0006607487960858385, "SMA": 56171.759999999995, "side": 1, - "strategy_returns": -0.0006607487960858385, - "strategy_returns_tc": -0.0006607487960858385, + "strategy_returns": -0.0006607487960858446, + "strategy_returns_tc": -0.0006607487960858446, + "equity": 1009.9998292114958, "accumulated_returns": 1.014319640592638, - "accumulated_strategy_returns": 1.0099998292114958, "accumulated_strategy_returns_tc": 1.0099998292114958, - "margin_ratio": 0.004, + "accumulated_strategy_returns": 1.0099998292114958, }, { "close_time": Timestamp("2023-09-01 15:04:59.999000+0000", tz="UTC"), @@ -213,10 +213,10 @@ "side": 0, "strategy_returns": 0.0019165664875115606, "strategy_returns_tc": 0.0019165664875115606, + "equity": 1011.9374172015591, "accumulated_returns": 1.016265515727322, - "accumulated_strategy_returns": 1.0119374172015592, "accumulated_strategy_returns_tc": 1.0119374172015592, - "margin_ratio": 0.0, + "accumulated_strategy_returns": 1.0119374172015592, }, ], 10: [ @@ -236,10 +236,11 @@ "side": 0, "strategy_returns": 0.0, "strategy_returns_tc": 0.0, + "margin_ratio": 0.0, + "equity": 1000.0, "accumulated_returns": 1.0, - "accumulated_strategy_returns": 1.0, "accumulated_strategy_returns_tc": 1.0, - "margin_ratio": 0.0, + "accumulated_strategy_returns": 1.0, }, { "close_time": Timestamp("2023-09-01 14:19:59.999000+0000", tz="UTC"), @@ -257,10 +258,233 @@ "side": 0, "strategy_returns": 0.0, "strategy_returns_tc": 0.0, + "margin_ratio": 0.0, + "equity": 1000.0, "accumulated_returns": 1.0, + "accumulated_strategy_returns_tc": 1.0, "accumulated_strategy_returns": 1.0, + }, + { + "close_time": Timestamp("2023-09-01 14:29:59.999000+0000", tz="UTC"), + "open": 55388.95, + "high": 55569.95, + "low": 55388.95, + "close": 55552.4, + "volume": 149.363426, + "quote_volume": 8288967.03877351, + "trades": 1, + "taker_buy_asset_volume": 82.67909, + "taker_buy_quote_volume": 4588065.23181743, + "returns": 0.002946423556387118, + "SMA": 55429.82000000001, + "side": 1, + "strategy_returns": 0.0, + "strategy_returns_tc": 0.0, + "margin_ratio": 0.0, + "equity": 1000.0, + "accumulated_returns": 1.002950768528602, "accumulated_strategy_returns_tc": 1.0, + "accumulated_strategy_returns": 1.0, + }, + { + "close_time": Timestamp("2023-09-01 14:34:59.999000+0000", tz="UTC"), + "open": 55550.89, + "high": 56087.68, + "low": 55550.89, + "close": 55932.48, + "volume": 692.924319, + "quote_volume": 38726480.58078431, + "trades": 0, + "taker_buy_asset_volume": 411.223017, + "taker_buy_quote_volume": 22979821.33981915, + "returns": 0.006818529518377586, + "SMA": 55565.7, + "side": 1, + "strategy_returns": 0.06617931756831429, + "strategy_returns_tc": 0.06617931756831429, + "margin_ratio": 0.04000978801634217, + "equity": 1068.4182861586535, + "accumulated_returns": 1.0098127857970252, + "accumulated_strategy_returns_tc": 1.0684182861586535, + "accumulated_strategy_returns": 1.0684182861586535, + }, + { + "close_time": Timestamp("2023-09-01 14:39:59.999000+0000", tz="UTC"), + "open": 55932.48, + "high": 56333.0, + "low": 55932.48, + "close": 56264.93, + "volume": 603.660118, + "quote_volume": 33896505.6971466, + "trades": 0, + "taker_buy_asset_volume": 356.915883, + "taker_buy_quote_volume": 20037884.70780964, + "returns": 0.005926179097336494, + "SMA": 55784.692500000005, + "side": 1, + "strategy_returns": 0.054499685453103845, + "strategy_returns_tc": 0.054499685453103845, + "margin_ratio": 0.03769466852671801, + "equity": 1128.2626853205259, + "accumulated_returns": 1.0158148844101784, + "accumulated_strategy_returns_tc": 1.128262685320526, + "accumulated_strategy_returns": 1.128262685320526, + }, + { + "close_time": Timestamp("2023-09-01 14:44:59.999000+0000", tz="UTC"), + "open": 56260.11, + "high": 56317.43, + "low": 56118.31, + "close": 56168.82, + "volume": 370.500359, + "quote_volume": 20822485.25288953, + "trades": 0, + "taker_buy_asset_volume": 178.075904, + "taker_buy_quote_volume": 10007121.78892216, + "returns": -0.00170962942015996, + "SMA": 55979.6575, + "side": 1, + "strategy_returns": -0.015452784008520227, + "strategy_returns_tc": -0.015452784008520227, + "margin_ratio": 0.03667174305481815, + "equity": 1110.9619026360692, + "accumulated_returns": 1.0140797010812264, + "accumulated_strategy_returns_tc": 1.1109619026360693, + "accumulated_strategy_returns": 1.1109619026360693, + }, + { + "close_time": Timestamp("2023-09-01 14:49:59.999000+0000", tz="UTC"), + "open": 56168.82, + "high": 56269.99, + "low": 56080.96, + "close": 56191.11, + "volume": 324.51432, + "quote_volume": 18225087.41727558, + "trades": 0, + "taker_buy_asset_volume": 145.064381, + "taker_buy_quote_volume": 8146012.47892439, + "returns": 0.0003967606653441501, + "SMA": 56139.335, + "side": 1, + "strategy_returns": 0.003605163698727144, + "strategy_returns_tc": 0.003605163698727144, + "margin_ratio": 0.03687232321904072, + "equity": 1114.9743305419752, + "accumulated_returns": 1.0144821278464156, + "accumulated_strategy_returns_tc": 1.1149743305419753, + "accumulated_strategy_returns": 1.1149743305419753, + }, + { + "close_time": Timestamp("2023-09-01 14:54:59.999000+0000", tz="UTC"), + "open": 56191.11, + "high": 56200.0, + "low": 56107.98, + "close": 56145.0, + "volume": 254.091606, + "quote_volume": 14265787.89818125, + "trades": 2, + "taker_buy_asset_volume": 134.1124, + "taker_buy_quote_volume": 7529521.30623853, + "returns": -0.0008209293091875578, + "SMA": 56192.465000000004, + "side": -1, + "strategy_returns": -0.00747220857615742, + "strategy_returns_tc": -0.00747220857615742, + "margin_ratio": 0.03672697281215937, + "equity": 1106.674059086556, + "accumulated_returns": 1.0136496514828948, + "accumulated_strategy_returns_tc": 1.1066740590865562, + "accumulated_strategy_returns": 1.1066740590865562, + }, + { + "close_time": Timestamp("2023-09-01 14:59:59.999000+0000", tz="UTC"), + "open": 56145.0, + "high": 56211.7, + "low": 56106.97, + "close": 56182.11, + "volume": 270.145731, + "quote_volume": 15171017.18758856, + "trades": 2, + "taker_buy_asset_volume": 168.231118, + "taker_buy_quote_volume": 9447425.0774598, + "returns": 0.0006607487960858385, + "SMA": 56171.759999999995, + "side": 1, + "strategy_returns": -0.006627217068784065, + "strategy_returns_tc": -0.006627217068784065, + "margin_ratio": 0.04052900248747251, + "equity": 1099.3641388410008, + "accumulated_returns": 1.014319640592638, + "accumulated_strategy_returns_tc": 1.099364138841001, + "accumulated_strategy_returns": 1.099364138841001, + }, + { + "close_time": Timestamp("2023-09-01 15:04:59.999000+0000", tz="UTC"), + "open": 56182.12, + "high": 56299.78, + "low": 56172.09, + "close": 56289.89, + "volume": 298.797415, + "quote_volume": 16804824.55255641, + "trades": 1, + "taker_buy_asset_volume": 139.83665, + "taker_buy_quote_volume": 7864202.02549528, + "returns": 0.0019165664875115606, + "SMA": 56202.027500000004, + "side": 0, + "strategy_returns": 0.01900234907029065, + "strategy_returns_tc": 0.01900234907029065, "margin_ratio": 0.0, + "equity": 1120.4543874778506, + "accumulated_returns": 1.016265515727322, + "accumulated_strategy_returns_tc": 1.1204543874778505, + "accumulated_strategy_returns": 1.1204543874778505, + }, + ], + 100: [ + { + "close_time": Timestamp("2023-09-01 14:14:59.999000+0000", tz="UTC"), + "open": 55306.46, + "high": 55399.68, + "low": 55217.22, + "close": 55388.96, + "volume": 276.690734, + "quote_volume": 15295597.50785806, + "trades": 0, + "taker_buy_asset_volume": 145.211424, + "taker_buy_quote_volume": 8027028.99029815, + "returns": 0.0, + "SMA": 55388.96, + "side": 0, + "strategy_returns": 0.0, + "strategy_returns_tc": 0.0, + "margin_ratio": 0.0, + "equity": 1000.0, + "accumulated_returns": 1.0, + "accumulated_strategy_returns_tc": 1.0, + "accumulated_strategy_returns": 1.0, + }, + { + "close_time": Timestamp("2023-09-01 14:19:59.999000+0000", tz="UTC"), + "open": 55306.46, + "high": 55399.68, + "low": 55217.22, + "close": 55388.96, + "volume": 276.690734, + "quote_volume": 15295597.50785806, + "trades": 0, + "taker_buy_asset_volume": 145.211424, + "taker_buy_quote_volume": 8027028.99029815, + "returns": 0.0, + "SMA": 55388.96, + "side": 0, + "strategy_returns": 0.0, + "strategy_returns_tc": 0.0, + "margin_ratio": 0.0, + "equity": 1000.0, + "accumulated_returns": 1.0, + "accumulated_strategy_returns_tc": 1.0, + "accumulated_strategy_returns": 1.0, }, { "close_time": Timestamp("2023-09-01 14:29:59.999000+0000", tz="UTC"), @@ -278,10 +502,11 @@ "side": 1, "strategy_returns": 0.0, "strategy_returns_tc": 0.0, + "margin_ratio": 0.0, + "equity": 1000.0, "accumulated_returns": 1.002950768528602, - "accumulated_strategy_returns": 1.0, "accumulated_strategy_returns_tc": 1.0, - "margin_ratio": 0.041091325886208535, + "accumulated_strategy_returns": 1.0, }, { "close_time": Timestamp("2023-09-01 14:34:59.999000+0000", tz="UTC"), @@ -297,12 +522,13 @@ "returns": 0.006818529518377586, "SMA": 55565.7, "side": 1, - "strategy_returns": 0.006818529518377586, - "strategy_returns_tc": 0.006818529518377586, + "strategy_returns": 0.5212804975653842, + "strategy_returns_tc": 0.5212804975653842, + "margin_ratio": 0.4512128754869022, + "equity": 1684.1828615865352, "accumulated_returns": 1.0098127857970252, - "accumulated_strategy_returns": 1.0068418286158654, - "accumulated_strategy_returns_tc": 1.0068418286158654, - "margin_ratio": 0.040009788016342196, + "accumulated_strategy_returns_tc": 1.684182861586535, + "accumulated_strategy_returns": 1.684182861586535, }, { "close_time": Timestamp("2023-09-01 14:39:59.999000+0000", tz="UTC"), @@ -318,12 +544,13 @@ "returns": 0.005926179097336494, "SMA": 55784.692500000005, "side": 1, - "strategy_returns": 0.005926179097336494, - "strategy_returns_tc": 0.005926179097336494, + "strategy_returns": 0.30404641080894773, + "strategy_returns_tc": 0.30404641080894773, + "margin_ratio": 0.2692230901107734, + "equity": 2282.6268532052595, "accumulated_returns": 1.0158148844101784, - "accumulated_strategy_returns": 1.0128262685320526, - "accumulated_strategy_returns_tc": 1.0128262685320526, - "margin_ratio": 0.03769466852671804, + "accumulated_strategy_returns_tc": 2.28262685320526, + "accumulated_strategy_returns": 2.28262685320526, }, { "close_time": Timestamp("2023-09-01 14:44:59.999000+0000", tz="UTC"), @@ -339,12 +566,13 @@ "returns": -0.00170962942015996, "SMA": 55979.6575, "side": 1, - "strategy_returns": -0.00170962942015996, - "strategy_returns_tc": -0.00170962942015996, + "strategy_returns": -0.07881953341575469, + "strategy_returns_tc": -0.07881953341575469, + "margin_ratio": 0.2254393481916912, + "equity": 2109.6190263606923, "accumulated_returns": 1.0140797010812264, - "accumulated_strategy_returns": 1.0110961902636069, - "accumulated_strategy_returns_tc": 1.0110961902636069, - "margin_ratio": 0.036671743054818164, + "accumulated_strategy_returns_tc": 2.1096190263606927, + "accumulated_strategy_returns": 2.1096190263606927, }, { "close_time": Timestamp("2023-09-01 14:49:59.999000+0000", tz="UTC"), @@ -360,12 +588,13 @@ "returns": 0.0003967606653441501, "SMA": 56139.335, "side": 1, - "strategy_returns": 0.0003967606653441501, - "strategy_returns_tc": 0.0003967606653441501, + "strategy_returns": 0.018841067225081064, + "strategy_returns_tc": 0.018841067225081064, + "margin_ratio": 0.23303415602481037, + "equity": 2149.7433054197522, "accumulated_returns": 1.0144821278464156, - "accumulated_strategy_returns": 1.0114974330541975, - "accumulated_strategy_returns_tc": 1.0114974330541975, - "margin_ratio": 0.03687232321904076, + "accumulated_strategy_returns_tc": 2.1497433054197526, + "accumulated_strategy_returns": 2.1497433054197526, }, { "close_time": Timestamp("2023-09-01 14:54:59.999000+0000", tz="UTC"), @@ -381,12 +610,13 @@ "returns": -0.0008209293091875578, "SMA": 56192.465000000004, "side": -1, - "strategy_returns": -0.0008209293091875578, - "strategy_returns_tc": -0.0008209293091875578, + "strategy_returns": -0.039375669666786274, + "strategy_returns_tc": -0.039375669666786274, + "margin_ratio": 0.22748878592823088, + "equity": 2066.7405908655614, "accumulated_returns": 1.0136496514828948, - "accumulated_strategy_returns": 1.0106674059086556, - "accumulated_strategy_returns_tc": 1.0106674059086556, - "margin_ratio": 0.04043529094343017, + "accumulated_strategy_returns_tc": 2.066740590865562, + "accumulated_strategy_returns": 2.066740590865562, }, { "close_time": Timestamp("2023-09-01 14:59:59.999000+0000", tz="UTC"), @@ -402,12 +632,13 @@ "returns": 0.0006607487960858385, "SMA": 56171.759999999995, "side": 1, - "strategy_returns": -0.0006607487960858385, - "strategy_returns_tc": -0.0006607487960858385, + "strategy_returns": -0.06833564640004638, + "strategy_returns_tc": -0.06833564640004638, + "margin_ratio": 0.5406276263127855, + "equity": 1930.2260610142966, "accumulated_returns": 1.014319640592638, - "accumulated_strategy_returns": 1.0099998292114958, - "accumulated_strategy_returns_tc": 1.0099998292114958, - "margin_ratio": 0.04048800385201632, + "accumulated_strategy_returns_tc": 1.9302260610142972, + "accumulated_strategy_returns": 1.9302260610142972, }, { "close_time": Timestamp("2023-09-01 15:04:59.999000+0000", tz="UTC"), @@ -423,12 +654,13 @@ "returns": 0.0019165664875115606, "SMA": 56202.027500000004, "side": 0, - "strategy_returns": 0.0019165664875115606, - "strategy_returns_tc": 0.0019165664875115606, - "accumulated_returns": 1.016265515727322, - "accumulated_strategy_returns": 1.0119374172015592, - "accumulated_strategy_returns_tc": 1.0119374172015592, + "strategy_returns": 0.17549869013108785, + "strategy_returns_tc": 0.17549869013108785, "margin_ratio": 0.0, + "equity": 2300.521453722264, + "accumulated_returns": 1.016265515727322, + "accumulated_strategy_returns_tc": 2.300521453722265, + "accumulated_strategy_returns": 2.300521453722265, }, ] } diff --git a/tests/backtesting/vectorized/test_vectorized.py b/tests/backtesting/vectorized/test_vectorized.py index 205edc0..b767719 100644 --- a/tests/backtesting/vectorized/test_vectorized.py +++ b/tests/backtesting/vectorized/test_vectorized.py @@ -26,6 +26,7 @@ class TestVectorizedBacktester: + @pytest.mark.parametrize( "fixture", [ diff --git a/tests/backtesting/vectorized/test_vectorized_with_margin.py b/tests/backtesting/vectorized/test_vectorized_with_margin.py index fbfe6c8..d9e9bd7 100644 --- a/tests/backtesting/vectorized/test_vectorized_with_margin.py +++ b/tests/backtesting/vectorized/test_vectorized_with_margin.py @@ -4,6 +4,7 @@ import pytest from stratestic.backtesting import VectorizedBacktester, IterativeBacktester +from stratestic.backtesting.helpers.evaluation import CUM_SUM_STRATEGY, CUM_SUM_STRATEGY_TC, MARGIN_RATIO from stratestic.strategies import MovingAverage from stratestic.utils.exceptions import SymbolInvalid from stratestic.utils.exceptions.leverage_invalid import LeverageInvalid @@ -16,15 +17,15 @@ fixtures = get_fixtures(current_path, keys=["in_margin", "out_margin"]) -cum_returns = "accumulated_strategy_returns" -cum_returns_tc = "accumulated_strategy_returns_tc" -margin_ratio = "margin_ratio" - - class TestVectorizedBacktesterMargin: + @pytest.mark.parametrize( "leverage", - [pytest.param(1, id="leverage=1"), pytest.param(10, id="leverage=10")], + [ + pytest.param(1, id="leverage=1"), + pytest.param(10, id="leverage=10"), + pytest.param(100, id="leverage=100") + ], ) @pytest.mark.parametrize( "fixture", @@ -50,7 +51,6 @@ def test_run(self, leverage, fixture, mocked_plotly_figure_show): symbol="BTCUSDT", amount=amount, trading_costs=trading_costs, - include_margin=True, leverage=leverage, ) @@ -60,11 +60,12 @@ def test_run(self, leverage, fixture, mocked_plotly_figure_show): if len(vect.trades) > 0: assert ( - round(vect.trades[0].profit / vect.trades[0].pnl * leverage) == amount + round(vect.trades[0].profit / vect.trades[0].pnl) == amount ) - for trade in vect.trades: - assert trade.liquidation_price is not None + if leverage > 1: + for trade in vect.trades: + assert trade.liquidation_price is not None for i, d in enumerate(vect.processed_data.to_dict(orient="records")): for key in d: @@ -76,7 +77,7 @@ def test_run(self, leverage, fixture, mocked_plotly_figure_show): "leverage,symbol,second_leverage,exception", [ pytest.param(-1, "BTCUSDT", 1, LeverageInvalid, id="invalid_leverage"), - pytest.param(1, "Invalid Symbol", 1, SymbolInvalid, id="invalid_symbol"), + pytest.param(10, "Invalid Symbol", 1, SymbolInvalid, id="invalid_symbol"), pytest.param( 1, "BTCUSDT", -1, LeverageInvalid, id="invalid_leverage_on_run" ), @@ -91,7 +92,7 @@ def test_exceptions( with pytest.raises(exception): vect = VectorizedBacktester( - strategy, symbol=symbol, include_margin=True, leverage=leverage + strategy, symbol=symbol, leverage=leverage ) vect.run(leverage=second_leverage) @@ -122,7 +123,6 @@ def test_results_equal_to_iterative( strategy_instance, symbol="BTCUSDT", trading_costs=trading_costs, - include_margin=True, leverage=leverage, ) @@ -130,7 +130,6 @@ def test_results_equal_to_iterative( strategy_instance, symbol="BTCUSDT", trading_costs=trading_costs, - include_margin=True, leverage=leverage, ) @@ -142,33 +141,28 @@ def test_results_equal_to_iterative( pd.testing.assert_series_equal(vect.results, ite.results) pd.testing.assert_series_equal( - vect.processed_data[cum_returns], ite.processed_data[cum_returns] - ) - pd.testing.assert_series_equal( - vect.processed_data[cum_returns_tc], ite.processed_data[cum_returns_tc] + vect.processed_data[CUM_SUM_STRATEGY], ite.processed_data[CUM_SUM_STRATEGY] ) pd.testing.assert_series_equal( - vect.processed_data[margin_ratio], ite.processed_data[margin_ratio] + vect.processed_data[CUM_SUM_STRATEGY_TC], ite.processed_data[CUM_SUM_STRATEGY_TC] ) + if leverage != 1: + pd.testing.assert_series_equal( + vect.processed_data[MARGIN_RATIO], ite.processed_data[MARGIN_RATIO] + ) + pd.testing.assert_frame_equal(trades_vect, trades_ite) - @pytest.mark.parametrize( - "include_margin", - [ - pytest.param(True, id="include_margin=True"), - pytest.param(False, id="include_margin=False") - ], - ) @pytest.mark.parametrize( "margin_threshold, expected_result", [ - pytest.param(0.1, 23, id="margin_threshold=0.1"), - pytest.param(0.5, 91, id="margin_threshold=0.5"), + pytest.param(0.1, 24, id="margin_threshold=0.1"), + pytest.param(0.5, 93, id="margin_threshold=0.5"), pytest.param(1, 124, id="margin_threshold=1") ], ) def test_maximum_leverage( - self, include_margin, margin_threshold, expected_result, mocked_plotly_figure_show + self, margin_threshold, expected_result, mocked_plotly_figure_show ): test_data = data.set_index("open_time") @@ -177,7 +171,7 @@ def test_maximum_leverage( vect = VectorizedBacktester( strategy_instance, symbol="BTCUSDT", - include_margin=include_margin, + leverage=2, ) result = vect.maximum_leverage(margin_threshold=margin_threshold)