Пример #1
0
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}."
Пример #2
0
    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)
Пример #3
0
    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)
Пример #4
0
    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()
Пример #5
0
    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)
Пример #6
0
    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)
Пример #7
0
    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'])
                ])
Пример #8
0
def test_parse_strategy_name(name, expected):
    assert parse_strategy_name(
        name) == expected, f"Expected parsed strategy to be: {expected}."