Exemple #1
0
 def _space_params(params, space: str, r: int = None) -> Dict:
     d = params.get(space)
     if d:
         # Round floats to `r` digits after the decimal point if requested
         return round_dict(d, r) if r else d
     return {}
Exemple #2
0
    def log_trials_result(self) -> None:
        """
        Display Best hyperopt result
        """
        results = sorted(self.trials, key=itemgetter('loss'))
        best_result = results[0]
        params = best_result['params']
        log_str = self.format_results_logstring(best_result)
        print(f"\nBest result:\n\n{log_str}\n")

        if self.config.get('print_json'):
            result_dict: Dict = {}
            if self.has_space('buy') or self.has_space('sell'):
                result_dict['params'] = {}
            if self.has_space('buy'):
                result_dict['params'].update({
                    p.name: params.get(p.name)
                    for p in self.hyperopt_space('buy')
                })
            if self.has_space('sell'):
                result_dict['params'].update({
                    p.name: params.get(p.name)
                    for p in self.hyperopt_space('sell')
                })
            if self.has_space('roi'):
                # Convert keys in min_roi dict to strings because
                # rapidjson cannot dump dicts with integer keys...
                # OrderedDict is used to keep the numeric order of the items
                # in the dict.
                result_dict['minimal_roi'] = OrderedDict(
                    (str(k), v)
                    for k, v in self.custom_hyperopt.generate_roi_table(
                        params).items())
            if self.has_space('stoploss'):
                result_dict['stoploss'] = params.get('stoploss')
            print(
                rapidjson.dumps(result_dict,
                                default=str,
                                number_mode=rapidjson.NM_NATIVE))
        else:
            if self.has_space('buy'):
                print('Buy hyperspace params:')
                pprint(
                    {
                        p.name: params.get(p.name)
                        for p in self.hyperopt_space('buy')
                    },
                    indent=4)
            if self.has_space('sell'):
                print('Sell hyperspace params:')
                pprint(
                    {
                        p.name: params.get(p.name)
                        for p in self.hyperopt_space('sell')
                    },
                    indent=4)
            if self.has_space('roi'):
                print("ROI table:")
                # Round printed values to 5 digits after the decimal point
                pprint(round_dict(
                    self.custom_hyperopt.generate_roi_table(params), 5),
                       indent=4)
            if self.has_space('stoploss'):
                # Also round to 5 digits after the decimal point
                print(f"Stoploss: {round(params.get('stoploss'), 5)}")