Print non-optimized parameters (also stop / roi)

This commit is contained in:
Matthias 2021-06-14 20:45:06 +02:00
parent 2310deec53
commit 34e6ce431f
2 changed files with 41 additions and 9 deletions

View File

@ -23,7 +23,7 @@ from pandas import DataFrame
from freqtrade.constants import DATETIME_PRINT_FORMAT, LAST_BT_RESULT_FN from freqtrade.constants import DATETIME_PRINT_FORMAT, LAST_BT_RESULT_FN
from freqtrade.data.converter import trim_dataframes from freqtrade.data.converter import trim_dataframes
from freqtrade.data.history import get_timerange from freqtrade.data.history import get_timerange
from freqtrade.misc import file_dump_json, plural from freqtrade.misc import deep_merge_dicts, file_dump_json, plural
from freqtrade.optimize.backtesting import Backtesting from freqtrade.optimize.backtesting import Backtesting
# Import IHyperOpt and IHyperOptLoss to allow unpickling classes from these modules # Import IHyperOpt and IHyperOptLoss to allow unpickling classes from these modules
from freqtrade.optimize.hyperopt_auto import HyperOptAuto from freqtrade.optimize.hyperopt_auto import HyperOptAuto
@ -201,6 +201,25 @@ class Hyperopt:
return result return result
def _get_no_optimize_details(self) -> Dict[str, Any]:
"""
Get non-optimized parameters
"""
result: Dict[str, Any] = {}
strategy = self.backtesting.strategy
if not HyperoptTools.has_space(self.config, 'roi'):
result['roi'] = strategy.minimal_roi
if not HyperoptTools.has_space(self.config, 'stoploss'):
result['stoploss'] = strategy.stoploss
if not HyperoptTools.has_space(self.config, 'trailing'):
result['trailing'] = {
'trailing_stop': strategy.trailing_stop,
'trailing_stop_positive': strategy.trailing_stop_positive,
'trailing_stop_positive_offset': strategy.trailing_stop_positive_offset,
'trailing_only_offset_is_reached': strategy.trailing_only_offset_is_reached,
}
return result
def print_results(self, results) -> None: def print_results(self, results) -> None:
""" """
Log results if it is better than any previous evaluation Log results if it is better than any previous evaluation
@ -311,6 +330,7 @@ class Hyperopt:
strat_stats, self.config['stake_currency']) strat_stats, self.config['stake_currency'])
not_optimized = self.backtesting.strategy.get_no_optimize_params() not_optimized = self.backtesting.strategy.get_no_optimize_params()
not_optimized = deep_merge_dicts(not_optimized, self._get_no_optimize_details())
trade_count = strat_stats['total_trades'] trade_count = strat_stats['total_trades']
total_profit = strat_stats['profit_total'] total_profit = strat_stats['profit_total']

View File

@ -130,9 +130,9 @@ class HyperoptTools():
non_optimized) non_optimized)
HyperoptTools._params_pretty_print(params, 'sell', "Sell hyperspace params:", HyperoptTools._params_pretty_print(params, 'sell', "Sell hyperspace params:",
non_optimized) non_optimized)
HyperoptTools._params_pretty_print(params, 'roi', "ROI table:") HyperoptTools._params_pretty_print(params, 'roi', "ROI table:", non_optimized)
HyperoptTools._params_pretty_print(params, 'stoploss', "Stoploss:") HyperoptTools._params_pretty_print(params, 'stoploss', "Stoploss:", non_optimized)
HyperoptTools._params_pretty_print(params, 'trailing', "Trailing stop:") HyperoptTools._params_pretty_print(params, 'trailing', "Trailing stop:", non_optimized)
@staticmethod @staticmethod
def _params_update_for_json(result_dict, params, non_optimized, space: str) -> None: def _params_update_for_json(result_dict, params, non_optimized, space: str) -> None:
@ -159,19 +159,31 @@ class HyperoptTools():
if space in params or space in non_optimized: if space in params or space in non_optimized:
space_params = HyperoptTools._space_params(params, space, 5) space_params = HyperoptTools._space_params(params, space, 5)
result = f"\n# {header}\n" result = f"\n# {header}\n"
if space == 'stoploss': if space == "stoploss":
result += f"stoploss = {space_params.get('stoploss')}" opt = True
elif space == 'roi': if not space_params:
space_params = HyperoptTools._space_params(params, space, 5)
opt = False
result += (f"stoploss = {space_params.get('stoploss')}"
f"{' # value loaded from strategy' if not opt else ''}")
elif space == "roi":
minimal_roi_result = rapidjson.dumps({ minimal_roi_result = rapidjson.dumps({
str(k): v for k, v in space_params.items() str(k): v for k, v in space_params.items()
}, default=str, indent=4, number_mode=rapidjson.NM_NATIVE) }, default=str, indent=4, number_mode=rapidjson.NM_NATIVE)
result += f"minimal_roi = {minimal_roi_result}" result += f"minimal_roi = {minimal_roi_result}"
elif space == 'trailing': elif space == "trailing":
opt = True
if not space_params:
# Not optimized ...
space_params = HyperoptTools._space_params(non_optimized, space, 5)
opt = False
for k, v in space_params.items(): for k, v in space_params.items():
result += f'{k} = {v}\n' result += f"{k} = {v}{' # value loaded from strategy' if not opt else ''}\n"
else: else:
# Buy / sell parameters
no_params = HyperoptTools._space_params(non_optimized, space, 5) no_params = HyperoptTools._space_params(non_optimized, space, 5)
result += f"{space}_params = {HyperoptTools._pprint(space_params, no_params)}" result += f"{space}_params = {HyperoptTools._pprint(space_params, no_params)}"