refactor: Update indicators to handle pandas Series consistently

This commit is contained in:
Bobby (aider) 2025-02-13 23:31:36 -08:00
parent aa5952e00b
commit 5f55b67070

View File

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