def _get_data_methods_from_list_of_data_string( self, list_of_data_str_references: list, system) -> list: # Turn a list of strings into a list of function objects list_of_data_methods = [ resolve_data_method(system, data_string) for data_string in list_of_data_str_references ] return list_of_data_methods
def get_data_from_system(self, system, instrument_code): """ Prepare the data for a function call :param system: A system :param instrument_code: str :return: list of data """ data = self.data assert isinstance(data, list) # Following is a list of additional kwargs to pass to the data functions. Can be empty dicts # Use copy as can be overriden if len(data) == 0: # if no data provided defaults to using price datalist = [DEFAULT_PRICE_SOURCE] data_arg_list = [{}] else: # We're provided with a list datalist = self.data data_arg_list = copy(self.data_args) # This is so the zip won't unexpectedly fail # Should be the case given how data_args are generated assert len(data_arg_list) == len(datalist) # Turn a list of strings into a list of function objects data_methods = [ resolve_data_method(system, data_string) for data_string in datalist ] # Call the functions, providing additional data if neccesssary data = [ data_method(instrument_code, **data_arguments) for data_method, data_arguments in zip(data_methods, data_arg_list) ] return data
def call(self, system, instrument_code): """ Actually call a trading rule To do this we need some data from the system """ assert isinstance(self.data, list) if len(self.data) == 0: # if no data provided defaults to using price datalist = [DEFAULT_PRICE_SOURCE] else: datalist = self.data data_methods = [resolve_data_method( system, data_string) for data_string in datalist] data = [data_method(instrument_code) for data_method in data_methods] other_args = self.other_args return self.function(*data, **other_args)
def get_data_from_system(self, system, instrument_code): """ Prepare the data for a function call :param system: A system :param instrument_code: str :return: list of data """ assert isinstance(self.data, list) if len(self.data) == 0: # if no data provided defaults to using price datalist = [DEFAULT_PRICE_SOURCE] else: datalist = self.data data_methods = [ resolve_data_method(system, data_string) for data_string in datalist ] data = [data_method(instrument_code) for data_method in data_methods] return data