Example #1
0
 def __init__(self, parameter, *args, **kwargs):
     Indicator.__init__(self, parameter, *args, **kwargs)
     self.input = []
     self.s_ema = Ema(parameter[0], self.row)
     self.l_ema = Ema(parameter[1], self.row)
     self.output = [] # macd
     self.ema_macd = EmaMacd(parameter[2])
Example #2
0
 def __init__(self, parameter, *args, **kwargs):
     Indicator.__init__(self, parameter, *args, **kwargs)
     self.input = []
     self.s_ema = Ema(parameter[0], self.row)
     self.l_ema = Ema(parameter[1], self.row)
     self.output = []  # macd
     self.ema_macd = EmaMacd(parameter[2])
Example #3
0
class Macd(Indicator):
    """ Moving Average Convergence-Divergence (MACD) indicator class
            input:      data        = list or tuple of float or integer values
                        parameter   = tuple (x, y, z); where x is short term ema, y is long term ema, and z is ema of the macd"""
  
    def __init__(self, parameter, *args, **kwargs):
        Indicator.__init__(self, parameter, *args, **kwargs)
        self.input = []
        self.s_ema = Ema(parameter[0], self.row)
        self.l_ema = Ema(parameter[1], self.row)
        self.output = [] # macd
        self.ema_macd = EmaMacd(parameter[2])
        
    def calculate(self, candle):
        value = candle[self.row]
        self.input.append(float(value))
        self.s_ema.append(candle)
        self.l_ema.append(candle)
        
        outputvalue = None
        if len(self.input) >= self.parameter[1]:
            try:    
                outputvalue = self.s_ema[-1] - self.l_ema[-1]
            except:
                self.input = self.input[:-1]
                self.s_ema = self.s_ema[:-1]
                self.l_ema = self.l_ema[:-1]
                raise IndicatorError, 'error calculating macd value; reverting input data back to previous state'
        self.output.append(outputvalue)
        ema_macd_candle = None
        # make fake candle for ema_macd
        if outputvalue != None: ema_macd_candle = (candle[0], outputvalue, outputvalue, outputvalue, outputvalue, 0)
        self.ema_macd.append(ema_macd_candle)
        
    def revertToPreviousState(self):
        # remove previous virtual candle
        Indicator.revertToPreviousState(self)
        self.input = self.input[:-1]
        self.output = self.output[:-1]
        self.s_ema.revertToPreviousState()
        self.l_ema.revertToPreviousState()
        self.ema_macd.revertToPreviousState()
    
    def validateParameter(self, parameter):
        if type(parameter) is not tuple:
            raise IndicatorError, 'invalid parameter for initializing Macd instance, should be an tuple; input: %s' % (self.parameter, )
        if len(parameter) != 3:
            raise IndicatorError, 'invalid parameter for initializing Macd instance, should be an tuple with length 3 (e.g. 4,8,5); input: %s' % (self.parameter, )
        if parameter[0] >= parameter[1]:
            raise IndicatorError, 'invalid parameter for initializing Macd instance, should be an tuple with length 3 (e.g. 4,8,5) and parameter 1 should be smaller than parameter 2; input: %s' % (self.parameter, )
    
    # overrided functions
    def __str__(self):
        string = ''
        for i in xrange(len(self.input)):
            string+='%s\t%s\t%s\t%s\t%s\t%s\t%s\n' % (i+1, self.times[i], self.input[i], str(self.s_ema[i])[:7], str(self.l_ema[i])[:7], str(self.output[i])[:7], str(self.ema_macd[i]))
        return 'Macd(%s):\n%s' % (self.parameter, string)
    def __repr__(self):
        return 'Macd(%s)' % self.parameter
    def __len__(self):
        return len(self.output)
    def __getitem__(self, offset):
        return self.output[offset]
    def __getslice__(self, low, high):
        return self.output[low:high]
Example #4
0
class Macd(Indicator):
    """ Moving Average Convergence-Divergence (MACD) indicator class
            input:      data        = list or tuple of float or integer values
                        parameter   = tuple (x, y, z); where x is short term ema, y is long term ema, and z is ema of the macd"""
    def __init__(self, parameter, *args, **kwargs):
        Indicator.__init__(self, parameter, *args, **kwargs)
        self.input = []
        self.s_ema = Ema(parameter[0], self.row)
        self.l_ema = Ema(parameter[1], self.row)
        self.output = []  # macd
        self.ema_macd = EmaMacd(parameter[2])

    def calculate(self, candle):
        value = candle[self.row]
        self.input.append(float(value))
        self.s_ema.append(candle)
        self.l_ema.append(candle)

        outputvalue = None
        if len(self.input) >= self.parameter[1]:
            try:
                outputvalue = self.s_ema[-1] - self.l_ema[-1]
            except:
                self.input = self.input[:-1]
                self.s_ema = self.s_ema[:-1]
                self.l_ema = self.l_ema[:-1]
                raise IndicatorError(
                    'error calculating macd value; reverting input data back to previous state'
                )
        self.output.append(outputvalue)
        ema_macd_candle = None
        # make fake candle for ema_macd
        if outputvalue != None:
            ema_macd_candle = (candle[0], outputvalue, outputvalue,
                               outputvalue, outputvalue, 0)
        self.ema_macd.append(ema_macd_candle)

    def revertToPreviousState(self):
        # remove previous virtual candle
        Indicator.revertToPreviousState(self)
        self.input = self.input[:-1]
        self.output = self.output[:-1]
        self.s_ema.revertToPreviousState()
        self.l_ema.revertToPreviousState()
        self.ema_macd.revertToPreviousState()

    def validateParameter(self, parameter):
        if type(parameter) is not tuple:
            raise IndicatorError(
                'invalid parameter for initializing Macd instance, should be an tuple; input: %s'
                % (self.parameter, ))
        if len(parameter) != 3:
            raise IndicatorError(
                'invalid parameter for initializing Macd instance, should be an tuple with length 3 (e.g. 4,8,5); input: %s'
                % (self.parameter, ))
        if parameter[0] >= parameter[1]:
            raise IndicatorError(
                'invalid parameter for initializing Macd instance, should be an tuple with length 3 (e.g. 4,8,5) and parameter 1 should be smaller than parameter 2; input: %s'
                % (self.parameter, ))

    # overrided functions
    def __str__(self):
        string = ''
        for i in range(len(self.input)):
            string += '%s\t%s\t%s\t%s\t%s\t%s\t%s\n' % (
                i + 1, self.times[i], self.input[i], str(self.s_ema[i])[:7],
                str(self.l_ema[i])[:7], str(
                    self.output[i])[:7], str(self.ema_macd[i]))
        return 'Macd(%s):\n%s' % (self.parameter, string)

    def __repr__(self):
        return 'Macd(%s)' % self.parameter

    def __len__(self):
        return len(self.output)

    def __getitem__(self, offset):
        return self.output[offset]

    def __getslice__(self, low, high):
        return self.output[low:high]