Module backtrader.indicators.oscillator

Expand source code
#!/usr/bin/env python
# -*- coding: utf-8; py-indent-offset:4 -*-
###############################################################################
#
# Copyright (C) 2015-2023 Daniel Rodriguez
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program.  If not, see <http://www.gnu.org/licenses/>.
#
###############################################################################
from __future__ import (absolute_import, division, print_function,
                        unicode_literals)

import sys


from . import Indicator, MovingAverage


class OscillatorMixIn(Indicator):
    '''
    MixIn class to create a subclass with another indicator. The main line of
    that indicator will be substracted from the other base class main line
    creating an oscillator

    The usage is:

      - Class XXXOscillator(XXX, OscillatorMixIn)

    Formula:
      - XXX calculates lines[0]
      - osc = self.data - XXX.lines[0]
    '''
    plotlines = dict(_0=dict(_name='osc'))

    def _plotinit(self):
        try:
            lname = self.lines._getlinealias(0)
            self.plotlines._0._name = lname + '_osc'
        except AttributeError:
            pass

    def __init__(self):
        self.lines[0] = self.data - self.lines[0]
        super(OscillatorMixIn, self).__init__()


class Oscillator(Indicator):
    '''
    Oscillation of a given data around another data

    Datas:
      This indicator can accept 1 or 2 datas for the calculation.

      - If 1 data is provided, it must be a complex "Lines" object (indicator)
        which also has "datas". Example: A moving average

        The calculated oscillation will be that of the Moving Average (in the
        example) around the data that was used for the average calculation

      - If 2 datas are provided the calculated oscillation will be that of the
        2nd data around the 1st data

    Formula:
      - 1 data -> osc = data.data - data
      - 2 datas -> osc = data0 - data1
    '''
    lines = ('osc',)

    # Have a default value which can be later modified if needed
    plotlines = dict(_0=dict(_name='osc'))

    def _plotinit(self):
        try:
            lname = self.dataosc._getlinealias(0)
            self.plotlines._0._name = lname + '_osc'
        except AttributeError:
            pass

    def __init__(self):
        super(Oscillator, self).__init__()

        if len(self.datas) > 1:
            datasrc = self.data
            self.dataosc = self.data1
        else:
            datasrc = self.data.data
            self.dataosc = self.data

        self.lines[0] = datasrc - self.dataosc


# Automatic creation of Oscillating Lines

for movav in MovingAverage._movavs[1:]:
    _newclsdoc = '''
    Oscillation of a %s around its data
    '''
    # Skip aliases - they will be created automatically
    if getattr(movav, 'aliased', ''):
        continue

    movname = movav.__name__
    linename = movav.lines._getlinealias(0)
    newclsname = movname + 'Oscillator'

    newaliases = [movname + 'Osc']
    for alias in getattr(movav, 'alias', []):
        for suffix in ['Oscillator', 'Osc']:
            newaliases.append(alias + suffix)

    newclsdoc = _newclsdoc % movname
    newclsdct = {'__doc__': newclsdoc,
                 '__module__': OscillatorMixIn.__module__,
                 '_notregister': True,
                 'alias': newaliases}

    newcls = type(str(newclsname), (movav, OscillatorMixIn), newclsdct)
    module = sys.modules[OscillatorMixIn.__module__]
    setattr(module, newclsname, newcls)

Classes

class AdaptiveMovingAverageOsc

Oscillation of a AdaptiveMovingAverage around its data

Ancestors

Class variables

var alias
var aliased
var frompackages
var linealias
var packages
var params
var plotinfo
var plotlines

Inherited members

class AdaptiveMovingAverageOscillator

Oscillation of a AdaptiveMovingAverage around its data

Ancestors

Subclasses

Class variables

var alias
var aliased
var frompackages
var linealias
var packages
var params
var plotinfo
var plotlines

Inherited members

class DEMAOsc

Oscillation of a DoubleExponentialMovingAverage around its data

Ancestors

Class variables

var alias
var aliased
var frompackages
var linealias
var packages
var params
var plotinfo
var plotlines

Inherited members

class DEMAOscillator

Oscillation of a DoubleExponentialMovingAverage around its data

