Print non-optimized parameters (also stop / roi)
This commit is contained in:
parent
2310deec53
commit
34e6ce431f
@ -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']
|
||||||
|
@ -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)}"
|
||||||
|
Loading…
Reference in New Issue
Block a user