def __init__(self, period, mul, cache_size=None): self._p = period self._m = mul self._sma = SMA(period, cache_size) self._stddev = StdDeviation([period]) super().__init__({ 'args': [period, mul, cache_size], 'id': 'bbands', 'name': 'BBANDS(%f, %f)' % (period, mul), 'seed_period': period })
def __init__(self, period, cache_size=None): self._stddev = StdDeviation(period, cache_size) self._uEMA = EMA(period, cache_size) self._dEMA = EMA(period, cache_size) self._prevInputValue = None super().__init__({ 'args': [period, cache_size], 'id': 'rvi', 'name': 'RVI(%f)' % period, 'seed_period': period, 'cache_size': cache_size })
def __init__(self, args=[]): [period, mul] = args self._p = period self._m = mul self._sma = SMA([period]) self._stddev = StdDeviation([period]) super().__init__({ 'args': args, 'id': 'bbands', 'name': 'BBANDS(%f, %f)' % (period, mul), 'seed_period': period })
def __init__(self, args=[]): [period] = args self._stddev = StdDeviation([period]) self._uEMA = EMA([period]) self._dEMA = EMA([period]) self._prevInputValue = None super().__init__({ 'args': args, 'id': 'rvi', 'name': 'RVI(%f)' % period, 'seed_period': period })
class BollingerBands(Indicator): def __init__(self, args=[]): [period, mul] = args self._p = period self._m = mul self._sma = SMA([period]) self._stddev = StdDeviation([period]) super().__init__({ 'args': args, 'id': 'bbands', 'name': 'BBANDS(%f, %f)' % (period, mul), 'seed_period': period }) def reset(self): super().reset() self._sma.reset() self._stddev.reset() def update(self, v): self._sma.update(v) self._stddev.update(v) middle = self._sma.v() stddev = self._stddev.v() super().update({ 'top': middle + (self._m * stddev), 'middle': middle, 'bottom': middle - (self._m * stddev) }) return self.v() def add(self, v): self._sma.add(v) self._stddev.add(v) middle = self._sma.v() stddev = self._stddev.v() if middle is not None and stddev is not None: super().add({ 'top': middle + (self._m * stddev), 'middle': middle, 'bottom': middle - (self._m * stddev) }) return self.v()
class RVI(Indicator): def __init__(self, period, cache_size=None): self._stddev = StdDeviation(period, cache_size) self._uEMA = EMA(period, cache_size) self._dEMA = EMA(period, cache_size) self._prevInputValue = None super().__init__({ 'args': [period, cache_size], 'id': 'rvi', 'name': 'RVI(%f)' % period, 'seed_period': period, 'cache_size': cache_size }) def reset(self): super().reset() self._prevInputValue = None self._stddev.reset() self._uEMA.reset() self._dEMA.reset() def ud(candlePrice, prevCandlePrice, stddev): if prevCandlePrice is None: return [0, 0] elif candlePrice > prevCandlePrice: return [stddev, 0] elif candlePrice < prevCandlePrice: return [0, stddev] else: return [0, 0] def update(self, v): if self._prevInputValue is None: return self.v() self._stddev.update(v) stddev = self._stddev.v() if not isfinite(stddev): return self.v() [u, d] = RVI.ud(v, self._prevInputValue, stddev) self._uEMA.update(u) self._dEMA.update(d) uSum = self._uEMA.v() dSum = self._dEMA.v() if uSum == dSum: return super().update(0) else: return super().update(100 * (uSum / (uSum + dSum))) def add(self, v): if self._prevInputValue is None: self._prevInputValue = v return self.v() self._stddev.add(v) stddev = self._stddev.v() if not isfinite(stddev): return self.v() [u, d] = RVI.ud(v, self._prevInputValue, stddev) self._uEMA.add(u) self._dEMA.add(d) uSum = self._uEMA.v() dSum = self._dEMA.v() if uSum == dSum: super().add(0) else: super().add(100 * (uSum / (uSum + dSum))) self._prevInputValue = v return self.v()