def test_parse_strategy_name(name, expected): """ Test parse strategy name functionality. :param name: Strategy name. :param expected: Parsed strategy name to be expected. """ assert parse_strategy_name( name) == expected, f"Expected parsed strategy to be: {expected}."
def setup_strategies(self, strategies: List[tuple]): """ Sets up strategies from list of strategies provided. :param strategies: List of strategies to set up and apply to bot. """ for strategyTuple in strategies: strategyClass = strategyTuple[0] values = strategyTuple[1] name = parse_strategy_name(strategyTuple[2]) # TODO: Leverage kwargs to initialize strategies. self.strategies[name] = strategyClass(parent=self, inputs=values, precision=self.precision) self.minPeriod = max(self.strategies[name].get_min_option_period(), self.minPeriod)
def apply_general_settings(self, settings: Dict[str, Union[float, str, dict]]): """ Apples settings provided from the settings argument to the backtester object. :param settings: Dictionary with keys and values to set. """ if 'takeProfitType' in settings: self.takeProfitType = self.get_enum_from_str( settings['takeProfitType']) self.takeProfitPercentageDecimal = settings[ 'takeProfitPercentage'] / 100 if 'lossType' in settings: self.lossStrategy = self.get_enum_from_str(settings['lossType']) self.lossPercentageDecimal = settings['lossPercentage'] / 100 if 'stopLossCounter' in settings: self.smartStopLossCounter = settings['stopLossCounter'] for strategy_name, strategy_values in settings['strategies'].items(): pretty_strategy_name = strategy_name strategy_name = parse_strategy_name(strategy_name) if strategy_name not in self.strategies: if type(strategy_values) == dict: strategy_values = list(strategy_values.values()) temp_strategy_tuple = ( self.allStrategies[pretty_strategy_name], strategy_values, pretty_strategy_name) self.setup_strategies([temp_strategy_tuple]) continue loop_strategy = self.strategies[strategy_name] loop_strategy.reset_strategy_dictionary( ) # Mandatory for bugs in optimizer. loop_strategy.trend = None # Annoying bug fix for optimizer. if strategy_name != 'movingAverage': loop_strategy.set_inputs(list(strategy_values.values())) else: loop_strategy.set_inputs([ Option(movingAverage=strategy_values['Moving Average'], parameter=strategy_values['Parameter'], initialBound=strategy_values['Initial'], finalBound=strategy_values['Final']) ]) self.minPeriod = max(loop_strategy.get_min_option_period(), self.minPeriod)
def setup_strategies(self, strategies: list): """ Sets up strategies from list of strategies provided. :param strategies: List of strategies to set up and apply to bot. """ for strategyTuple in strategies: strategyClass = strategyTuple[0] values = strategyTuple[1] name = parse_strategy_name(strategyTuple[2]) if name != 'movingAverage': self.strategies[name] = strategyClass(self, inputs=values, precision=self.precision) else: values = [Option(*values[x:x + 4]) for x in range(0, len(values), 4)] self.strategies[name] = strategyClass(self, inputs=values, precision=self.precision) self.minPeriod = self.strategies[name].get_min_option_period()
def apply_general_settings(self, settings: Dict[str, Union[float, str, dict]]): """ Apples settings provided from the settings argument to the backtester object. :param settings: Dictionary with keys and values to set. """ if 'takeProfitType' in settings: self.takeProfitType = self.get_enum_from_str( settings['takeProfitType']) self.takeProfitPercentageDecimal = settings[ 'takeProfitPercentage'] / 100 if 'lossType' in settings: self.lossStrategy = self.get_enum_from_str(settings['lossType']) self.lossPercentageDecimal = settings['lossPercentage'] / 100 if 'stopLossCounter' in settings: self.smartStopLossCounter = settings['stopLossCounter'] self.change_strategy_interval(settings['strategyIntervals']) for strategy_name, strategy_values in settings['strategies'].items(): pretty_strategy_name = strategy_name strategy_name = parse_strategy_name(strategy_name) if strategy_name not in self.strategies: if isinstance(strategy_values, dict): strategy_values = list(strategy_values.values()) temp_strategy_tuple = ( self.allStrategies[pretty_strategy_name], strategy_values, pretty_strategy_name) self.setup_strategies([temp_strategy_tuple]) continue # TODO: Leverage kwargs instead of using indexed lists. loop_strategy = self.strategies[strategy_name] loop_strategy.reset_strategy_dictionary( ) # Mandatory for bugs in optimizer. loop_strategy.trend = None # Annoying bug fix for optimizer. loop_strategy.set_inputs(list(strategy_values.values())) self.minPeriod = max(loop_strategy.get_min_option_period(), self.minPeriod)
def setup_strategies(self, strategies: List[tuple]): """ Sets up strategies from list of strategies provided. :param strategies: List of strategies to set up and apply to bot. """ for strategyTuple in strategies: strategyClass = strategyTuple[0] values = strategyTuple[1] name = parse_strategy_name(strategyTuple[2]) # TODO: Leverage kwargs to initialize strategies. if name == 'movingAverage': values = [ Option(*values[x:x + 4]) for x in range(0, len(values), 4) ] self.strategies[name] = strategyClass(self, inputs=values, precision=self.precision) elif name == 'bollingerBand': self.strategies[name] = strategyClass( parent=self, volatility_n=values[0], volatility=values[1], volatility_calculation_type=values[2], bb_coefficient=values[3], bb_safety=values[4], moving_average=values[5], moving_average_parameter=values[6], moving_average_n=values[7], method=values[8], upper_percentage_b=values[9], lower_percentage_b=values[10], precision=self.precision) else: self.strategies[name] = strategyClass(self, inputs=values, precision=self.precision) self.minPeriod = max(self.strategies[name].get_min_option_period(), self.minPeriod)
def apply_general_settings(self, settings: dict): if 'takeProfitType' in settings: self.takeProfitType = self.get_enum_from_str( settings['takeProfitType']) self.takeProfitPercentageDecimal = settings[ 'takeProfitPercentage'] / 100 if 'lossType' in settings: self.lossStrategy = self.get_enum_from_str(settings['lossType']) self.lossPercentageDecimal = settings['lossPercentage'] / 100 if 'stopLossCounter' in settings: self.smartStopLossCounter = settings['stopLossCounter'] for strategy_name, strategy_values in settings['strategies'].items(): pretty_strategy_name = strategy_name strategy_name = parse_strategy_name(strategy_name) if strategy_name not in self.strategies: if type(strategy_values) == dict: strategy_values = list(strategy_values.values()) temp_strategy_tuple = ( self.allStrategies[pretty_strategy_name], strategy_values, pretty_strategy_name) self.setup_strategies([temp_strategy_tuple]) continue if strategy_name != 'movingAverage': self.strategies[strategy_name].set_inputs( list(strategy_values.values())) else: self.strategies[strategy_name].set_inputs([ Option(movingAverage=strategy_values['Moving Average'], parameter=strategy_values['Parameter'], initialBound=strategy_values['Initial'], finalBound=strategy_values['Final']) ])
def test_parse_strategy_name(name, expected): assert parse_strategy_name( name) == expected, f"Expected parsed strategy to be: {expected}."