Ancestors

Class variables

var alias
var aliased
var frompackages
var linealias
var packages
var params
var plotinfo
var plotlines

Inherited members

class DMAOsc

Oscillation of a DicksonMovingAverage around its data

Ancestors

Class variables

var alias
var aliased
var frompackages
var linealias
var packages
var params
var plotinfo
var plotlines

Inherited members

class DMAOscillator

Oscillation of a DicksonMovingAverage around its data

Ancestors

Class variables

var alias
var aliased
var frompackages
var linealias
var packages
var params
var plotinfo
var plotlines

Inherited members

class DicksonMAOsc

Oscillation of a DicksonMovingAverage around its data

Ancestors

Class variables

var alias
var aliased
var frompackages
var linealias
var packages
var params
var plotinfo
var plotlines

Inherited members

class DicksonMAOscillator

Oscillation of a DicksonMovingAverage around its data

Ancestors

Class variables

var alias
var aliased
var frompackages
var linealias
var packages
var params
var plotinfo
var plotlines

Inherited members

class DicksonMovingAverageOsc

Oscillation of a DicksonMovingAverage around its data

Ancestors

Class variables

var alias
var aliased
var frompackages
var linealias
var packages
var params
var plotinfo
var plotlines

Inherited members

class newcls

Oscillation of a DicksonMovingAverage around its data

Ancestors

Subclasses

Class variables

var alias
var aliased
var frompackages
var linealias
var lines

Defines an "array" of lines which also has most of the interface of a LineBuffer class (forward, rewind, advance…).

This interface operations are passed to the lines held by self

The class can autosubclass itself (_derive) to hold new lines keeping them in the defined order.

var packages
var params
var plotinfo
var plotlines
class DicksonMovingAverageOscillator

Oscillation of a DicksonMovingAverage around its data

Ancestors

Subclasses

Class variables

var alias
var aliased
var frompackages
var linealias
var packages
var params
var plotinfo
var plotlines

Inherited members

class DoubleExponentialMovingAverageOsc

Oscillation of a DoubleExponentialMovingAverage around its data

Ancestors

Class variables

var alias
var aliased
var frompackages
var linealias
var packages
var params
var plotinfo
var plotlines

Inherited members

class DoubleExponentialMovingAverageOscillator

Oscillation of a DoubleExponentialMovingAverage around its data

Ancestors

Subclasses

Class variables

var alias
var aliased
var frompackages
var linealias
var packages
var params
var plotinfo
var plotlines

Inherited members

class ECOsc

Oscillation of a ZeroLagIndicator around its data

Ancestors

Class variables

var alias
var aliased
var frompackages
var linealias
var packages
var params
var plotinfo
var plotlines

Inherited members

class ECOscillator

Oscillation of a ZeroLagIndicator around its data

Ancestors

Class variables

var alias
var aliased
var frompackages
var linealias
var packages
var params
var plotinfo
var plotlines

Inherited members

class EMAOsc

Oscillation of a ExponentialMovingAverage around its data

Ancestors

Class variables

var alias
var aliased
var frompackages
var linealias
var packages
var params
var plotinfo
var plotlines

Inherited members

class EMAOscillator

Oscillation of a ExponentialMovingAverage around its data

Ancestors

Class variables

var alias
var aliased
var frompackages
var linealias
var packages
var params
var plotinfo
var plotlines

Inherited members

class ErrorCorrectingOsc

Oscillation of a ZeroLagIndicator around its data

Ancestors

Class variables

var alias
var aliased
var frompackages
var linealias
var packages
var params
var plotinfo
var plotlines

Inherited members

class ErrorCorrectingOscillator

Oscillation of a ZeroLagIndicator around its data

Ancestors

Class variables

var alias
var aliased
var frompackages
var linealias
var packages
var params
var plotinfo
var plotlines

Inherited members

class ExponentialMovingAverageOsc

Oscillation of a ExponentialMovingAverage around its data

Ancestors

Class variables

var alias
var aliased
var frompackages
var linealias
var packages
var params
var plotinfo
var plotlines

Inherited members

class ExponentialMovingAverageOscillator

