Merge pull request #2084 from hroff-1902/hyperopt-print-params4
Improvements to hyperopt output
This commit is contained in:
commit
b3e6e710d8
@ -303,8 +303,10 @@ Given the following result from hyperopt:
|
|||||||
|
|
||||||
```
|
```
|
||||||
Best result:
|
Best result:
|
||||||
135 trades. Avg profit 0.57%. Total profit 0.03871918 BTC (0.7722Σ%). Avg duration 180.4 mins.
|
|
||||||
with values:
|
44/100: 135 trades. Avg profit 0.57%. Total profit 0.03871918 BTC (0.7722Σ%). Avg duration 180.4 mins. Objective: 1.94367
|
||||||
|
|
||||||
|
Buy hyperspace params:
|
||||||
{ 'adx-value': 44,
|
{ 'adx-value': 44,
|
||||||
'rsi-value': 29,
|
'rsi-value': 29,
|
||||||
'adx-enabled': False,
|
'adx-enabled': False,
|
||||||
@ -347,21 +349,15 @@ If you are optimizing ROI, you're result will look as follows and include a ROI
|
|||||||
|
|
||||||
```
|
```
|
||||||
Best result:
|
Best result:
|
||||||
135 trades. Avg profit 0.57%. Total profit 0.03871918 BTC (0.7722Σ%). Avg duration 180.4 mins.
|
|
||||||
with values:
|
44/100: 135 trades. Avg profit 0.57%. Total profit 0.03871918 BTC (0.7722Σ%). Avg duration 180.4 mins. Objective: 1.94367
|
||||||
|
|
||||||
|
Buy hyperspace params:
|
||||||
{ 'adx-value': 44,
|
{ 'adx-value': 44,
|
||||||
'rsi-value': 29,
|
'rsi-value': 29,
|
||||||
'adx-enabled': false,
|
'adx-enabled': False,
|
||||||
'rsi-enabled': True,
|
'rsi-enabled': True,
|
||||||
'trigger': 'bb_lower',
|
'trigger': 'bb_lower'}
|
||||||
'roi_t1': 40,
|
|
||||||
'roi_t2': 57,
|
|
||||||
'roi_t3': 21,
|
|
||||||
'roi_p1': 0.03634636907306948,
|
|
||||||
'roi_p2': 0.055237357937802885,
|
|
||||||
'roi_p3': 0.015163796015548354,
|
|
||||||
'stoploss': -0.37996664668703606
|
|
||||||
}
|
|
||||||
ROI table:
|
ROI table:
|
||||||
{ 0: 0.10674752302642071,
|
{ 0: 0.10674752302642071,
|
||||||
21: 0.09158372701087236,
|
21: 0.09158372701087236,
|
||||||
@ -372,9 +368,9 @@ ROI table:
|
|||||||
This would translate to the following ROI table:
|
This would translate to the following ROI table:
|
||||||
|
|
||||||
``` python
|
``` python
|
||||||
minimal_roi = {
|
minimal_roi = {
|
||||||
"118": 0,
|
"118": 0,
|
||||||
"78": 0.0363463,
|
"78": 0.0363,
|
||||||
"21": 0.0915,
|
"21": 0.0915,
|
||||||
"0": 0.106
|
"0": 0.106
|
||||||
}
|
}
|
||||||
|
@ -11,7 +11,7 @@ import sys
|
|||||||
from operator import itemgetter
|
from operator import itemgetter
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
from pprint import pprint
|
from pprint import pprint
|
||||||
from typing import Any, Dict, List
|
from typing import Any, Dict, List, Optional
|
||||||
|
|
||||||
from joblib import Parallel, delayed, dump, load, wrap_non_picklable_objects, cpu_count
|
from joblib import Parallel, delayed, dump, load, wrap_non_picklable_objects, cpu_count
|
||||||
from pandas import DataFrame
|
from pandas import DataFrame
|
||||||
@ -70,7 +70,7 @@ class Hyperopt(Backtesting):
|
|||||||
if hasattr(self.custom_hyperopt, 'populate_sell_trend'):
|
if hasattr(self.custom_hyperopt, 'populate_sell_trend'):
|
||||||
self.advise_sell = self.custom_hyperopt.populate_sell_trend # type: ignore
|
self.advise_sell = self.custom_hyperopt.populate_sell_trend # type: ignore
|
||||||
|
|
||||||
# Use max_open_trades for hyperopt as well, except --disable-max-market-positions is set
|
# Use max_open_trades for hyperopt as well, except --disable-max-market-positions is set
|
||||||
if self.config.get('use_max_market_positions', True):
|
if self.config.get('use_max_market_positions', True):
|
||||||
self.max_open_trades = self.config['max_open_trades']
|
self.max_open_trades = self.config['max_open_trades']
|
||||||
else:
|
else:
|
||||||
@ -133,11 +133,20 @@ class Hyperopt(Backtesting):
|
|||||||
params = best_result['params']
|
params = best_result['params']
|
||||||
|
|
||||||
log_str = self.format_results_logstring(best_result)
|
log_str = self.format_results_logstring(best_result)
|
||||||
print(f"\nBest result:\n{log_str}\nwith values:")
|
print(f"\nBest result:\n\n{log_str}\n")
|
||||||
pprint(params, indent=4)
|
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'):
|
if self.has_space('roi'):
|
||||||
print("ROI table:")
|
print("ROI table:")
|
||||||
pprint(self.custom_hyperopt.generate_roi_table(params), indent=4)
|
pprint(self.custom_hyperopt.generate_roi_table(params), indent=4)
|
||||||
|
if self.has_space('stoploss'):
|
||||||
|
print(f"Stoploss: {params.get('stoploss')}")
|
||||||
|
|
||||||
def log_results(self, results) -> None:
|
def log_results(self, results) -> None:
|
||||||
"""
|
"""
|
||||||
@ -171,21 +180,24 @@ class Hyperopt(Backtesting):
|
|||||||
"""
|
"""
|
||||||
return any(s in self.config['spaces'] for s in [space, 'all'])
|
return any(s in self.config['spaces'] for s in [space, 'all'])
|
||||||
|
|
||||||
def hyperopt_space(self) -> List[Dimension]:
|
def hyperopt_space(self, space: Optional[str] = None) -> List[Dimension]:
|
||||||
"""
|
"""
|
||||||
Return the space to use during Hyperopt
|
Return the dimensions in the hyperoptimization space.
|
||||||
|
:param space: Defines hyperspace to return dimensions for.
|
||||||
|
If None, then the self.has_space() will be used to return dimensions
|
||||||
|
for all hyperspaces used.
|
||||||
"""
|
"""
|
||||||
spaces: List[Dimension] = []
|
spaces: List[Dimension] = []
|
||||||
if self.has_space('buy'):
|
if space == 'buy' or (space is None and self.has_space('buy')):
|
||||||
logger.debug("Hyperopt has 'buy' space")
|
logger.debug("Hyperopt has 'buy' space")
|
||||||
spaces += self.custom_hyperopt.indicator_space()
|
spaces += self.custom_hyperopt.indicator_space()
|
||||||
if self.has_space('sell'):
|
if space == 'sell' or (space is None and self.has_space('sell')):
|
||||||
logger.debug("Hyperopt has 'sell' space")
|
logger.debug("Hyperopt has 'sell' space")
|
||||||
spaces += self.custom_hyperopt.sell_indicator_space()
|
spaces += self.custom_hyperopt.sell_indicator_space()
|
||||||
if self.has_space('roi'):
|
if space == 'roi' or (space is None and self.has_space('roi')):
|
||||||
logger.debug("Hyperopt has 'roi' space")
|
logger.debug("Hyperopt has 'roi' space")
|
||||||
spaces += self.custom_hyperopt.roi_space()
|
spaces += self.custom_hyperopt.roi_space()
|
||||||
if self.has_space('stoploss'):
|
if space == 'stoploss' or (space is None and self.has_space('stoploss')):
|
||||||
logger.debug("Hyperopt has 'stoploss' space")
|
logger.debug("Hyperopt has 'stoploss' space")
|
||||||
spaces += self.custom_hyperopt.stoploss_space()
|
spaces += self.custom_hyperopt.stoploss_space()
|
||||||
return spaces
|
return spaces
|
||||||
|
@ -463,7 +463,7 @@ def test_start_calls_optimizer(mocker, default_conf, caplog, capsys) -> None:
|
|||||||
parallel.assert_called_once()
|
parallel.assert_called_once()
|
||||||
|
|
||||||
out, err = capsys.readouterr()
|
out, err = capsys.readouterr()
|
||||||
assert 'Best result:\n* 1/1: foo result Objective: 1.00000\nwith values:\n' in out
|
assert 'Best result:\n\n* 1/1: foo result Objective: 1.00000\n' in out
|
||||||
assert dumper.called
|
assert dumper.called
|
||||||
# Should be called twice, once for tickerdata, once to save evaluations
|
# Should be called twice, once for tickerdata, once to save evaluations
|
||||||
assert dumper.call_count == 2
|
assert dumper.call_count == 2
|
||||||
|
Loading…
Reference in New Issue
Block a user