def abstract_example(): sma = Function('sma') input_arrays = sma.get_input_arrays() for key in input_arrays.keys(): input_arrays[key] = idata sma.set_input_arrays(input_arrays) odata = sma(30) # timePeriod=30, specified as an arg bbands = Function('bbands', input_arrays) bbands.set_function_parameters(timePeriod=20, nbDevUp=2, nbDevDown=2) upper, middle, lower = bbands() # multiple output values unpacked (these will always have the correct order) kama = Function('kama').run(input_arrays) # alternative run() calling method. plot(odata, upper, middle, lower, kama)
def abstract_example(): sma = Function("sma") input_arrays = sma.get_input_arrays() for key in input_arrays.keys(): input_arrays[key] = idata sma.set_input_arrays(input_arrays) odata = sma(30) # timePeriod=30, specified as an arg bbands = Function("bbands", input_arrays) bbands.parameters = {"timeperiod": 20, "nbdevup": 2, "nbdevdn": 2} upper, middle, lower = bbands() # multiple output values unpacked (these will always have the correct order) kama = Function("kama").run(input_arrays) # alternative run() calling method. plot(odata, upper, middle, lower, kama)
def abstract_example(): sma = Function('sma') input_arrays = sma.get_input_arrays() for key in input_arrays.keys(): input_arrays[key] = idata sma.set_input_arrays(input_arrays) odata = sma(30) # timePeriod=30, specified as an arg bbands = Function('bbands', input_arrays) bbands.parameters = {'timeperiod': 20, 'nbdevup': 2, 'nbdevdn': 2} upper, middle, lower = bbands( ) # multiple output values unpacked (these will always have the correct order) kama = Function('kama').run( input_arrays) # alternative run() calling method. plot(odata, upper, middle, lower, kama)
class Talib(CleanerBase): def __init__(self, ind: str, params: dict, frequency: str = None, buffer_day: int = 5) -> None: super().__init__(None, buffer_day, frequency) self.indicator = Function(ind) self.indicator.set_parameters(params) self.rolling_window = self.indicator.lookback + 1 self.data = defaultdict(dict) # type:dict[str,dict[str,deque]] @staticmethod def _check_nan(value: float): if isnan(value): raise Exception( 'rolling_window should be longer. Because nan is generated!') def _data_proxy(self, ticker: str) -> dict: key = f'{ticker}_{self.frequency}' return { 'open': array(self.data[key]['open']), 'high': array(self.data[key]['high']), 'low': array(self.data[key]['low']), 'close': array(self.data[key]['close']), 'volume': array(self.data[key]['volume']) } def calculate(self, ticker: str) -> dict: self.indicator.set_input_arrays(self._data_proxy(ticker)) value = list(self.indicator.outputs) if len(self.indicator.output_names) > 1: [self._check_nan(i[-1]) for i in value] return { k: v[-1] for k, v in zip(self.indicator.output_names, value) } self._check_nan(value[-1]) return value[-1]
class Talib(op.CleanerBase): counter = count(1) def __init__(self, ind: str, params: dict, buffer_day: int, frequency: str) -> None: name = f"{ind}_{next(self.counter)}" self.indicator = Function(ind) self.indicator.set_parameters(params) rolling_window = self.indicator.lookback+1 super().__init__(name, rolling_window, buffer_day, frequency) self.save_to_env(self) self.data = self.get_data() @staticmethod def _check_nan(value: float): if isnan(value): raise Exception( 'rolling_window should be longer. Because nan is generated!') def _data_proxy(self, ticker: str) -> dict: key = f'{ticker}_{self.frequency}' return {'open': array(self.data[key].open), 'high': array(self.data[key].high), 'low': array(self.data[key].low), 'close': array(self.data[key].close), 'volume': array(self.data[key].volume)} def calculate(self, ticker: str) -> dict: self.indicator.set_input_arrays(self._data_proxy(ticker)) value = list(self.indicator.outputs) if len(self.indicator.output_names) > 1: [self._check_nan(i[-1]) for i in value] return {k: v[-1] for k, v in zip(self.indicator.output_names, value)} self._check_nan(value[-1]) return value[-1]