Oscillation of a ExponentialMovingAverage around its data

Ancestors

Subclasses

Class variables

var alias
var aliased
var frompackages
var linealias
var packages
var params
var plotinfo
var plotlines

Inherited members

class HMAOsc

Oscillation of a HullMovingAverage around its data

Ancestors

Class variables

var alias
var aliased
var frompackages
var linealias
var packages
var params
var plotinfo
var plotlines

Inherited members

class HMAOscillator

Oscillation of a HullMovingAverage around its data

Ancestors

Class variables

var alias
var aliased
var frompackages
var linealias
var packages
var params
var plotinfo
var plotlines

Inherited members

class HullMAOsc

Oscillation of a HullMovingAverage around its data

Ancestors

Class variables

var alias
var aliased
var frompackages
var linealias
var packages
var params
var plotinfo
var plotlines

Inherited members

class HullMAOscillator

Oscillation of a HullMovingAverage around its data

Ancestors

Class variables

var alias
var aliased
var frompackages
var linealias
var packages
var params
var plotinfo
var plotlines

Inherited members

class HullMovingAverageOsc

Oscillation of a HullMovingAverage around its data

Ancestors

Class variables

var alias
var aliased
var frompackages
var linealias
var packages
var params
var plotinfo
var plotlines

Inherited members

class HullMovingAverageOscillator

Oscillation of a HullMovingAverage around its data

Ancestors

Subclasses

Class variables

var alias
var aliased
var frompackages
var linealias
var packages
var params
var plotinfo
var plotlines

Inherited members

class KAMAOsc

Oscillation of a AdaptiveMovingAverage around its data

Ancestors

Class variables

var alias
var aliased
var frompackages
var linealias
var packages
var params
var plotinfo
var plotlines

Inherited members

class KAMAOscillator

Oscillation of a AdaptiveMovingAverage around its data

Ancestors

Class variables

var alias
var aliased
var frompackages
var linealias
var packages
var params
var plotinfo
var plotlines

Inherited members

class ModifiedMovingAverageOsc

Oscillation of a SmoothedMovingAverage around its data

Ancestors

Class variables

var alias
var aliased
var frompackages
var linealias
var packages
var params
var plotinfo
var plotlines

Inherited members

class ModifiedMovingAverageOscillator

Oscillation of a SmoothedMovingAverage around its data

Ancestors

Class variables

var alias
var aliased
var frompackages
var linealias
var packages
var params
var plotinfo
var plotlines

Inherited members

class MovingAverageAdaptiveOsc

Oscillation of a AdaptiveMovingAverage around its data

Ancestors

Class variables

var alias
var aliased
var frompackages
var linealias
var packages
var params
var plotinfo
var plotlines

Inherited members

class MovingAverageAdaptiveOscillator

Oscillation of a AdaptiveMovingAverage around its data

Ancestors

Class variables

var alias
var aliased
var frompackages
var linealias
var packages
var params
var plotinfo
var plotlines

Inherited members

class MovingAverageDoubleExponentialOsc

Oscillation of a DoubleExponentialMovingAverage around its data

Ancestors

Class variables

var alias
var aliased
var frompackages
var linealias
var packages
var params
var plotinfo
var plotlines

Inherited members

class MovingAverageDoubleExponentialOscillator

Oscillation of a DoubleExponentialMovingAverage around its data

Ancestors

Class variables

var alias
var aliased
var frompackages
var linealias
var packages
var params
var plotinfo
var plotlines

Inherited members

class MovingAverageExponentialOsc

Oscillation of a ExponentialMovingAverage around its data

Ancestors

Class variables

var alias
var aliased
var frompackages
var linealias
var packages
var params
var plotinfo
var plotlines

Inherited members

class MovingAverageExponentialOscillator

Oscillation of a ExponentialMovingAverage around its data

Ancestors

Class variables

var alias
var aliased
var frompackages
var linealias
var packages
var params
var plotinfo
var plotlines

Inherited members

class MovingAverageSimpleOsc

Oscillation of a MovingAverageSimple around its data

Ancestors

Class variables

var alias
var aliased
var frompackages
var linealias
var packages
var params
var plotinfo
var plotlines

