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"""
|
"""Run backtest across multiple tickers and aggregate results"""
|
||||||
all_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:
|
for ticker in tickers:
|
||||||
try:
|
try:
|
||||||
print(f"\nTesting strategy on {ticker}")
|
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
|
# Run backtest
|
||||||
try:
|
try:
|
||||||
DynamicStrategy.indicator_configs = indicator_settings
|
DynamicStrategy.indicator_configs = processed_settings
|
||||||
bt = Backtest(df, DynamicStrategy, cash=100000, commission=.002)
|
bt = Backtest(df, DynamicStrategy, cash=100000, commission=.002)
|
||||||
stats = bt.run()
|
stats = bt.run()
|
||||||
|
|
||||||
@ -515,6 +529,7 @@ def run_multi_ticker_backtest(tickers: list, start_date: datetime, end_date: dat
|
|||||||
|
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
print(f"Error during backtest for {ticker}: {str(e)}")
|
print(f"Error during backtest for {ticker}: {str(e)}")
|
||||||
|
print(f"Current indicator settings: {processed_settings}")
|
||||||
continue
|
continue
|
||||||
|
|
||||||
except Exception as e:
|
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("2. Is there data available for the selected date range?")
|
||||||
print("3. Are the indicator settings valid?")
|
print("3. Are the indicator settings valid?")
|
||||||
print("4. Are there any errors in the strategy logic?")
|
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")
|
raise ValueError("No valid results were generated from any ticker")
|
||||||
|
|
||||||
return pd.DataFrame(all_results)
|
return pd.DataFrame(all_results)
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user