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.data.converter import trim_dataframes
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
# Import IHyperOpt and IHyperOptLoss to allow unpickling classes from these modules
from freqtrade.optimize.hyperopt_auto import HyperOptAuto
@ -201,6 +201,25 @@ class Hyperopt:
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:
"""
Log results if it is better than any previous evaluation
@ -311,6 +330,7 @@ class Hyperopt:
strat_stats, self.config['stake_currency'])
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']
total_profit = strat_stats['profit_total']

View File

@ -130,9 +130,9 @@ class HyperoptTools():
non_optimized)
HyperoptTools._params_pretty_print(params, 'sell', "Sell hyperspace params:",
non_optimized)
HyperoptTools._params_pretty_print(params, 'roi', "ROI table:")
HyperoptTools._params_pretty_print(params, 'stoploss', "Stoploss:")
HyperoptTools._params_pretty_print(params, 'trailing', "Trailing stop:")
HyperoptTools._params_pretty_print(params, 'roi', "ROI table:", non_optimized)
HyperoptTools._params_pretty_print(params, 'stoploss', "Stoploss:", non_optimized)
HyperoptTools._params_pretty_print(params, 'trailing', "Trailing stop:", non_optimized)
@staticmethod
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:
space_params = HyperoptTools._space_params(params, space, 5)
result = f"\n# {header}\n"
if space == 'stoploss':
result += f"stoploss = {space_params.get('stoploss')}"
elif space == 'roi':
if space == "stoploss":
opt = True
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({
str(k): v for k, v in space_params.items()
}, default=str, indent=4, number_mode=rapidjson.NM_NATIVE)
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():
result += f'{k} = {v}\n'
result += f"{k} = {v}{' # value loaded from strategy' if not opt else ''}\n"
else:
# Buy / sell parameters
no_params = HyperoptTools._space_params(non_optimized, space, 5)
result += f"{space}_params = {HyperoptTools._pprint(space_params, no_params)}"