diff --git a/src/pages/backtesting/backtesting_page.py b/src/pages/backtesting/backtesting_page.py index d75392d..49db1e4 100644 --- a/src/pages/backtesting/backtesting_page.py +++ b/src/pages/backtesting/backtesting_page.py @@ -19,19 +19,22 @@ class DynamicStrategy(Strategy): for ind_name, ind_config in self.indicator_configs.items(): if ind_config['type'] == 'SMA': def sma_calc(x): - result = ta.sma(x, length=int(ind_config['params']['length'])) + series = pd.Series(x) + result = ta.sma(series, length=int(ind_config['params']['length'])) return result.fillna(method='ffill').fillna(0).values self.indicators[ind_name] = self.I(sma_calc, self.data.Close) elif ind_config['type'] == 'EMA': def ema_calc(x): - result = ta.ema(x, length=int(ind_config['params']['length'])) + series = pd.Series(x) + result = ta.ema(series, length=int(ind_config['params']['length'])) return result.fillna(method='ffill').fillna(0).values self.indicators[ind_name] = self.I(ema_calc, self.data.Close) elif ind_config['type'] == 'RSI': def rsi_calc(x): - result = ta.rsi(x, length=int(ind_config['params']['length'])) + series = pd.Series(x) + result = ta.rsi(series, length=int(ind_config['params']['length'])) return result.fillna(method='ffill').fillna(0).values self.indicators[ind_name] = self.I(rsi_calc, self.data.Close) @@ -41,11 +44,18 @@ class DynamicStrategy(Strategy): signal = int(ind_config['params']['signal']) def macd_calc(x): - result = ta.macd(x, fast=fast, slow=slow, signal=signal) + series = pd.Series(x) + result = ta.macd(series, fast=fast, slow=slow, signal=signal) if result is None or result.empty: return np.zeros(len(x)), np.zeros(len(x)) - return (result.iloc[:,0].fillna(method='ffill').fillna(0).values, - result.iloc[:,2].fillna(method='ffill').fillna(0).values) + + macd_col = result.columns[0] + signal_col = result.columns[2] + + macd_vals = result[macd_col].fillna(method='ffill').fillna(0).values + signal_vals = result[signal_col].fillna(method='ffill').fillna(0).values + + return macd_vals, signal_vals macd_vals = self.I(macd_calc, self.data.Close) self.indicators[f"{ind_name}_macd"] = macd_vals[0]