From bd44deea0dbfbcf3a651d1533f04b019ec5291f5 Mon Sep 17 00:00:00 2001 From: Rikj000 Date: Mon, 24 May 2021 18:51:33 +0200 Subject: [PATCH 1/4] BugFix - hyperopt-show --print-json include non-optimized params --- freqtrade/optimize/hyperopt_tools.py | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) mode change 100644 => 100755 freqtrade/optimize/hyperopt_tools.py diff --git a/freqtrade/optimize/hyperopt_tools.py b/freqtrade/optimize/hyperopt_tools.py old mode 100644 new mode 100755 index 49e70913f..8fa03a0d2 --- a/freqtrade/optimize/hyperopt_tools.py +++ b/freqtrade/optimize/hyperopt_tools.py @@ -93,7 +93,7 @@ class HyperoptTools(): if print_json: result_dict: Dict = {} for s in ['buy', 'sell', 'roi', 'stoploss', 'trailing']: - HyperoptTools._params_update_for_json(result_dict, params, s) + HyperoptTools._params_update_for_json(result_dict, params, non_optimized, s) print(rapidjson.dumps(result_dict, default=str, number_mode=rapidjson.NM_NATIVE)) else: @@ -106,11 +106,20 @@ class HyperoptTools(): HyperoptTools._params_pretty_print(params, 'trailing', "Trailing stop:") @staticmethod - def _params_update_for_json(result_dict, params, space: str) -> None: + def _params_update_for_json(result_dict, params, non_optimized, space: str) -> None: if space in params: space_params = HyperoptTools._space_params(params, space) + space_non_optimized = HyperoptTools._space_params(non_optimized, space) + all_space_params = space_params + + # Include non optimized params if there are any + if len(space_non_optimized) > 0: + for non_optimized_param in space_non_optimized: + if non_optimized_param not in all_space_params: + all_space_params[non_optimized_param] = space_non_optimized[non_optimized_param] + if space in ['buy', 'sell']: - result_dict.setdefault('params', {}).update(space_params) + result_dict.setdefault('params', {}).update(all_space_params) elif space == 'roi': # TODO: get rid of OrderedDict when support for python 3.6 will be # dropped (dicts keep the order as the language feature) @@ -120,10 +129,10 @@ class HyperoptTools(): # 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 space_params.items() + (str(k), v) for k, v in all_space_params.items() ) else: # 'stoploss', 'trailing' - result_dict.update(space_params) + result_dict.update(all_space_params) @staticmethod def _params_pretty_print(params, space: str, header: str, non_optimized={}) -> None: From 546ca0107178f0a95b41c433aeb3e6497c9f6a48 Mon Sep 17 00:00:00 2001 From: Rik Helsen Date: Thu, 17 Jun 2021 20:33:21 +0200 Subject: [PATCH 2/4] :recycle: Fixed flake8 warning --- freqtrade/optimize/hyperopt_tools.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/freqtrade/optimize/hyperopt_tools.py b/freqtrade/optimize/hyperopt_tools.py index 92ec6f194..742db07cc 100755 --- a/freqtrade/optimize/hyperopt_tools.py +++ b/freqtrade/optimize/hyperopt_tools.py @@ -114,7 +114,8 @@ class HyperoptTools(): if len(space_non_optimized) > 0: for non_optimized_param in space_non_optimized: if non_optimized_param not in all_space_params: - all_space_params[non_optimized_param] = space_non_optimized[non_optimized_param] + all_space_params[non_optimized_param] = \ + space_non_optimized[non_optimized_param] if space in ['buy', 'sell']: result_dict.setdefault('params', {}).update(all_space_params) From 15678045096f75b26449dcb964c9d579654e41ea Mon Sep 17 00:00:00 2001 From: Rik Helsen Date: Thu, 17 Jun 2021 22:41:49 +0200 Subject: [PATCH 3/4] :zap: kwargs merge dictionaries instead of using loops --- freqtrade/optimize/hyperopt_tools.py | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/freqtrade/optimize/hyperopt_tools.py b/freqtrade/optimize/hyperopt_tools.py index 742db07cc..dac299dc6 100755 --- a/freqtrade/optimize/hyperopt_tools.py +++ b/freqtrade/optimize/hyperopt_tools.py @@ -110,12 +110,9 @@ class HyperoptTools(): space_non_optimized = HyperoptTools._space_params(non_optimized, space) all_space_params = space_params - # Include non optimized params if there are any + # Merge non optimized params if there are any if len(space_non_optimized) > 0: - for non_optimized_param in space_non_optimized: - if non_optimized_param not in all_space_params: - all_space_params[non_optimized_param] = \ - space_non_optimized[non_optimized_param] + all_space_params = {**space_non_optimized, **space_params} if space in ['buy', 'sell']: result_dict.setdefault('params', {}).update(all_space_params) From 656bebd4da833dc008b3487ebbe4d7cb134c1d64 Mon Sep 17 00:00:00 2001 From: Rik Helsen Date: Fri, 18 Jun 2021 22:03:04 +0200 Subject: [PATCH 4/4] :beetle: Included completely non_optimized spaces in json + swapped merge dictionary order --- freqtrade/optimize/hyperopt_tools.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/freqtrade/optimize/hyperopt_tools.py b/freqtrade/optimize/hyperopt_tools.py index dac299dc6..9eee42a8d 100755 --- a/freqtrade/optimize/hyperopt_tools.py +++ b/freqtrade/optimize/hyperopt_tools.py @@ -105,14 +105,14 @@ class HyperoptTools(): @staticmethod def _params_update_for_json(result_dict, params, non_optimized, space: str) -> None: - if space in params: + if (space in params) or (space in non_optimized): space_params = HyperoptTools._space_params(params, space) space_non_optimized = HyperoptTools._space_params(non_optimized, space) all_space_params = space_params # Merge non optimized params if there are any if len(space_non_optimized) > 0: - all_space_params = {**space_non_optimized, **space_params} + all_space_params = {**space_params, **space_non_optimized} if space in ['buy', 'sell']: result_dict.setdefault('params', {}).update(all_space_params)