Example #1
0
class ATR(Indicator):
    __slots__ = (
        'length',
        '__prev_close',
        '__value',
        '__average',
    )

    def __init__(self, input=None, length=14, desc="Average True Range"):
        self.length = int(length)
        self.__prev_close = None
        self.__value = None
        self.__average = SMA(input, self.length)
        super(ATR,
              self).__init__(Indicator.get_name(ATR.__name__, input, length),
                             input, ['high', 'low', 'close'], desc)

    def on_update(self, data):
        sma_input = {}
        sma_input['timestamp'] = data['timestamp']
        high = data['high']
        low = data['low']
        close = data['close']

        if self.__prev_close is None:
            tr = high - low
        else:
            tr1 = high - low
            tr2 = abs(high - self.__prev_close)
            tr3 = abs(low - self.__prev_close)
            tr = max(max(tr1, tr2), tr3)

        self.__prev_close = close

        sma_input[Indicator.VALUE] = tr
        self.__average.add(sma_input)

        result = {}
        result['timestamp'] = data['timestamp']
        result[Indicator.VALUE] = self.__average.now(Indicator.VALUE)
        self.add(result)
Example #2
0
class ATR(Indicator):
    __slots__ = (
        'length',
        '__prev_close',
        '__value',
        '__average',
    )

    def __init__(self, input=None, length=14, desc="Average True Range"):
        self.length = int(length)
        self.__prev_close = None
        self.__value = None
        self.__average = SMA(input, self.length)
        super(ATR, self).__init__(Indicator.get_name(ATR.__name__, input, length), input, ['high', 'low', 'close'],
                                  desc)

    def on_update(self, data):
        sma_input = {}
        sma_input['timestamp'] = data['timestamp']
        high = data['high']
        low = data['low']
        close = data['close']

        if self.__prev_close is None:
            tr = high - low
        else:
            tr1 = high - low
            tr2 = abs(high - self.__prev_close)
            tr3 = abs(low - self.__prev_close)
            tr = max(max(tr1, tr2), tr3)

        self.__prev_close = close

        sma_input[Indicator.VALUE] = tr
        self.__average.add(sma_input)

        result = {}
        result['timestamp'] = data['timestamp']
        result[Indicator.VALUE] = self.__average.now(Indicator.VALUE)
        self.add(result)
Example #3
0
class ATR(Indicator):
    __slots__ = (
        'length',
        '__prev_close',
        '__value',
        '__average',
    )

    def __init__(self, time_series=None, inputs=None, input_keys=['high', 'low', 'close'], desc="Average True Range",
                 length=14):
        super(ATR, self).__init__(time_series=time_series, inputs=inputs, input_keys=input_keys, desc=desc,
                                  length=length)
        self.length = self.get_int_config("length", 14)
        self.__prev_close = None
        self.__value = None
        self.__average = SMA(inputs=inputs, length=self.length)

    def _process_update(self, source: str, timestamp: int, data: Dict[str, float]):
        sma_input = {}
        high = data['high']
        low = data['low']
        close = data['close']

        if self.__prev_close is None:
            tr = high - low
        else:
            tr1 = high - low
            tr2 = abs(high - self.__prev_close)
            tr3 = abs(low - self.__prev_close)
            tr = max(max(tr1, tr2), tr3)

        self.__prev_close = close

        sma_input[Indicator.VALUE] = tr
        self.__average.add(timestamp=timestamp, data=sma_input)

        result = {}
        # result['timestamp'] = data['timestamp']
        result[Indicator.VALUE] = self.__average.now(Indicator.VALUE)
        self.add(timestamp=timestamp, data=result)