Inherited members

class MovingAverageSimpleOscillator

Oscillation of a MovingAverageSimple around its data

Ancestors

Subclasses

Class variables

var alias
var aliased
var frompackages
var linealias
var packages
var params
var plotinfo
var plotlines

Inherited members

class MovingAverageSmoothedOsc

Oscillation of a SmoothedMovingAverage around its data

Ancestors

Class variables

var alias
var aliased
var frompackages
var linealias
var packages
var params
var plotinfo
var plotlines

Inherited members

class MovingAverageSmoothedOscillator

Oscillation of a SmoothedMovingAverage around its data

Ancestors

Class variables

var alias
var aliased
var frompackages
var linealias
var packages
var params
var plotinfo
var plotlines

Inherited members

class MovingAverageTripleExponentialOsc

Oscillation of a TripleExponentialMovingAverage around its data

Ancestors

Class variables

var alias
var aliased
var frompackages
var linealias
var packages
var params
var plotinfo
var plotlines

Inherited members

class MovingAverageTripleExponentialOscillator

Oscillation of a TripleExponentialMovingAverage around its data

Ancestors

Class variables

var alias
var aliased
var frompackages
var linealias
var packages
var params
var plotinfo
var plotlines

Inherited members

class MovingAverageWeightedOsc

Oscillation of a WeightedMovingAverage around its data

Ancestors

Class variables

var alias
var aliased
var frompackages
var linealias
var packages
var params
var plotinfo
var plotlines

Inherited members

class MovingAverageWeightedOscillator

Oscillation of a WeightedMovingAverage around its data

Ancestors

Class variables

var alias
var aliased
var frompackages
var linealias
var packages
var params
var plotinfo
var plotlines

Inherited members

class MovingAverageWilderOsc

Oscillation of a SmoothedMovingAverage around its data

Ancestors

Class variables

var alias
var aliased
var frompackages
var linealias
var packages
var params
var plotinfo
var plotlines

Inherited members

class MovingAverageWilderOscillator

Oscillation of a SmoothedMovingAverage around its data

Ancestors

Class variables

var alias
var aliased
var frompackages
var linealias
var packages
var params
var plotinfo
var plotlines

Inherited members

class Oscillator

Oscillation of a given data around another data

Datas

This indicator can accept 1 or 2 datas for the calculation.

  • If 1 data is provided, it must be a complex "Lines" object (indicator) which also has "datas". Example: A moving average

The calculated oscillation will be that of the Moving Average (in the example) around the data that was used for the average calculation

  • If 2 datas are provided the calculated oscillation will be that of the 2nd data around the 1st data

Formula

  • 1 data -> osc = data.data - data
  • 2 datas -> osc = data0 - data1
Expand source code
class Oscillator(Indicator):
    '''
    Oscillation of a given data around another data

    Datas:
      This indicator can accept 1 or 2 datas for the calculation.

      - If 1 data is provided, it must be a complex "Lines" object (indicator)
        which also has "datas". Example: A moving average

        The calculated oscillation will be that of the Moving Average (in the
        example) around the data that was used for the average calculation

      - If 2 datas are provided the calculated oscillation will be that of the
        2nd data around the 1st data

    Formula:
      - 1 data -> osc = data.data - data
      - 2 datas -> osc = data0 - data1
    '''
    lines = ('osc',)

    # Have a default value which can be later modified if needed
    plotlines = dict(_0=dict(_name='osc'))

    def _plotinit(self):
        try:
            lname = self.dataosc._getlinealias(0)
            self.plotlines._0._name = lname + '_osc'
        except AttributeError:
            pass

    def __init__(self):
        super(Oscillator, self).__init__()

        if len(self.datas) > 1:
            datasrc = self.data
            self.dataosc = self.data1
        else:
            datasrc = self.data.data
            self.dataosc = self.data

        self.lines[0] = datasrc - self.dataosc

Ancestors

Class variables

var alias
var aliased
var frompackages
var linealias
var packages
var params
var plotinfo
var plotlines

Inherited members

class OscillatorMixIn

