refactor: Update indicators to handle pandas Series consistently
This commit is contained in:
parent
aa5952e00b
commit
5f55b67070
@ -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]
|
||||
|
||||
Loading…
Reference in New Issue
Block a user