hyperopt: --print-json option added
This commit is contained in:
parent
585536835a
commit
4fa92ec0fa
@ -22,7 +22,7 @@ ARGS_BACKTEST = ARGS_COMMON_OPTIMIZE + ["position_stacking", "use_max_market_pos
|
|||||||
ARGS_HYPEROPT = ARGS_COMMON_OPTIMIZE + ["hyperopt", "hyperopt_path",
|
ARGS_HYPEROPT = ARGS_COMMON_OPTIMIZE + ["hyperopt", "hyperopt_path",
|
||||||
"position_stacking", "epochs", "spaces",
|
"position_stacking", "epochs", "spaces",
|
||||||
"use_max_market_positions", "print_all",
|
"use_max_market_positions", "print_all",
|
||||||
"print_colorized", "hyperopt_jobs",
|
"print_colorized", "print_json", "hyperopt_jobs",
|
||||||
"hyperopt_random_state", "hyperopt_min_trades",
|
"hyperopt_random_state", "hyperopt_min_trades",
|
||||||
"hyperopt_continue", "hyperopt_loss"]
|
"hyperopt_continue", "hyperopt_loss"]
|
||||||
|
|
||||||
|
@ -198,6 +198,12 @@ AVAILABLE_CLI_OPTIONS = {
|
|||||||
action='store_false',
|
action='store_false',
|
||||||
default=True,
|
default=True,
|
||||||
),
|
),
|
||||||
|
"print_json": Arg(
|
||||||
|
'--print-json',
|
||||||
|
help='Print best result detailization in JSON format.',
|
||||||
|
action='store_true',
|
||||||
|
default=False,
|
||||||
|
),
|
||||||
"hyperopt_jobs": Arg(
|
"hyperopt_jobs": Arg(
|
||||||
'-j', '--job-workers',
|
'-j', '--job-workers',
|
||||||
help='The number of concurrently running jobs for hyperoptimization '
|
help='The number of concurrently running jobs for hyperoptimization '
|
||||||
|
@ -242,6 +242,9 @@ class Configuration(object):
|
|||||||
else:
|
else:
|
||||||
config.update({'print_colorized': True})
|
config.update({'print_colorized': True})
|
||||||
|
|
||||||
|
self._args_to_config(config, argname='print_json',
|
||||||
|
logstring='Parameter --print-json detected ...')
|
||||||
|
|
||||||
self._args_to_config(config, argname='hyperopt_jobs',
|
self._args_to_config(config, argname='hyperopt_jobs',
|
||||||
logstring='Parameter -j/--job-workers detected: {}')
|
logstring='Parameter -j/--job-workers detected: {}')
|
||||||
|
|
||||||
|
@ -8,11 +8,14 @@ import logging
|
|||||||
import os
|
import os
|
||||||
import sys
|
import sys
|
||||||
|
|
||||||
|
from collections import OrderedDict
|
||||||
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, Optional
|
from typing import Any, Dict, List, Optional
|
||||||
|
|
||||||
|
import rapidjson
|
||||||
|
|
||||||
from colorama import init as colorama_init
|
from colorama import init as colorama_init
|
||||||
from colorama import Fore, Style
|
from colorama import Fore, Style
|
||||||
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
|
||||||
@ -133,9 +136,31 @@ class Hyperopt(Backtesting):
|
|||||||
results = sorted(self.trials, key=itemgetter('loss'))
|
results = sorted(self.trials, key=itemgetter('loss'))
|
||||||
best_result = results[0]
|
best_result = results[0]
|
||||||
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\n{log_str}\n")
|
print(f"\nBest result:\n\n{log_str}\n")
|
||||||
|
|
||||||
|
if self.config.get('print_json'):
|
||||||
|
result_dict = {}
|
||||||
|
if self.has_space('buy') or self.has_space('sell'):
|
||||||
|
result_dict['params'] = {}
|
||||||
|
if self.has_space('buy'):
|
||||||
|
result_dict['params'].update({p.name: params.get(p.name)
|
||||||
|
for p in self.hyperopt_space('buy')})
|
||||||
|
if self.has_space('sell'):
|
||||||
|
result_dict['params'].update({p.name: params.get(p.name)
|
||||||
|
for p in self.hyperopt_space('sell')})
|
||||||
|
if self.has_space('roi'):
|
||||||
|
min_roi = self.custom_hyperopt.generate_roi_table(params)
|
||||||
|
# Convert keys in min_roi dict to strings because
|
||||||
|
# rapidjson cannot dump dicts with integer keys...
|
||||||
|
# OrderedDict is used to keep the numeric order of the items
|
||||||
|
# in the dict.
|
||||||
|
min_roi = OrderedDict((str(k),v) for k,v in min_roi.items())
|
||||||
|
result_dict['minimal_roi'] = min_roi
|
||||||
|
if self.has_space('stoploss'):
|
||||||
|
result_dict['stoploss'] = params.get('stoploss')
|
||||||
|
print(rapidjson.dumps(result_dict, default=str, number_mode=rapidjson.NM_NATIVE))
|
||||||
|
else:
|
||||||
if self.has_space('buy'):
|
if self.has_space('buy'):
|
||||||
print('Buy hyperspace params:')
|
print('Buy hyperspace params:')
|
||||||
pprint({p.name: params.get(p.name) for p in self.hyperopt_space('buy')},
|
pprint({p.name: params.get(p.name) for p in self.hyperopt_space('buy')},
|
||||||
|
Loading…
Reference in New Issue
Block a user