def kama(self, efficiency_ratio_periods=10, ema_fast=2, ema_slow=30,
period=20, column='adj_close'):
er = self._efficiency_ratio_computation(
period=efficiency_ratio_periods, column=column)
fast_alpha = 2 / (ema_fast + 1)
slow_alpha = 2 / (ema_slow + 1)
smoothing_constant = pd.Series(
(er * (fast_alpha - slow_alpha) + slow_alpha) ** 2,
name='smoothing_constant')
sma = pd.Series(self.ohlcv[column].rolling(period).mean(), name='SMA')
kama = []
for smooth, ma, price in zip(iter(smoothing_constant.items()),
iter(sma.shift(-1).items()),
iter(self.ohlcv[column].items())):
try:
kama.append(kama[-1] + smooth[1] * (price[1] - kama[-1]))
except:
if pd.notnull(ma[1]):
kama.append(ma[1] + smooth[1] * (price[1] - ma[1]))
else:
kama.append(None)
sma['KAMA'] = pd.Series(kama, index=sma.index,
name='{} days KAMA Ticker {}'.format(period,
self.ticker))
yield sma['KAMA']
评论列表
文章目录