diff --git a/src/pages/backtesting/backtesting_page.py b/src/pages/backtesting/backtesting_page.py index be32a30..801f862 100644 --- a/src/pages/backtesting/backtesting_page.py +++ b/src/pages/backtesting/backtesting_page.py @@ -461,6 +461,20 @@ def run_multi_ticker_backtest(tickers: list, start_date: datetime, end_date: dat """Run backtest across multiple tickers and aggregate results""" all_results = [] + # Convert indicator settings to the correct format + processed_settings = {} + for ind_name, ind_config in indicator_settings.items(): + if isinstance(ind_config['params'], dict): + # If params is a dictionary of parameter values (non-optimization mode) + processed_settings[ind_name] = { + 'type': ind_config['type'], + 'params': {k: float(v) if isinstance(v, (int, float)) else v + for k, v in ind_config['params'].items()} + } + else: + # If params is a dictionary of parameter ranges (optimization mode) + processed_settings[ind_name] = ind_config + for ticker in tickers: try: print(f"\nTesting strategy on {ticker}") @@ -485,7 +499,7 @@ def run_multi_ticker_backtest(tickers: list, start_date: datetime, end_date: dat # Run backtest try: - DynamicStrategy.indicator_configs = indicator_settings + DynamicStrategy.indicator_configs = processed_settings bt = Backtest(df, DynamicStrategy, cash=100000, commission=.002) stats = bt.run() @@ -515,6 +529,7 @@ def run_multi_ticker_backtest(tickers: list, start_date: datetime, end_date: dat except Exception as e: print(f"Error during backtest for {ticker}: {str(e)}") + print(f"Current indicator settings: {processed_settings}") continue except Exception as e: @@ -527,6 +542,7 @@ def run_multi_ticker_backtest(tickers: list, start_date: datetime, end_date: dat print("2. Is there data available for the selected date range?") print("3. Are the indicator settings valid?") print("4. Are there any errors in the strategy logic?") + print(f"Last used indicator settings: {processed_settings}") raise ValueError("No valid results were generated from any ticker") return pd.DataFrame(all_results)