diff --git a/src/pages/backtesting/backtesting_page.py b/src/pages/backtesting/backtesting_page.py index c504464..d6ec03f 100644 --- a/src/pages/backtesting/backtesting_page.py +++ b/src/pages/backtesting/backtesting_page.py @@ -477,25 +477,31 @@ def run_multi_ticker_backtest(tickers: list, start_date: datetime, end_date: dat bt = Backtest(df, DynamicStrategy, cash=100000, commission=.002) stats = bt.run() - # Store results + # Print raw stats for debugging + print("Debug - Available stats keys:", stats.keys()) + + # Store results with error handling for each metric result = { 'Ticker': ticker, - 'Return [%]': stats['Return [%]'], - 'Sharpe Ratio': stats['Sharpe Ratio'], - 'Max Drawdown [%]': stats['Max. Drawdown [%]'], - 'Win Rate [%]': stats['Win Rate [%]'], - 'Number of Trades': stats['# Trades'] + 'Return [%]': stats.get('Return [%]', stats.get('Return', 0)), + 'Sharpe Ratio': stats.get('Sharpe Ratio', 0), + 'Max Drawdown [%]': stats.get('Max. Drawdown [%]', stats.get('Max Drawdown', 0)), + 'Win Rate [%]': stats.get('Win Rate [%]', stats.get('Win Rate', 0)), + 'Number of Trades': stats.get('# Trades', stats.get('Number of Trades', 0)) } all_results.append(result) - print(f"{ticker} - Return: {stats['Return [%]']:.2f}%, " - f"Sharpe: {stats['Sharpe Ratio']:.2f}, " - f"Drawdown: {stats['Max. Drawdown [%]']:.2f}%") + print(f"{ticker} - Return: {result['Return [%]']:.2f}%, " + f"Sharpe: {result['Sharpe Ratio']:.2f}, " + f"Drawdown: {result['Max Drawdown [%]']:.2f}%") except Exception as e: print(f"Error processing {ticker}: {str(e)}") continue + if not all_results: + raise ValueError("No valid results were generated from any ticker") + return pd.DataFrame(all_results) def display_backtest_results(results: Dict):