fix: Handle indicator parameter conversion in multi-ticker backtest

This commit is contained in:
Bobby (aider) 2025-02-14 00:06:45 -08:00
parent 8c2b8233cf
commit 840c96ede3

View File

@ -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)