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():
|
for ind_name, ind_config in self.indicator_configs.items():
|
||||||
if ind_config['type'] == 'SMA':
|
if ind_config['type'] == 'SMA':
|
||||||
def sma_calc(x):
|
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
|
return result.fillna(method='ffill').fillna(0).values
|
||||||
self.indicators[ind_name] = self.I(sma_calc, self.data.Close)
|
self.indicators[ind_name] = self.I(sma_calc, self.data.Close)
|
||||||
|
|
||||||
elif ind_config['type'] == 'EMA':
|
elif ind_config['type'] == 'EMA':
|
||||||
def ema_calc(x):
|
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
|
return result.fillna(method='ffill').fillna(0).values
|
||||||
self.indicators[ind_name] = self.I(ema_calc, self.data.Close)
|
self.indicators[ind_name] = self.I(ema_calc, self.data.Close)
|
||||||
|
|
||||||
elif ind_config['type'] == 'RSI':
|
elif ind_config['type'] == 'RSI':
|
||||||
def rsi_calc(x):
|
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
|
return result.fillna(method='ffill').fillna(0).values
|
||||||
self.indicators[ind_name] = self.I(rsi_calc, self.data.Close)
|
self.indicators[ind_name] = self.I(rsi_calc, self.data.Close)
|
||||||
|
|
||||||
@ -41,11 +44,18 @@ class DynamicStrategy(Strategy):
|
|||||||
signal = int(ind_config['params']['signal'])
|
signal = int(ind_config['params']['signal'])
|
||||||
|
|
||||||
def macd_calc(x):
|
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:
|
if result is None or result.empty:
|
||||||
return np.zeros(len(x)), np.zeros(len(x))
|
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)
|
macd_vals = self.I(macd_calc, self.data.Close)
|
||||||
self.indicators[f"{ind_name}_macd"] = macd_vals[0]
|
self.indicators[f"{ind_name}_macd"] = macd_vals[0]
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user