def _get_regime_one_line(self, date, date_1, date_2): # check parameters if len(self.parameters) != 1: raise CoreError('Error in parameter') # build the cache if 'line' not in self.cache: self.cache['line'] = [] # check the cache if len(self.cache['line']) < 2: self.cache['line'].insert(0, self.instrument.get_adjusted_close_value(date)) return Regime.FLAT # get filter input values current_value = self.instrument.get_adjusted_close_value(date) last_value = self.instrument.get_adjusted_close_value(date_1) before_value = self.instrument.get_adjusted_close_value(date_2) last_filter = self.cache['line'][0] before_filter = self.cache['line'][1] # compute filter if self.indicator_type == IndicatorType.BUTTERWORTH: current_filter = DigitalFilter.get_butterworth_lpf_value(self.parameters[0], current_value, last_value, before_value, last_filter, before_filter) elif self.indicator_type == IndicatorType.BESSEL: current_filter = DigitalFilter.get_bessel_lpf_value(self.parameters[0], current_value, last_value, before_value, last_filter, before_filter) elif self.indicator_type == IndicatorType.CHEBYSCHEV: current_filter = DigitalFilter.get_chebyschev_lpf_value(self.parameters[0], current_value, last_value, before_value, last_filter, before_filter) if self.building_type == BuildingType.ONE_LINE_SLOPE: slope = current_filter - last_filter current_regime = RegimeHelper.get_regime(self.building_type, date, line=slope) elif self.building_type == BuildingType.ONE_LINE_VALUE: current_regime = RegimeHelper.get_regime(self.building_type, date, line=current_filter, instrument=self.instrument.get_adjusted_close_value(date)) # update cache self.cache['line'].pop() self.cache['line'].insert(0, current_filter) return current_regime
def testGetChebyschevLpf(self): time = range(500) fundamental = 8*arctan(1)/30 noise = 8*arctan(1)/4 input = time[:] for t in time: input[t]=cos(fundamental*t) + cos(noise*t) output = DigitalFilter.get_chebyschev_lpf(input, 20) self.assertEqual(len(input), len(output), 'good length') self.assertAlmostEqual(output[499], -1.15550766,msg='good Chebyschev')
def testGetBesselLpf(self): time = range(500) fundamental = 8*arctan(1)/30 noise = 8*arctan(1)/4 input = time[:] for t in time: input[t]=cos(fundamental*t) + cos(noise*t) output = DigitalFilter.get_bessel_lpf(input, 20) self.assertEqual(len(input), len(output), 'good length') self.assertAlmostEqual(output[499], -0.94269355,msg='good Bessel')