MixIn class to create a subclass with another indicator. The main line of that indicator will be substracted from the other base class main line creating an oscillator

The usage is:

  • Class XXXOscillator(XXX, OscillatorMixIn)

Formula

  • XXX calculates lines[0]
  • osc = self.data - XXX.lines[0]
Expand source code
class OscillatorMixIn(Indicator):
    '''
    MixIn class to create a subclass with another indicator. The main line of
    that indicator will be substracted from the other base class main line
    creating an oscillator

    The usage is:

      - Class XXXOscillator(XXX, OscillatorMixIn)

    Formula:
      - XXX calculates lines[0]
      - osc = self.data - XXX.lines[0]
    '''
    plotlines = dict(_0=dict(_name='osc'))

    def _plotinit(self):
        try:
            lname = self.lines._getlinealias(0)
            self.plotlines._0._name = lname + '_osc'
        except AttributeError:
            pass

    def __init__(self):
        self.lines[0] = self.data - self.lines[0]
        super(OscillatorMixIn, self).__init__()

Ancestors

Subclasses

Class variables

var alias
var aliased
var frompackages
var linealias
var packages
var params
var plotinfo
var plotlines

Inherited members

class SMAOsc

Oscillation of a MovingAverageSimple around its data

Ancestors

Class variables

var alias
var aliased
var frompackages
var linealias
var packages
var params
var plotinfo
var plotlines

Inherited members

class SMAOscillator

Oscillation of a MovingAverageSimple around its data

Ancestors

Class variables

var alias
var aliased
var frompackages
var linealias
var packages
var params
var plotinfo
var plotlines

Inherited members

class SMMAOsc

Oscillation of a SmoothedMovingAverage around its data

Ancestors

Class variables

var alias
var aliased
var frompackages
var linealias
var packages
var params
var plotinfo
var plotlines

Inherited members

class SMMAOscillator

Oscillation of a SmoothedMovingAverage around its data

Ancestors

Class variables

var alias
var aliased
var frompackages
var linealias
var packages
var params
var plotinfo
var plotlines

Inherited members

class SimpleMovingAverageOsc

Oscillation of a MovingAverageSimple around its data

Ancestors

Class variables

var alias
var aliased
var frompackages
var linealias
var packages
var params
var plotinfo
var plotlines

Inherited members

class SimpleMovingAverageOscillator

Oscillation of a MovingAverageSimple around its data

Ancestors

Class variables

var alias
var aliased
var frompackages
var linealias
var packages
var params
var plotinfo
var plotlines

Inherited members

class SmoothedMovingAverageOsc

Oscillation of a SmoothedMovingAverage around its data

Ancestors

Class variables

var alias
var aliased
var frompackages
var linealias
var packages
var params
var plotinfo
var plotlines

Inherited members

class SmoothedMovingAverageOscillator

Oscillation of a SmoothedMovingAverage around its data

Ancestors

Subclasses

Class variables

var alias
var aliased
var frompackages
var linealias
var packages
var params
var plotinfo
var plotlines

Inherited members

class TEMAOsc

Oscillation of a TripleExponentialMovingAverage around its data

Ancestors

Class variables

var alias
var aliased
var frompackages
var linealias
var packages
var params
var plotinfo
var plotlines

Inherited members

class TEMAOscillator

Oscillation of a TripleExponentialMovingAverage around its data

Ancestors

Class variables

var alias
var aliased
var frompackages
var linealias
var packages
var params
var plotinfo
var plotlines

Inherited members

class TripleExponentialMovingAverageOsc

Oscillation of a TripleExponentialMovingAverage around its data

Ancestors

Class variables

var alias
var aliased
var frompackages
var linealias
var packages
var params
var plotinfo
var plotlines

Inherited members

class TripleExponentialMovingAverageOscillator

Oscillation of a TripleExponentialMovingAverage around its data

Ancestors

Subclasses

Class variables

var alias
var aliased
var frompackages
var linealias
var packages
var params
var plotinfo
var plotlines

Inherited members

class WMAOsc

Oscillation of a WeightedMovingAverage around its data

Ancestors

Class variables

var alias
var aliased
var frompackages
var linealias
var packages
var params
var plotinfo
var plotlines

