fix: Handle indicator parameter conversion in multi-ticker backtest
This commit is contained in:
parent
8c2b8233cf
commit
840c96ede3
@ -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)
|
||||
|
||||
Loading…
Reference in New Issue
Block a user