Inherited members

class WMAOscillator

Oscillation of a WeightedMovingAverage around its data

Ancestors

Class variables

var alias
var aliased
var frompackages
var linealias
var packages
var params
var plotinfo
var plotlines

Inherited members

class WeightedMovingAverageOsc

Oscillation of a WeightedMovingAverage around its data

Ancestors

Class variables

var alias
var aliased
var frompackages
var linealias
var packages
var params
var plotinfo
var plotlines

Inherited members

class WeightedMovingAverageOscillator

Oscillation of a WeightedMovingAverage around its data

Ancestors

Subclasses

Class variables

var alias
var aliased
var frompackages
var linealias
var packages
var params
var plotinfo
var plotlines

Inherited members

class WilderMAOsc

Oscillation of a SmoothedMovingAverage around its data

Ancestors

Class variables

var alias
var aliased
var frompackages
var linealias
var packages
var params
var plotinfo
var plotlines

Inherited members

class WilderMAOscillator

Oscillation of a SmoothedMovingAverage around its data

Ancestors

Class variables

var alias
var aliased
var frompackages
var linealias
var packages
var params
var plotinfo
var plotlines

Inherited members

class ZLEMAOsc

Oscillation of a ZeroLagExponentialMovingAverage around its data

Ancestors

Class variables

var alias
var aliased
var frompackages
var linealias
var packages
var params
var plotinfo
var plotlines

Inherited members

class ZLEMAOscillator

Oscillation of a ZeroLagExponentialMovingAverage around its data

Ancestors

Class variables

var alias
var aliased
var frompackages
var linealias
var packages
var params
var plotinfo
var plotlines

Inherited members

class ZLIndOsc

Oscillation of a ZeroLagIndicator around its data

Ancestors

Class variables

var alias
var aliased
var frompackages
var linealias
var packages
var params
var plotinfo
var plotlines

Inherited members

class ZLIndOscillator

Oscillation of a ZeroLagIndicator around its data

Ancestors

Class variables

var alias
var aliased
var frompackages
var linealias
var packages
var params
var plotinfo
var plotlines

Inherited members

class ZLIndicatorOsc

Oscillation of a ZeroLagIndicator around its data

Ancestors

Class variables

var alias
var aliased
var frompackages
var linealias
var packages
var params
var plotinfo
var plotlines

Inherited members

class ZLIndicatorOscillator

Oscillation of a ZeroLagIndicator around its data

Ancestors

Class variables

var alias
var aliased
var frompackages
var linealias
var packages
var params
var plotinfo
var plotlines

Inherited members

class ZeroLagEmaOsc

Oscillation of a ZeroLagExponentialMovingAverage around its data

Ancestors

Class variables

var alias
var aliased
var frompackages
var linealias
var packages
var params
var plotinfo
var plotlines

Inherited members

class ZeroLagEmaOscillator

Oscillation of a ZeroLagExponentialMovingAverage around its data

Ancestors

Class variables

var alias
var aliased
var frompackages
var linealias
var packages
var params
var plotinfo
var plotlines

Inherited members

class ZeroLagExponentialMovingAverageOsc

Oscillation of a ZeroLagExponentialMovingAverage around its data

Ancestors

Class variables

var alias
var aliased
var frompackages
var linealias
var packages
var params
var plotinfo
var plotlines

Inherited members

class ZeroLagExponentialMovingAverageOscillator

Oscillation of a ZeroLagExponentialMovingAverage around its data

Ancestors

Subclasses

Class variables

var alias
var aliased
var frompackages
var linealias
var packages
var params
var plotinfo
var plotlines

Inherited members

class ZeroLagIndicatorOsc

Oscillation of a ZeroLagIndicator around its data

Ancestors

Class variables

var alias
var aliased
var frompackages
var linealias
var packages
var params
var plotinfo
var plotlines

Inherited members

class ZeroLagIndicatorOscillator

Oscillation of a ZeroLagIndicator around its data

Ancestors

Subclasses

Class variables

var alias
var aliased
var frompackages
var linealias
var packages
var params
var plotinfo
var plotlines

Inherited members